- Script Code -
dofile(reaper.AZ_GetLuaInitPath())
require("reaper_AZSTOKE_SILVER")
trackNameList = {"pl0000","pl1000","pl2000","pl3000","pl4000"}
trackColorList = {33554304,33521664,25165824,16777471,21004543}
retval,inputList = reaper.AZ_GetUserInputList("SourceImportPath",1,"Path :","D:/")
if retval then
--Get Master Select Track
masterTrack = reaper.AZ_GetTrackItemSelect(0,0,1)
masterName = reaper.AZ_GetTrackItemName(masterTrack)
masterDepth = reaper.AZ_GetTrackItemDepth(masterTrack)
for i, value in pairs(trackNameList) do
if masterName == trackNameList[i] then
reaper.AZ_SetTrackItemColor(masterTrack,trackColorList[i])
masterColor = trackColorList[i]
end
end
--Get FileList
fileAllList = {}
fileList = reaper.AZ_GetFilePathList(inputList[1],"Wav")
for i, value in pairs(fileList) do
splitList = reaper.AZ_GetStringSplitList(value,"\\")
splitCount = 0
for e, sp in pairs(splitList) do
splitCount = splitCount + 1
end
fileAllList[i] = {}
fileAllList[i]["Path"] = value
fileAllList[i]["SourceName"] = reaper.AZ_ReplaceSearchString(splitList[splitCount],".wav","")
end
--Get Master Track Children
childList,masterChildCount = reaper.AZ_GetTrackItemChildList(masterTrack)
childInfoList = {}
for i, value in pairs(childList) do
childInfoList[i] = {}
childInfoList[i]["TrackName"]= reaper.AZ_GetTrackItemName(value)
reaper.AZ_SetTrackItemColor(value,masterColor)
childInfoList[i]["TrackMediaCount"] = reaper.AZ_GetTrackItemMediaTypeCount(value,"")
childId = reaper.AZ_GetTrackItemIndex(value)
for e = 1,childInfoList[i].TrackMediaCount do
childInfoList[i][e] = {}
childInfoList[i][e]["MediaName"] = reaper.AZ_GetTrackMediaName(0,childId,e-1)
childInfoList[i][e]["MediaPos"]= reaper.AZ_GetTrackMediaStartTimeSeconds(0,childId,e-1)
end
end
--delet trackNameList & trackBaseList create
trCount = reaper.AZ_GetTrackCountSelect(0,0)
deletIDList = {}
idCount = 0
for i = 0,trCount-1 do
name = reaper.AZ_GetTrackIdName(0,i)
for i, value in pairs(trackNameList) do
if name == value then
idCount = idCount + 1
deletIDList[idCount] = i
end
end
end
table.sort(deletIDList,function(a,b) return (a>b)end)
for i = 1,idCount do
table.remove(trackNameList,deletIDList[i])
table.remove(trackColorList,deletIDList[i])
end
--InsertTrack
for i, value in pairs(trackNameList) do
count = reaper.AZ_GetTrackCountSelect(0,0)
track = reaper.AZ_InsertTrackId(0,count)
reaper.AZ_SetTrackItemName(track,value)
reaper.AZ_SetTrackItemDepth(track,masterDepth)
reaper.AZ_SetTrackItemColor(track,trackColorList[i])
for e = 1,masterChildCount do
childTrack = reaper.AZ_InsertChildTrack(track)
reaper.AZ_SetTrackItemName(childTrack,childInfoList[e].TrackName)
reaper.AZ_SetTrackItemColor(childTrack,trackColorList[i])
for x = 1,childInfoList[e].TrackMediaCount do
newMediaName = reaper.AZ_ReplaceSearchString(childInfoList[e][x].MediaName,string.lower(masterName),string.lower(value))
for z, value in pairs(fileAllList) do
if newMediaName == fileAllList[z].SourceName then
reaper.AZ_InsertMediaTrackItemSecond(childTrack,fileAllList[z].Path,0,childInfoList[e][x].MediaPos)
end
end
end
end
end
end
- Warm Up -
ベースのトラック/子トラックを作成しておく
使用しているベースのpl0000のメディアとベース名以外を一致した状態ですべて用意しておく
- Script Detail -
dofile(reaper.AZ_GetLuaInitPath())
require("reaper_AZSTOKE_SILVER")
・SilverAPIを利用可能にする
trackNameList = {"pl0000","pl1000","pl2000","pl3000","pl4000"}
trackColorList = {33554304,33521664,25165824,16777471,21004543}
・ベース名と色を配列に設定
retval,inputList = reaper.AZ_GetUserInputList("SourceImportPath",1,"Path :","D:/")
・テキスト入力を設定(フォルダ階層をユーザーに指定させる)
if retval then
・テキスト入力が有効の場合以下を実行
--Get Master Select Track
masterTrack = reaper.AZ_GetTrackItemSelect(0,0,1)
masterName = reaper.AZ_GetTrackItemName(masterTrack)
masterDepth = reaper.AZ_GetTrackItemDepth(masterTrack)
・選択しているマスタートラック/名前/階層を取得して各変数に代入
for i, value in pairs(trackNameList) do
if masterName == trackNameList[i] then
reaper.AZ_SetTrackItemColor(masterTrack,trackColorList[i])
masterColor = trackColorList[i]
end
end
・マスタートラックの一致する配列の中身を確認して色を探して変数に代入
--Get FileList
fileAllList = {}
fileList = reaper.AZ_GetFilePathList(inputList[1],"Wav")
・指定されたフォルダパスに含まれているwavを配列出力してfileListに代入
for i, value in pairs(fileList) do
splitList = reaper.AZ_GetStringSplitList(value,"\\")
splitCount = 0
for e, sp in pairs(splitList) do
splitCount = splitCount + 1
end
fileAllList[i] = {}
fileAllList[i]["Path"] = value
fileAllList[i]["SourceName"] = reaper.AZ_ReplaceSearchString(splitList[splitCount],".wav","")
end
・filePathからsource名を出力してfillAllList配列に代入
--Get Master Track Children
childList,masterChildCount = reaper.AZ_GetTrackItemChildList(masterTrack)
・マスタートラックの子トラックを出力してchildListに代入と子トラックの数をmasterChildCountに代入
childInfoList = {}
for i, value in pairs(childList) do
childInfoList[i] = {}
childInfoList[i]["TrackName"]= reaper.AZ_GetTrackItemName(value)
・各子トラックの名前をchildInfoListに代入
reaper.AZ_SetTrackItemColor(value,masterColor)
・マスターの子トラックにはマスターと同じ色を設定
childInfoList[i]["TrackMediaCount"] = reaper.AZ_GetTrackItemMediaTypeCount(value,"")
・各子トラックに入っているメディア数を取得
childId = reaper.AZ_GetTrackItemIndex(value)
・各子トラックアイテムからidを取得してchildIdに代入
for e = 1,childInfoList[i].TrackMediaCount do
・各子トラックのメディア数でループ再生
childInfoList[i][e] = {}
childInfoList[i][e]["MediaName"] = reaper.AZ_GetTrackMediaName(0,childId,e-1)
childInfoList[i][e]["MediaPos"]= reaper.AZ_GetTrackMediaStartTimeSeconds(0,childId,e-1)
・メディアの名前と位置を取得して各変数に代入
end
end
--delet trackNameList & trackBaseList create
trCount = reaper.AZ_GetTrackCountSelect(0,0)
deletIDList = {}
idCount = 0
for i = 0,trCount-1 do
name = reaper.AZ_GetTrackIdName(0,i)
・全トラックの名前を取得してnameに代入
for i, value in pairs(trackNameList) do
・ベース名の配列分ループ再生
if name == value then
・全トラック名とベース名が一致した場合以下を実行
idCount = idCount + 1
deletIDList[idCount] = i
・ベース名と一致したのであればベースから削除対象
※すでに作られたものと認識する
end
end
end
table.sort(deletIDList,function(a,b) return (a>b)end)
・deletIDListを降順に並び替える
for i = 1,idCount do
table.remove(trackNameList,deletIDList[i])
table.remove(trackColorList,deletIDList[i])
・ベース配列から削除を行う
end
--InsertTrack
for i, value in pairs(trackNameList) do
・ベース名分ループ再生
count = reaper.AZ_GetTrackCountSelect(0,0)
・全トラックの数を取得してcountに代入
track = reaper.AZ_InsertTrackId(0,count)
・トラックの最後にトラックをインサート
reaper.AZ_SetTrackItemName(track,value)
reaper.AZ_SetTrackItemDepth(track,masterDepth)
reaper.AZ_SetTrackItemColor(track,trackColorList[i])
・インサートトラックに名前、階層、色を設定
for e = 1,masterChildCount do
・子トラックの数分forループ対応
childTrack = reaper.AZ_InsertChildTrack(track)
・各追加したベーストラックに子トラックをインサート
reaper.AZ_SetTrackItemName(childTrack,childInfoList[e].TrackName)
reaper.AZ_SetTrackItemColor(childTrack,trackColorList[i])
・子トラックに名前と色を設定
for x = 1,childInfoList[e].TrackMediaCount do
・子トラックにメディアの数分forループ
newMediaName = reaper.AZ_ReplaceSearchString(childInfoList[e][x].MediaName,string.lower(masterName),string.lower(value))
・メディア名に対してベース名を入れ替えてnewMediaNameに代入
for z, value in pairs(fileAllList) do
・全ファイル分ループ再生
if newMediaName == fileAllList[z].SourceName then
・sourceNameにnewMediaNameが一致したら以下を実行
reaper.AZ_InsertMediaTrackItemSecond(childTrack,fileAllList[z].Path,0,childInfoList[e][x].MediaPos)
・一致したメディアを指定トラックと指定秒数に並べる
end
end
end
end
end
end