top of page
- 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





- API LINK -

Track

AZSTOKE_AllTrackMediaSetSameAutoSetter

トラック/メディア検知同セットを自動複製

01_BRONZE_ss_edited.png
01_SILVER_edited_edited.png
03_GOLD_edited_edited.png
bottom of page