function Msg(param)
reaper.ShowConsoleMsg(tostring(param).."\n")
end
function get_tr_na()
local cou_tr = reaper.CountSelectedTracks(0)
if cou_tr == 1--确保只有一个被选轨道
then local get_tr = reaper.GetSelectedTrack(0, 0)
local retval, buf = reaper.GetTrackName( get_tr )
--Msg(buf)
local pai = string.match(tostring(buf), "%u+")--匹配buf里第一串英文
if pai == "BPM"
then answer1 = string.match(tostring(buf), "%d+")--匹配buf里第一串数字
answer2 = string.match(tostring(buf), "%d+", 11)--匹配buf里第二串数字
answer3 = "4/4"
answer4 = "pop"--根据轨道标题做预设
else answer1 = 60
answer2 = 32
answer3 = "4/4"
answer4 = "pop"--没有轨道标题做预设
end
else reaper.ShowMessageBox("请选择一个轨道哦~", "选择轨道错误!", 0)
end
end
function set_tr_name()
local cou_tr = reaper.CountSelectedTracks(0)
if cou_tr == 1--确保只有一个被选轨道
then local get_tr = reaper.GetSelectedTrack(0, 0)
local retval, retvals_csv = reaper.GetUserInputs("请输入想要的数值!", 4, "BPM =,副歌拍数,歌曲几几拍,音乐风格", answer1..","..answer2..","..answer3..","..answer4)
if retval == true
then local bpm = string.match(tostring(retvals_csv), "%d+")--匹配retvals_csv里第一串数字
local beats = string.match(tostring(retvals_csv), "%d+", 4)--匹配retvals_csv里第二串数字
local sec = string.format("%.3f",60/bpm)--计算每拍多少秒
local pai = string.match(tostring(retvals_csv), "%d+.%d+", 7)--匹配retvals_csv里第三串字符
local style = string.match(tostring(retvals_csv), "%a+")--匹配retvals_csv里第四串字符
--local dir = string.match(tostring(retvals_csv), ".", 7)--匹配retvals_csv里第三串字符
if pai == "4/4"
then local a = sec*16
local b = sec*32
local c = sec*48
local d = sec*64
local e = sec*96
local newname = "BPM : "..bpm.." 副歌"..beats.."拍 "..pai.."拍歌曲".." 曲风:"..style.." 每拍"..sec.."秒".." 16拍="..a.."秒".." 32拍="..b.."秒".." 48拍="..c.."秒".." 64拍="..d.."秒".." 96拍="..e.."秒"
local _, name = reaper.GetSetMediaTrackInfo_String( get_tr, "P_NAME", newname, true )
else local a = sec*24
local b = sec*36
local c = sec*48
local d = sec*60
local e = sec*82
local newname = "BPM : "..bpm.." 副歌"..beats.."拍 "..pai.."拍歌曲".." 曲风:"..style.." 每拍"..sec.."秒".." 24拍="..a.."秒".." 36拍="..b.."秒".." 48拍="..c.."秒".." 60拍="..d.."秒".." 82拍="..e.."秒"
local _, name = reaper.GetSetMediaTrackInfo_String( get_tr, "P_NAME", newname, true )
end
--Msg(pai)
--reaper.ShowMessageBox(type(pop), "", 0)
else end
else reaper.ShowMessageBox("请选择一个轨道哦~", "选择轨道错误!", 0)
end
end
reaper.Undo_BeginBlock() --Undoblock starts from here
reaper.PreventUIRefresh(1)
get_tr_na()
set_tr_name()
reaper.UpdateArrange()
reaper.Undo_EndBlock("Script name", 0)
reaper.PreventUIRefresh(-1)
脚本里如果BPM的值输入的带有小数点,其他的数值包括BPM都会出错,但是我们需要它BPM带有小数时也能正常。
例如:当我输入BPM = 60.1,其他默认参数,轨道名应该改为BPM : 60.1 副歌32拍 4/4拍歌曲 曲风:pop 每拍1.000秒 16拍=16.0秒 32拍=32.0秒 48拍=48.0秒 64拍=64.0秒 96拍=96.0秒,但是实际上轨道名改成了BPM : 60 副歌1拍 2,4拍歌曲 曲风:pop 每拍1.000秒 24拍=24.0秒 36拍=36.0秒 48拍=48.0秒 60拍=60.0秒 82拍=82.0秒。
我初步认为是在:
local bpm = string.match(tostring(retvals_csv), "%d+")--匹配retvals_csv里第一串数字
local beats = string.match(tostring(retvals_csv), "%d+", 4)--匹配retvals_csv里第二串数字
local sec = string.format("%.3f",60/bpm)--计算每拍多少秒
local pai = string.match(tostring(retvals_csv), "%d+.%d+", 7)--匹配retvals_csv里第三串字符
local style = string.match(tostring(retvals_csv), "%a+")--匹配retvals_csv里第四串字符
这里出错了,想请教这个问题应该如何解决。