RIGDOCKS / REASCRIPT SAMPLES

REAPDOCK

Reaper の ReaScript で実際に動くスクリプトの一覧です。スクリプト名をクリックすると、コード・1 行ずつの解説・実行画面がその場で開きます。Lua と Python の両方を載せています。

解説と実行画面は日本語のみです。コードはそのまま貼り付けて動かせます(使うランクの require / import 行が先頭に入っています)。

スクリプト
84
カテゴリ
16
画面・デモ
622

84 件

BEGINNER17

  • AZ_ififを利用した条件テスト

    実行前の準備

    準備の必要はありません

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    str = "AZSTOKE"
    
    
    if str ~= nil then
    
       Msg("test1:"..str)
    
    end
    
    
    if str == "AZSTOKE" then
    
       Msg("test2:"..str)
    
    end
    
    
    if str == "azstoke" then
    
       Msg("test3:"..str)
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. Lua版RIGDOCKSの初期設定読み込み
    3. str = "AZSTOKE"
    4. str変数に"AZSTOKE"文字列を追加
    5. if str ~= nil then
      
         Msg("test1:"..str)
      
      end
    6. if文 str変数の中身の有無を確認 Trueの場合、Msg関数でstrの中身をコンソール表示
    7. if str == "AZSTOKE" then
      
         Msg("test2:"..str)
      
      end
    8. if文 str変数と”AZSTOKE”が一致するか確認 Trueの場合、Msg関数でstrの中身をコンソール表示
    9. if str == "azstoke" then
      
         Msg("test3:"..str)
      
      end
    10. if文 str変数と”azstoke”が一致するか確認 Trueの場合、Msg関数でstrの中身をコンソール表示

    実行画面

  • AZ_if_2elseifを利用した条件テスト

    実行前の準備

    準備の必要はありません

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    count = 35
    
    if count < 5 then
    
        Msg("5")
    
    elseif count < 10 then
    
        Msg("10")
    
    elseif count < 15 then
    
        Msg("15")
    
    elseif count < 20 then
    
        Msg("20")
    
    elseif count < 25 then
    
        Msg("25")
    
    elseif count < 30 then
    
        Msg("30")
    
    elseif count < 35 then
    
        Msg("35")
    
    elseif count < 40 then
    
        Msg("40")
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. Lua版RIGDOCKSの初期設定読み込み
    3. count = 35
    4. [35]という整数を変数(count)に保存
    5. if count < 5 then
    6. 変数が5未満(5は入らない)の場合
    7. Msg("5")
    8. [5]をコンソールに出力
    9. elseif count < 10 then
      
      Msg("10")
      
      elseif count < 15 then
      
      Msg("15")
      
      elseif count < 20 then
      
      Msg("20")
      
      elseif count < 25 then
      
      Msg("25")
      
      elseif count < 30 then
      
      Msg("30")
      
      elseif count < 35 then
      
      Msg("35")

    実行画面

  • AZ_for_loop指定の数のループを実行

    実行前の準備

    準備の必要はありません

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    count = 5
    
    for i = 1,count do
    
        Msg(i)
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. Lua版RIGDOCKSの初期設定読み込み
    3. count = 5
    4. カウント数を5と指定
    5. for i = 1,count do
    6. ForLoopを利用して1~5までループを設定
    7. Msg(i)
    8. カウントのIDをコンソールに出力
    9. end
    10. ForLoop処理終了

    実行画面

  • AZ_for_loop_2配列の数のループを実行

    実行前の準備

    準備の必要はありません

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    testList = {10,20,30,40,50}
    
    for i, value in pairs(testList) do
    
        Msg(i)
    
        Msg(value)
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. Lua版RIGDOCKSの初期設定読み込み
    3. testList = {10,20,30,40,50}
    4. {}で囲うことによって配列となる10.20.30.40.50はinteger(整数)つまり5つの整数が配列(testlist)に保存
    5. for i, value in pairs(testList) do
    6. ForLoopを利用してtestlistに保存されている配列分ループを回す
    7. Msg(i)
    8. カウントのIDをコンソールに出力
    9. Msg(value)
    10. カウント数に紐づいたtestListをコンソールに出力
    11. end
    12. ForLoop処理終了

    実行画面

  • AZ_list指定数を配列に登録

    実行前の準備

    準備の必要はありません

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    list = {}
    
    count = 5
    
    
    for i = 1,count do
    
        list[i] = i
    
        Msg(list[i])
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. Lua版RIGDOCKSの初期設定読み込み
    3. list = {}
      
      count = 5
    4. listの配列を用意 count変数に整数5を追加
    5. for i = 1,count do
      
          list[i] = i
      
          Msg(list[i])
      
      end
    6. ForLoopを1から5回ループを実行 listにiのインデックスを追加 Msg関数でLoop実行ごとにコンソールに出力

    実行画面

  • AZ_function_return関数の戻値

    実行前の準備

    準備の必要はありません

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    -- Input 2 / Output 2
    function AddAndSubtract(num1, num2)
       add = num1 + num2
    
       subtract = num1 - num2
    
       return add, subtract
    end
    
    -- Input 0 / Output 1
    function GetPI()
    
       return 3.14
    end
    
    -- Input 1 / Output 0
    function CheckNum(num)
    
       if(num < 0) then
           Msg(tostring(num) .. " is " .. "< 0")
           return
       end
    
       if(num > 5) then
           Msg(tostring(num) .. " is " .. "> 5")
           return
       end
    
       if(num > 3) then
           Msg(tostring(num) .. " is " .. "> 3")
           return
       end
    
       Msg(tostring(num) .. " is " .. "0 <= , <= 3")
    end
    
    add, substract = AddAndSubtract(2, 4)
    Msg(add)
    Msg(substract)
    
    Msg(GetPI())
    
    CheckNum(add)
    CheckNum(substract)
    CheckNum(GetPI())
    CheckNum(2)

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. Lua版RIGDOCKSの初期設定読み込み
    3. -- Input 2 / Output 2
      function AddAndSubtract(num1, num2)
    4. 任意の関数(今回は"AddAndSubtract")を作成する。 ()内は、作成したAddAndSubtractという関数の入力値(今回は"num1, num2")を指定
    5.    add = num1 + num2
    6. 入力値2つをたし算して結果をaddに出力
    7.    subtract = num1 - num2
    8. 入力値2つを引き算してsubtractに出力
    9.    return add, subtract
      end
    10. 関数の処理結果を呼び出し元に返します
    11. -- Input 0 / Output 1
      function GetPI()
    12. 任意の関数(今回は"GetPI")を作成する。 入力値が不要のため、()内は未記入
    13.    return 3.14
      end
    14. 関数の処理結果(今回は3.14)を呼び出し元に返します -- Input 1 / Output 0 function CheckNum(num) 任意の関数(今回は"CheckNum")を作成する。 ()内は、作成したCheckNumという関数の入力値(今回は"num")を指定
    15.    if(num < 0) then
    16. num が0より小さい場合
    17.        Msg(tostring(num) .. " is " .. "< 0")
    18. コンソールに「num is <0」と表示
    19.        return
         end
    20. 関数の処理結果を呼び出し元に返します
    21.    if(num > 5) then
    22. num が5より大きい場合
    23.        Msg(tostring(num) .. " is " .. "> 5")
    24. コンソールに「num is >5」と表示
    25.        return
         end
    26. 関数の処理結果を呼び出し元に返します
    27.    if(num > 3) then
    28. num が3より大きい場合
    29.        Msg(tostring(num) .. " is " .. "> 3")
    30. コンソールに「num is >3」と表示
    31.        return
         end
    32. 関数の処理結果を呼び出し元に返します
    33.    Msg(tostring(num) .. " is " .. "0 <= , <= 3")
      end
    34. コンソールに「num is 0 <= , <= 3」と表示
    35. add, substract = AddAndSubtract(2, 4)
    36. Msg(add)
      Msg(substract)
      
      Msg(GetPI())
      
      CheckNum(add)
      CheckNum(substract)
      CheckNum(GetPI())
      CheckNum(2)

    実行画面

  • AZ_showConsoleMsg文字列をコンソール出力する関数と実行

    実行前の準備

    準備の必要はありません

    スクリプト

    function Msg(param)
    
        reaper.ShowConsoleMsg(tostring(param).."\n")
    
    end
    
    
    str1 = "Hello World"
    
    
    Msg(str1)

    1 行ずつの解説

    1. function Msg(param)
    2. 任意の関数(今回は"Msg")を作成する。 ()内は、1で作成したMsgという関数の入力値(今回は"param")を指定
    3. reaper.ShowConsoleMsg(tostring(param).."\n")
      
      end
    4. コンソールに出力する -2で入力値(param)を文字列に変換(tostring)し、改行("\n")
    5. str1 = "Hello World"
    6. 出力したい文字列をitem変数に保存(= "")出力したい文字を記載、itemは文字列の変数として使用 日本語を入力したいときはメモ帳などで入力したものをコピー&ペーストであれば可能
    7. Msg(item)
    8. itemで保存されている文字列をコンソールへ出力

    実行画面

  • AZ_table_Length配列の長さを取得(# / len)

    実行前の準備

    準備の必要はありません

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    a = {"a","b","c"}
    
    x = #(a)
    
    Msg(x)
    
    
    b = {1,2,3,4,5}
    
    y = #(b)
    
    Msg(y)

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. ・Lua版RIGDOCKSの初期設定読み込み
    3. a = {"a","b","c"}
      
      x = #a
    4. ・文字列でのテスト:配列を用意してその長さを#で出力
    5. Msg(x)
    6. ・Msg関数でコンソール出力
    7. b = {1,2,3,4,5}
      
      y = #b
    8. ・整数でのテスト:配列を用意してその長さをlenで出力
    9. Msg(y)
    10. ・Msg関数でコンソール出力

    実行画面

  • AZ_table_In_Table配列の中に配列

    実行前の準備

    準備の必要はありません

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    i = {1,2,3}
    
    b = {4,5,6}
    
    e = {i,b}
    
    Msg(e[1])
    
    Msg(e[1][2])

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. Lua版RIGDOCKSの初期設定読み込み
    3. i = {1,2,3}
    4. {}で囲うことによって配列となる配列(i)に保存
    5. b = {4,5,6}
    6. 配列(b)に保存
    7. e = {i,b}
    8. 配列(i)と配列(b)を配列(e)に保存
    9. Msg(e[1])
    10. 配列(e)の一つ目をコンソールに出力
    11. Msg(e[1][2])
    12. 配列(e)の2つ目eをコンソールに出力 今回は2が出力

    実行画面

  • AZ_table_Insert配列の間に新たな値を追加

    実行前の準備

    準備の必要はありません

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    t = {"A","C"}
    
    table.insert(t,2,"B")
    
    for i = 1,3 do
    
    Msg(t[i])
    
    end
    
    
    table.insert(t,"D")
    
    for i = 1,4 do
    
    Msg(t[i])
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. Lua版RIGDOCKSの初期設定読み込み
    3. t = {"A","C"}
    4. 配列を定義する。
    5. table.insert(t,2,"B")
    6. 配列の2番目に「B」を挿入する。
    7. for i = 1,3 do
      
      Msg(t[i])
      
      end
    8. 配列のインデックス(1~3)の値をコンソールへ出力する。
    9. table.insert(t,"D")
    10. 配列の末尾に「D」を挿入する。
    11. for i = 1,4 do
      
      Msg(t[i])
      
      end
    12. 配列のインデックス(1~4)の値をコンソールへ出力する。

    実行画面

  • AZ_table_Remove配列の一部を指定して削除

    実行前の準備

    準備の必要はありません

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    list = {"A","B","C","D","E","F"}
    
    for i = 1,6 do
    
       Msg(list[i])
    
    end
    
    
    table.remove(list)
    
    for i = 1,6 do
    
    Msg(list[i])
    
    end
    
    
    table.remove(list,2)
    
    for i = 1,6 do
    
    Msg(list[i])
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. Lua版RIGDOCKSの初期設定読み込み
    3. list = {"A","B","C","D","E","F"}
      
      for i = 1,6 do
      
      Msg(list[i])
      
      end
    4. 配列を定義する。 配列のインデックス(1~6)の値をコンソールへ出力する。
    5. table.remove(list)
    6. 配列の末尾を削除する。
    7. for i = 1,6 do
      
      Msg(list[i])
      
      end
    8. 配列のインデックス(1~6)の値をコンソールへ出力する。
    9. table.remove(list,2)
    10. 配列のインデックス(2)の値を削除する。
    11. for i = 1,6 do
      
      Msg(list[i])
      
      end

    実行画面

  • AZ_table_Sort配列を昇順に並び替える

    実行前の準備

    準備の必要はありません

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    t = {"A","C","D","B"}
    
    table.sort(t)
    
    for i = 1,4 do
    
    Msg(t[i])
    
    end
    
    
    t = {"p10000","em2500","p11500","p11800"}
    
    table.sort(t)
    
    for i = 1,4 do
    
    Msg(t[i])
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. Lua版RIGDOCKSの初期設定読み込み
    3. t = {"A","C","D","B"}
    4. 配列を定義する。
    5. table.sort(t)
    6. 配列を並び替える。
    7. for i = 1,4 do
      
      Msg(t[i])
      
      end
    8. 配列のインデックス(1~4)の値をコンソールへ出力する。
    9. t = {"p10000","em2500","p11500","p11800"}
      
      table.sort(t)
    10. 配列を定義し並び替える。
    11. for i = 1,4 do
      
      Msg(t[i])
      
      end
    12. 配列のインデックス(1~4)の値をコンソールへ出力する。

    実行画面

  • AZ_table_Sort_Name配列内の要素を基準に並び替える

    実行前の準備

    準備の必要はありません

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    t = {"test1","test3","test2"}
    
    x = {}
    
    for index, value in pairs(t) do
    
        x[index]= {}
    
        x[index]["name"] = value
    
        x[index][2]= index
    
    end
    
    
    table.sort(x,function(a,b) return (a.name < b.name)end)
    
    for index, value in pairs(x) do
    
        Msg(value.name)
    
        Msg(value[2])
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. Lua版RIGDOCKSの初期設定読み込み
    3. t = {"test1","test3","test2"}
      
      x = {}
    4. 配列を定義する
    5. for index, value in pairs(t) do
      
      x[index]= {}
      
      x[index]["name"] = value
      
      x[index][2]= index
      
      end
    6. 配列(t)の要素数だけ繰り返す。 配列(x)の、配列(t)と同値のインデックスにテーブルを作成し、 「name」と「2」にそれぞれ配列(t)の値とインデックスを格納する。
    7. table.sort(x,function(a,b) return (a.name < b.name)end)
    8. 配列(x)のnameを利用して配列内のソートを行う。
    9. for index, value in pairs(x) do
      
      Msg(value.name)
      
      Msg(value[2])
      
      end
    10. 配列(x)をForLoopでコンソールに出力

    実行画面

  • AZ_table_Text_Changerカンマ区切りの文字列を分割して取得

    実行前の準備

    準備の必要はありません

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    function textTableChanger(table,str,Number,Count)
    
        local a = table local a = {} local b = Count local c = Number local d = 0 local e = 0
    
    for word in str:gmatch("([^,]*)") do
    
        c = c +1
    
        if b > 1 then
    
            if d == 0 then e = e+1 a[e] = {}end
    
                d = d +1
    
                a[e][d] = word
    
                if d == Count then d = 0 end
    
                else
    
                     a[c] = word
    
                end
    
          end
    
          return a
    
        end
    
    
    text = "1,2,3,4,5,6,7,8"
    
    c = {}
    
    c = textTableChanger(c,text,0,1)
    
    Msg(c[3])
    
    
    c = {}
    
    c = textTableChanger(c,text,0,2)
    
    Msg(c[4][2])
    
    
    c = {}
    
    c = textTableChanger(c,text,0,3)
    
    Msg(c[3][1])

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. Lua版RIGDOCKSの初期設定読み込み
    3. function textTableChanger(table,str,Number,Count)
    4. カンマ区切り文字列を配列に格納する関数を定義する。
    5. local a = table local a = {} local b = Count local c = Number local d = 0 local e = 0
    6. 引数を変数に格納し、カウント用の変数を0で初期化する。
    7. for word in str:gmatch("([^,]*)") do
      
      c = c +1
    8. 引数(str)をカンマで分割し、分割後の文字列の数だけ以下5~6の処理を繰り返す。繰り返すたびに変数(c)を加算する。
    9. if b > 1 then
      
      if d == 0 then e = e+1 a[e] = {}end
      
      d = d +1
      
      a[e][d] = word
      
      if d == Count then d = 0 end
    10. 変数(b)(引数のCount)が1より大きい場合、変数(d)が0であれば変数(e)に1加算し配列の(e)番目に空の配列を格納する。 変数(d)に1加算し、配列の(e)番目に格納された配列の(d)番目に4で分割した文字列を格納する。 変数(d)が引数(Count)と同値になれば(d)を0に初期化する。

    実行画面

  • AZ_text_Slice_Chenger[#]区切り文字列を分割して取得

    実行前の準備

    準備の必要はありません

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    s = "1,2,3,4,5,6#1,1,1,0,1,1#3,4,5,4,5,65,4,6"
    
    
    function  textSliceChenger(str)
    
    local c = 0
    
    local y = {}
    
        for x in str:gmatch("([^#]*)")do
    
            c = c + 1
    
            y[c]= x
    
        end
    
    return y
    
    end
    
    
    a = textSliceChenger(s)
    
    Msg(a[1])
    
    Msg(a[2])
    
    Msg(a[3])

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. Lua版RIGDOCKSの初期設定読み込み
    3. s = "1,2,3,4,5,6#1,1,1,0,1,1#3,4,5,4,5,65,4,6"
    4. 「#」区切りの文字列を用意する。
    5. function  textSliceChenger(str)
    6. 「#」区切り文字列を配列に格納する関数を定義する。
    7. local c = 0
      
      local y = {}
    8. カウント用の変数、戻り値格納用配列を定義する。
    9. for x in str:gmatch("([^#]*)")do
      
      c = c + 1
      
      y[c]= x
      
      end
    10. 引数(str)を「#」で分割し、分割後の文字列の数だけ処理を繰り返す。 繰り返すたびに変数(c)を加算する。 配列の(c)番目に分割後の文字列を格納する。
    11. return y
      
      end

    実行画面

  • AZ_table_Same_File_Num配列の中の指定のファイルの格納位置を取得

    実行前の準備

    準備の必要はありません

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    function tableSameFileNum(table,file)
    
         local t = table
    
         local f = file
    
         local c = 1
    
        for x, value in pairs(t) do
    
              if t[x] == f then
    
                 c = x
    
                goto e
    
              else
    
                 c = nil
    
             end
    
        end
    
    ::e::
    
    return c
    
    end
    
    
    t = {10,20,30,40,50}
    
    a = tableSameFileNum(t,30)
    
    Msg(a)

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. Lua版RIGDOCKSの初期設定読み込み
    3. function tableSameFileNum(table,file)
    4. 配列内の文字列が格納されている位置を取得する関数を定義する。
    5. local t = table
      
      local f = file
      
      local c = 1
    6. 引数を変数に格納し、戻り値用の変数(c)をデフォルト1で初期化する。
    7. for x, value in pairs(t) do
      
      if t[x] == f then
      
      c = x
      
      goto e
      
      else
      
      c = nil
      
      end
      
      end
      
      ::e::
      
      return c
    8. 配列の要素数だけ処理を繰り返し、配列に格納されている値が変数(f)と一致すればその位置、しなければnilを変数(c)の値とする。

    実行画面

  • AZ_table_Same_File_Bool配列の中に指定のファイルの有無を確認

    実行前の準備

    準備の必要はありません

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    function tableSameFileBool(table,file)
    
        local tableL = table
    
        local fileL = file
    
        local BoolL = false
    
        for x, value in pairs(tableL) do
    
             if tableL[x] == fileL then
    
                 BoolL = true
    
                 goto e
    
            else
    
                 BoolL = false
    
            end
    
        end
    
     ::e::
    
    return  BoolL
    
    end
    
    
    t = {10,20,30,40,50}
    
    a = tableSameFileBool(t,30)
    
    Msg(a)

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. function tableSameFileBool(table,file)
    3. 配列内に文字列が格納されているか確認する関数を定義する。
    4. local tableL = table
      
      local fileL = file
      
      local BoolL = false
    5. 引数を変数に格納し、戻り値用の変数(BoolL)をデフォルトfalseで初期化する。
    6. for x, value in pairs(tableL) do
      
      if tableL[x] == fileL then
      
      BoolL = true
      
      goto e
      
      else
      
      BoolL = false
      
      end
      
      end
      
      ::e::
      
      return  BoolL
    7. 配列の要素数だけ処理を繰り返し、変数BoolLの値を配列に格納されている値が 変数(fileL)と一致すればtrue、しなければfalseとする。 一致した場合繰り返し処理を抜ける。

    実行画面

MEDIA14

  • AZSTOKE_SelectAllMediaStereoDownMixMonoChanger全ての選択メディアのチャンネルモードをステレオミックスダウンのモノラルに変更

    実行前の準備

    プロジェクト内にメディアを複数設置 変更したいメディアを選択

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    
    allCount,_ = reaper.AZ_GetSelectedMediaTypeCount(0,"")
    
    
    for i = 0,allCount-1 do
    
        reaper.AZ_SetSelectedMediaChannelMode(0,i,2)
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
    2. allCount,_ = reaper.AZ_GetSelectedMediaTypeCount(0,"")
    3. 選択メディアの全ての数(allCount)を取得
    4. for i = 0,allCount-1 do
      
          reaper.AZ_SetSelectedMediaChannelMode(0,i,2)
      
      end
    5. ForLoopを実行 0~5-1 選択数が5のため0-4で5になる 各IDごとのチャンネルモードセットを行う 2:DownMixMono

    実行画面

  • AZSTOKE_AllMediaNameAscendingOrderSetter全てのメディアを昇順に並べ替える

    実行前の準備

    プロジェクト内にメディアを複数設置

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    allCount = reaper.AZ_GetMediaTypeCount(0,"")
    
    
    mediaList = {}
    
    mediaInterval = 1
    
    setMediaTime = 0
    
    
    for i = 1,allCount do
    
        mediaList[i] = {}
    
        mediaList[i]["name"]= reaper.AZ_GetMediaName(0,i-1)
    
        mediaList[i]["media"]= reaper.AZ_GetMediaItemSelect(0,i-1,0)
    
        mediaList[i]["length"]= reaper.AZ_GetMediaLength(0,i-1)
    
    end
    
    
    table.sort(mediaList,function(a,b) return (a.name < b.name)end)
    
    for index, value in pairs(mediaList) do
    
        if index == 1 then
    
           reaper.AZ_SetMediaItemStartTimeSeconds(mediaList[index].media,setMediaTime)
    
           setMediaTime = setMediaTime+mediaList[index].length+mediaInterval
    
        else
    
           reaper.AZ_SetMediaItemStartTimeSeconds(mediaList[index].media,setMediaTime)
    
           setMediaTime = setMediaTime+mediaList[index].length+mediaInterval
    
        end
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. allCount = reaper.AZ_GetMediaTypeCount(0,"")
    3. メディアの全ての数(allCount)を取得
    4. mediaList = {}
    5. 配列(medialist)を定義する
    6. mediaInterval = 1
    7. メディアの間隔値を変数として準備
    8. setMediaTime = 0
    9. メディアの開始位置を変数として準備
    10. for i = 1,allCount do
    11. *1 1から変数(allCount)分、ループさせる
    12.     mediaList[i] = {}
    13. *2 配列(mediaList[i])の中に配列{}を定義
    14.     mediaList[i]["name"]= reaper.AZ_GetMediaName(0,i-1)
    15. メディアの名前を取得し、mediaList[i]の["name"]に保存
    16.     mediaList[i]["media"]= reaper.AZ_GetMediaItemSelect(0,i-1,0)
    17. MeidaItemを取得し、mediaList[i]の["media"]に保存
    18.     mediaList[i]["length"]= reaper.AZ_GetMediaLength(0,i-1)
    19. メディアの長さを取得し、mediaList[i]の["length"]に保存
    20. end
    21. table.sort(mediaList,function(a,b) return (a.name < b.name)end)
    22. *3 配列(mediaList)の["name"]を利用して配列内のソートを行う nameをソートすることで配列内の同IDに同封されている"media"、"length"も共に入れ替わる
    23. for index, value in pairs(mediaList) do
    24. 配列(mediaList)の要素数だけ繰り返す
    25.    if index == 1 then
    26. *4 変数(index)が1の場合、下に続く
    27.        reaper.AZ_SetMediaItemStartTimeSeconds(mediaList[index].media,setMediaTime)
    28. 配列(mediaList[index])のメディアをsetMediaTime(0秒の位置)にセットする
    29.        setMediaTime = setMediaTime+mediaList[index].length+mediaInterval
    30. 2つ目の開始地点を出力 メディアの開始位置の変数(setMediaTime)+メディアの長さ+メディアの間隔値(1秒)
    31.     else
    32. if文 変数(index)の中身を確認 1つ目以外の場合、下に続く
    33.        reaper.AZ_SetMediaItemStartTimeSeconds(mediaList[index].media,setMediaTime)
    34. 配列mediaList[index]のメディアをsetMediaTime(2つ目以降の位置)にセットする
    35.        setMediaTime = setMediaTime+mediaList[index].length+mediaInterval
    36. 3つ目以降の開始地点を出力 メディアの開始位置の変数(setMediaTime)+メディアの長さ+メディアの間隔値(1秒)
    37.    end
    38. 配列(mediaList)分、繰り返す
    39. end
    40. プロジェクトに配置された全てのメディアを昇順に並べ替えられている
    41. =参考文献===
    42. *1:【AZ_for_loop:指定の数のループを実行】 *2:【AZ_{}:配列の中に配列】 *3:【AZ_tableSort(name):配列内の要素を基準に並び替える】 *4:【AZ_if:ifを利用した条件テスト】

    実行画面

  • AZSTOKE_SelectAllMediaAddNGWord全選択メディアの名前に"_ng"を追加

    実行前の準備

    プロジェクト内にメディアを複数設置

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    allCount,_ = reaper.AZ_GetSelectedMediaTypeCount(0,"")
    
    
    for i = 0,allCount-1 do
    
       name = reaper.AZ_GetSelectedMediaName(0,i)
    
       name = name.."_ng"
    
       reaper.AZ_SetSelectedMediaName(0,i,name)
    
       Msg(name)
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. allCount,reaper.AZ_GetSelectedMediaTypeCount(0,"")
    3. 選択しているメディアの数(allCount)を取得
    4. for i = 0,allCount-1 do
    5. 0から変数(allCount-1)分、ループさせる
    6.    name = reaper.AZ_GetSelectedMediaName(0,i)
    7. 変数(name)に変数(i)に入った選択しているメディア名を保存する
    8.    name = name.."_ng"
    9. 変数(name)に_ngを追記する
    10.    reaper.AZ_SetSelectedMediaName(0,i,name)
    11. 選択しているメディアID(i)のメディア名に変数(name)を設定する
    12.    Msg(name)
    13. コンソールにメディアIDを出力する allCount分回す
    14. end

    実行画面

  • AZSTOKE_TrackAllMediaNameAndFrameConsol指定トラックの全てのファイル名とフレーム数をコンソールに出力

    実行前の準備

    プロジェクト内にメディアを複数設置

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    allCount,_ = reaper.AZ_GetTrackMediaTypeCount(0,1,"")
    
    
    for i = 0,allCount-1 do
    
       name = reaper.AZ_GetTrackMediaName(0,1,i)
    
       frame = reaper.AZ_GetTrackMediaStartTimeFrame(0,1,i)
    
       Msg(frame..":"..name)
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. allCount,reaper.AZ_GetTrackMediaTypeCount(0,1,"")
    3. 指定トラックの全てのメディアの数(allCount)を取得
    4. for i = 0,allCount-1 do
    5. 0から変数(allCount-1)分、ループさせる
    6.    name = reaper.AZ_GetTrackMediaName(0,1,i)
    7. 変数(name)に変数(i)に入った指定トラック内の指定メディア名を保存
    8.    frame = reaper.AZ_GetTrackMediaStartTimeFrame(0,1,i)
    9. 変数(frame)に変数(i)に入った指定トラック内にある指定メディアの開始フレームを保存
    10.    Msg(frame..":"..name)
    11. コンソール画面にフレーム数(frame):メディア名(name)の順で出力
    12. end

    実行画面

  • AZSTOKE_SelectAllMediaAddVolume全選択メディアの音量を+1dB

    実行前の準備

    プロジェクト内にメディアを複数設置

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    allCount,_ = reaper.AZ_GetSelectedMediaTypeCount(0,"")
    
    
    for i = 0,allCount-1 do
    
      reaper.AZ_SetSelectedMediaAddVolume(0,i,1)
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. allCount,reaper.AZ_GetSelectedMediaTypeCount(0,"")
    3. 選択しているメディアの数(allCount)を取得
    4. for i = 0,allCount-1 do
    5. 0から変数(allCount-1)分、ループさせる
    6.   reaper.AZ_SetSelectedMediaAddVolume(0,i,1)
    7. 指定選択メディアの音量を指定値分だけ増減する 今回は+1db
    8. end

    実行画面

  • AZSTOKE_TrackAllMediaSetRateMoveToSec指定トラックの全てのメディアを0.7倍速にして再度1秒ごとに並び替え

    実行前の準備

    プロジェクト内にメディアを複数設置

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    allCount,_ = reaper.AZ_GetTrackMediaTypeCount(0,1,"")
    
    
    mediaList ={}
    
    mediaInterval = 1
    
    setMeidaRate = 0.7
    
    
    for i = 1,allCount do
    
      mediaList[i] = {}
    
      mediaList[i]["media"]= reaper.AZ_GetMediaTrackItemSelect(0,1,i-1,0)
    
      mediaList[i]["startPos"]= reaper.AZ_GetTrackMediaStartTimeSeconds(0,1,i-1)
    
      reaper.AZ_SetTrackMediaRate(0,1,i-1,setMeidaRate)
    
      mediaList[i]["length"]= reaper.AZ_GetTrackMediaLength(0,1,i-1)
    
    end
    
    
    for index, value in pairs(mediaList) do
    
        if index == 1 then
    
          startNextPos = mediaList[index].startPos+mediaList[index].length+mediaInterval
    
        else
    
           reaper.AZ_SetMediaItemStartTimeSeconds(mediaList[index].media,startNextPos)
    
           startNextPos = startNextPos+mediaList[index].length+mediaInterval
    
        end
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. allCount,_ = reaper.AZ_GetTrackMediaTypeCount(0,1,"")
    3. 指定トラックの全てのメディアの数(allCount)を取得
    4. mediaList ={}
    5. 配列(medialist)を定義する
    6. mediaInterval = 1
    7. メディアの間隔値を変数として準備
    8. setMeidaRate = 0.7
    9. メディアの再生速度を変数として準備
    10. for i = 1,allCount do
    11. 1から変数(allCount)分、ループさせる
    12.   mediaList[i] = {}
    13. 配列(mediaList[i])の中に配列{}を定義
    14.   mediaList[i]["media"]= reaper.AZ_GetMediaTrackItemSelect(0,1,i-1,0)
    15. MeidaItemを取得し、mediaList[i]の["media"]に保存
    16.   mediaList[i]["startPos"]= reaper.AZ_GetTrackMediaStartTimeSeconds(0,1,i-1)
    17. メディアの開始位置を取得し、mediaList[i]の["start"]に保存
    18.   reaper.AZ_SetTrackMediaRate(0,1,i-1,setMeidaRate)
    19. メディアの再生速度を変数(setMediaRate)に設定
    20.   mediaList[i]["length"]= reaper.AZ_GetTrackMediaLength(0,1,i-1)
    21. メディアの長さを取得し、mediaList[i]の["length"]に保存
    22. end
    23. for index, value in pairs(mediaList) do
    24. 配列(mediaList)の要素数だけ繰り返す
    25.     if index == 1 then
    26. 変数(index)が1の場合、下に続く
    27.       startNextPos = mediaList[index].startPos+mediaList[index].length+mediaInterval
    28. 配列mediaList[index]の開始位置+配列mediaList[index]のメディアの長さ+メディアの間隔値(1秒)を変数(startNextPos)にセット
    29.     else
    30. if文 変数(index)の中身を確認 1つ目以外の場合、下に続く
    31.        reaper.AZ_SetMediaItemStartTimeSeconds(mediaList[index].media,startNextPos)
    32. 配列mediaList[index]のメディアを変数(startNextPos)にセット
    33.        startNextPos = startNextPos+mediaList[index].length+mediaInterval
    34. 変数(startNextPos)+配列mediaList[index]のメディアの長さ++メディアの間隔値(1秒)を変数(startNextPos)にセット
    35.     end
    36. 配列(mediaList)分、繰り返す
    37. end
    38. 指定トラックの全てのメディアを0.7倍速になり、1秒間隔にならんでいる

    実行画面

  • AZSTOKE_SelectAllMediaSetFade全選択メディアにフェードイン0.2秒/アウト1秒

    実行前の準備

    プロジェクト内にメディアを複数設置

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    allCount,_ = reaper.AZ_GetSelectedMediaTypeCount(0,"")
    
    
    for i = 0,allCount-1 do
    
      reaper.AZ_SetSelectedMediaFade(0,i,1,0.2,1,1)
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      allCount,_ = reaper.AZ_GetSelectedMediaTypeCount(0,"")
    2. 選択しているメディアの数(allCount)を取得
    3. for i = 0,allCount-1 do
    4. 0から変数(allCount-1)分、ループさせる
    5.   reaper.AZ_SetSelectedMediaFade(0,i,1,0.2,1,1)
    6. 指定選択メディアの開始フェードを0.2秒、終了フェードを1秒に設定 今回のフェードタイプは1を使用
    7. end

    実行画面

  • AZSTOKE_SelectMovieMultiCopy選択メディアを0.2秒間隔で10動画コピー

    実行前の準備

    プロジェクト内にメディアを複数設置

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    endTime = reaper.AZ_GetSelectedMediaEndTime(0,0)
    
    length = reaper.AZ_GetSelectedMediaLength(0,0)
    
    
    mediaInterval = 0.2
    
    
    if retval then
    
      startPos = endTime+mediaInterval
    
      for i =1,10 do
    
          reaper.AZ_SetSelectedMediaActiveTakeCopy(0,0,0,startPos)
    
          startPos =length+mediaInterval+startPos
    
      end
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. endTime = reaper.AZ_GetSelectedMediaEndTime(0,0)
    3. 選択しているメディアの終了位置を変数(endTime)にセット
    4. length = reaper.AZ_GetSelectedMediaLength(0,0)
    5. 選択しているメディアの長さを変数(length)にセット
    6. mediaInterval = 0.2
    7. メディアの間隔値を変数として準備
    8. if retval then
    9. 変数の結果がretval(true)の場合、下に続く
    10.   startPos = endTime+mediaInterval
    11. 変数(endTime)+メディアの間隔値の変数(mediaInterval)を変数(startPos)にセット
    12.   for i =1,10 do
    13. 10回分ループさせる
    14.       reaper.AZ_SetSelectedMediaActiveTakeCopy(0,0,0,startPos)
    15. 選択メディア(今回は動画)を指定位置(startPos)に複製
    16.       startPos =length+mediaInterval+startPos
    17. 変数(length)+メディアの間隔値の変数(mediaInterval)+変数(startPos)を変数(startPos)にセット
    18.   end
      
      end

    実行画面

  • AZSTOKE_AllDeleteMuteMediaミュートのメディアを全削除

    実行前の準備

    プロジェクト内にメディアを複数設置 ミュートしているメディアを設置

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    
    allCount = reaper.AZ_GetMediaTypeCount(0,"")
    
    
    for i = allCount-1,0,-1 do
    
       muteType = reaper.AZ_GetMediaMute(0,i)
    
       if (muteType) then
    
          reaper.AZ_DeleteMedia(0,i)
    
       end
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
    2. allCount = reaper.AZ_GetMediaTypeCount(0,"")
    3. メディアの数を出力してallCount変数に代入
    4. for i = allCount-1,0,-1 do
    5. メディア数文Forで回す。 この際に-1 doを追加することでメディアの数からマイナスしていく形でForをループされていく。例:5.4.3.2.1.0のように最終値からiが減っていく形になる。
    6.    muteType = reaper.AZ_GetMediaMute(0,i)
    7. iのIDメディアのミュートのタイプ(bool)を取得
    8. if (muteType) then
    9. ミュートしていればTrueで以下処理を実行
    10.       reaper.AZ_DeleteMedia(0,i)
    11. iのメディアIDを削除する
    12.    end
      
      end

    実行画面

  • AZSTOKE_SelectAllMediaAddPitch全選択メディアのピッチを-1

    実行前の準備

    プロジェクト内にメディアを複数設置

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    
    allCount,_ = reaper.AZ_GetSelectedMediaTypeCount(0,"")
    
    
    for i = 0,allCount-1 do
    
      reaper.AZ_SetSelectedMediaAddPitch(0,i,-1)
    
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
    2. allCount,_ = reaper.AZ_GetSelectedMediaTypeCount(0,"")
    3. 選択しているメディアの数(allCount)を取得
    4. for i = 0,allCount-1 do
    5. 0から変数(allCount-1)分、ループさせる
    6.   reaper.AZ_SetSelectedMediaAddPitch(0,i,-1)
    7. 変数(i)に入った選択しているメディアのピッチを-1に設定
    8. end

    実行画面

  • AZSTOKE_UserInputPathAutoInsertMedia指定フォルダのWAVファイルを1秒間隔で並列挿入

    実行前の準備

    指定フォルダの中にwavファイルを用意

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    
    retval,inputList = reaper.AZ_GetUserInputList("AZWavList",1,"Path :","D:\\")
    
    fileList = reaper.AZ_GetFilePathList(inputList[1],"wav")
    
    
    startPos = 0
    
    
    for i, value in pairs(fileList) do
    
        reaper.AZ_SetPlayCursorPosition(0,0,startPos)
    
        item = reaper.AZ_InsertMediaOutItem(0,value)
    
        endPos = reaper.AZ_GetMediaItemEndTime(item)
    
        startPos = endPos + 1
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
    2. ・SilverAPIを利用可能にする
    3. retval,inputList = reaper.AZ_GetUserInputList("AZWavList",1,"Path :","D:\\")
    4. ・SimpleUIを表示して入力値をinputListに代入
    5. fileList = reaper.AZ_GetFilePathList(inputList[1],"wav")
    6. ・パス情報に対してファイルのフルパスを取得して配列に代入
    7. startPos = 0
    8. ・startPosの初期値として0を代入
    9. for i, value in pairs(fileList) do
    10. ・fileListの数分Forループ再生
    11.     reaper.AZ_SetPlayCursorPosition(0,0,startPos)
    12. ・startPosの位置にカーソルを移動
    13.     item = reaper.AZ_InsertMediaOutItem(0,value)
    14. ・メディアをインサートしてmediaItemを出力してitemに代入
    15.     endPos = reaper.AZ_GetMediaItemEndTime(item)
    16. ・メディアアイテムの終了地点を取得してendPosに代入
    17.     startPos = endPos + 1
    18. ・startPosにendPosの一秒後の開始地点を設定
    19. end

    実行画面

  • AZSTOKE_Media_OK_Reset切り取ったOK音を並べ直す

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    
    itemList = reaper.AZ_GetSelectedMediaItemList(0)
    
    nowPos = reaper.AZ_GetPlayCursorPosition(0)
    
    
    for i, value in pairs(itemList) do
    
       if i == 1 then
    
          interval = 2
    
       else
    
          interval = 0.5
    
       end
    
       reaper.CSurf_GoEnd()
    
       pos = reaper.AZ_GetPlayCursorPosition(0)
    
       pos = pos + interval
    
       reaper.AZ_SetMediaItemStartTimeSeconds(value,pos)
    
    end
    
    
    reaper.AZ_SetPlayCursorPosition(0,0,nowPos)

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
    2. ・Bronzeを利用できるように設定
    3. itemList = reaper.AZ_GetSelectedMediaItemList(0)
    4. ・選択メディアをリストで出力
    5. nowPos = reaper.AZ_GetPlayCursorPosition(0)
    6. ・現在のカーソル位置を取得
    7. for i, value in pairs(itemList) do
    8. ・メディアのリスト分Forループ
    9.    if i == 1 then
    10. ・1つ目のメディアは下の処理を実行
    11.       interval = 2
    12. ・間隔の値 2秒
    13.    else
    14.       interval = 0.5
    15. ・1つ目以外は 0.5秒 end reaper.CSurf_GoEnd()
    16. ・カーソルを全メディアの最後に設定
    17.    pos = reaper.AZ_GetPlayCursorPosition(0)
    18. ・最終のカーソル秒を取得
    19.    pos = pos + interval
    20. ・最終の秒に間隔の値を足す
    21.    reaper.AZ_SetMediaItemStartTimeSeconds(value,pos)
    22. ・メディアをその位置に移動 end

    実行画面

  • AZSTOKE_Media_OK_Reset_2切り取ったOK音を並べ直す 改良版1

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    
    itemList = reaper.AZ_GetSelectedMediaItemList(0)
    
    nowPos = reaper.AZ_GetPlayCursorPosition(0)
    
    
    if #(itemList) > 0 then
    
       setName = "select"
    
       nameCheck = false
    
       selectTrack = reaper.AZ_GetTrackItemSelect(0,0,1)
    
       trList = reaper.AZ_GetTrackItemChildList(selectTrack)
    
    
       if #(trList) > 0 then
    
          for i, value in pairs(trList) do
    
              trName = reaper.AZ_GetTrackItemName(value)
    
              if trName == setName then
    
                 nameCheck = true
    
                 childTrack = value
    
                 childTrackId = reaper.AZ_GetTrackItemIndex(childTrack)
    
              end
    
          end
    
       end
    
    
       if nameCheck == false then
    
          childTrack = reaper.AZ_InsertChildTrack(selectTrack)
    
          reaper.AZ_SetTrackItemName(childTrack,setName)
    
          childTrackId = reaper.AZ_GetTrackItemIndex(childTrack)
    
       end
    
    
       for i, value in pairs(itemList) do
    
           if i == 1 then
    
              interval = 2
    
           else
    
              interval = 0.5
    
           end
    
           reaper.CSurf_GoEnd()
    
           pos = reaper.AZ_GetPlayCursorPosition(0)
    
           pos = pos + interval
    
           reaper.AZ_SetMediaItemMoveToTrack(value,childTrackId)
    
           reaper.AZ_SetMediaItemStartTimeSeconds(value,pos)
    
       end
    
    end
    
    reaper.AZ_SetPlayCursorPosition(0,0,nowPos)

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
    2. ・APIを利用可能にする
    3. itemList = reaper.AZ_GetSelectedMediaItemList(0)
    4. ・選択メディアのリスト出力
    5. nowPos = reaper.AZ_GetPlayCursorPosition(0)
    6. ・現在のカーソル位置を取得
    7. if #(itemList) > 0 then
    8. ・選択メディアが一つでもある場合は以下を実行
    9.    setName = "select"
    10. ・トラック名を用意
    11.    nameCheck = false
    12. ・チェック用のBoolをFalseで用意
    13.    selectTrack = reaper.AZ_GetTrackItemSelect(0,0,1)
    14. ・選択トラックを取得
    15.    trList = reaper.AZ_GetTrackItemChildList(selectTrack)
    16. ・選択トラックの子をリストで取得
    17.    if #(trList) > 0 then
    18. ・子トラックが一つでもある場合は以下を実行
    19.       for i, value in pairs(trList) do
    20. ・トラックリスト分Forをループ実行
    21.           trName = reaper.AZ_GetTrackItemName(value)
    22. ・トラックの名前を取得
    23.           if trName == setName then
    24. ・トラックの名前と設定名前が一致した場合以下を実行
    25.              nameCheck = true
    26. ・selectの名前が一致するトラックがあるためtrueを設定
    27.              childTrack = value
    28. ・childTrackに一致したトラックを設定
    29.              childTrackId = reaper.AZ_GetTrackItemIndex(childTrack)
    30. ・childTrackからIdを取得
    31.           end
      
            end
      
         end
    32.    if nameCheck == false then
    33. ・nameCheckの判定がFalseになっている場合以下を実行
    34.       childTrack = reaper.AZ_InsertChildTrack(selectTrack)
    35. ・選択トラックの子にトラックを生成
    36.       reaper.AZ_SetTrackItemName(childTrack,setName)
    37. ・生成したトラックに"select"の名前を設定
    38.       childTrackId = reaper.AZ_GetTrackItemIndex(childTrack)
    39. ・生成したトラックのIdを取得
    40.    end
    41.    for i, value in pairs(itemList) do
    42. ・メディアリスト分Forループ再生
    43.        if i == 1 then
      
                interval = 2
    44. ・最初の設定位置に2秒を設定
    45.        else
      
                interval = 0.5
    46. ・以降は設定位置に0.5秒を設定
    47.        end
      
             reaper.CSurf_GoEnd()
    48. ・カーソルを最後に設定
    49.        pos = reaper.AZ_GetPlayCursorPosition(0)
    50. ・最後に設定したカーソルの位置を取得
    51.        pos = pos + interval
    52. ・設定したインターバルの秒数を足してposに設定
    53.        reaper.AZ_SetMediaItemMoveToTrack(value,childTrackId)
    54. ・子トラックにメディアを移動
    55.        reaper.AZ_SetMediaItemStartTimeSeconds(value,pos)
    56. ・そのメディアをposの位置に移動 end end
    57. reaper.AZ_SetPlayCursorPosition(0,0,nowPos)
    58. ・最後に移動していたカーソルをもとに戻す

    実行画面

  • AZSTOKE_Recording_SeparateTakesToNG収録したテイクをOKとNGに分ける

    実行前の準備

    プロジェクト内にメディアを複数設置

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    
    -- NG
    
    function OKtoNG()
    
    
        allCount,_ = reaper.AZ_GetSelectedMediaTypeCount(0,"")
    
    
        mutedMedia = {}
    
    
        for i = 0,allCount-1 do
    
           name = reaper.AZ_GetSelectedMediaName(0,i)
    
           name = name.."_ng"
    
           reaper.AZ_SetSelectedMediaName(0,i,name)
    
    
           table.insert(mutedMedia, name)
    
    
           reaper.AZ_SetSelectedMediaMute(0, i, true)
    
        end
    
    
        Msg("以下のメディアをNGにしました")
    
        ShowObject(mutedMedia)
    
    end
    
    
    -- OK
    
    function NGtoOK()
    
    
        allCount,_ = reaper.AZ_GetSelectedMediaTypeCount(0,"")
    
    
        mutedMedia = {}
    
    
        for i = 0, allCount-1 do
    
           name = reaper.AZ_GetSelectedMediaName(0,i)
    
           name = reaper.AZ_ReplaceSearchString(name, "_ng", "")
    
           reaper.AZ_SetSelectedMediaName(0,i,name)
    
    
           table.insert(mutedMedia, name)
    
    
           reaper.AZ_SetSelectedMediaMute(0, i, false)
    
        end
    
    
        Msg("以下のメディアをOKにしました")
    
        ShowObject(mutedMedia)
    
    end
    
    
    function SeparateTakesToNG()
    
        retval, inputList = reaper.AZ_GetUserInputList("Select processing mode", 1, "OK to NG: 0 / NG to OK: 1", "0")
    
        if retval == false then return end
    
    
        if(inputList[1] == "1") then
    
            NGtoOK()
    
        else
    
            OKtoNG()
    
        end
    
    end
    
    
    SeparateTakesToNG()

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
    2. ・RIGDOCKSをインポート
    3. -- NG
      
      function OKtoNG()
    4. ・メディアをNGにする関数
    5.     allCount,_ = reaper.AZ_GetSelectedMediaTypeCount(0,"")
    6. ・ 選択されたメディアの数を取得
    7.     mutedMedia = {}
    8.     for i = 0,allCount-1 do
      
             name = reaper.AZ_GetSelectedMediaName(0,i)
    9. ・ メディアの名前を取得
    10.        name = name.."_ng"
    11. ・ 名前の末尾に"_ng"を追加
    12.        reaper.AZ_SetSelectedMediaName(0,i,name)
    13. ・ メディアの名前を設定
    14.        table.insert(mutedMedia, name)
    15. ・ ミュートしたメディアの名前をリストに追加
    16.        reaper.AZ_SetSelectedMediaMute(0, i, true)
    17. ・ メディアをミュートに設定
    18.     end
    19. Msg("以下のメディアをNGにしました") ShowObject(mutedMedia)
    20. ・ ミュートしたメディアのリストを表示 end
    21. -- OK
      
      function NGtoOK()
    22. ・NGのメディアをOKにする関数
    23.     allCount,_ = reaper.AZ_GetSelectedMediaTypeCount(0,"")
    24. ・ 選択されたメディアの数を取得
    25.     okMedia = {}
    26.     for i = 0, allCount-1 do
      
             name = reaper.AZ_GetSelectedMediaName(0,i)
    27. ・ メディアの名前を取得
    28.        name = reaper.AZ_ReplaceSearchString(name, "_ng", "")
    29. ・ 名前から"_ng"を削除
    30.        reaper.AZ_SetSelectedMediaName(0,i,name)
    31. ・ メディアの名前を設定
    32.        table.insert(okMedia, name)
    33. ・ OKにしたメディアの名前をリストに追加
    34.        reaper.AZ_SetSelectedMediaMute(0, i, false)
    35. ・ メディアをミュート解除に設定 end
    36. Msg("以下のメディアをOKにしました") ShowObject(okMedia)
    37. ・ ミュート解除したメディアのリストを表示 end
    38. function SeparateTakesToNG()
      
          retval, inputList = reaper.AZ_GetUserInputList("Select processing mode", 1, "OK to NG: 0 / NG to OK: 1", "0")
      
          if retval == false then return end
    39. ・ ユーザーに処理モードの選択を促す
    40.     if(inputList[1] == "1") then
      
              NGtoOK()
    41. ・ 1ならOKにする処理を実行
    42.     else
      
              OKtoNG()
    43. ・ それ以外ならNGにする処理を実行
    44.     end
      
      end
    45. SeparateTakesToNG()
    46. ・メイン処理の実行

    実行画面

Movie1

  • AZSTOKE_Movie_Copy_1選択動画を指定数コピー並列

    実行前の準備

    動画を用意

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    
    endTime = reaper.AZ_GetSelectedMediaEndTime(0,0)
    
    length = reaper.AZ_GetSelectedMediaLength(0,0)
    
    track = reaper.AZ_GetTrackItemSelect(0,0,1)
    
    trIndex = reaper.AZ_GetTrackItemIndex(track)
    
    
    cancelType,inputList = reaper.AZ_GetUserInputList("MovieCope",2,"CopyNum,Interval","9,0.4")
    
    
    if cancelType then
    
      startPos = endTime+inputList[2]
    
      for i =1,inputList[1] do
    
    
          reaper.AZ_SetSelectedMediaActiveTakeCopy(0,0,trIndex,startPos)
    
          startPos =length+inputList[2]+startPos
    
      end
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
    2. ・Silverを利用可能にする
    3. endTime = reaper.AZ_GetSelectedMediaEndTime(0,0)
    4. ・選択メディア(動画)の終了時間を取得
    5. length = reaper.AZ_GetSelectedMediaLength(0,0)
    6. ・選択メディア(動画)の長さを取得
    7. track = reaper.AZ_GetTrackItemSelect(0,0,1)
    8. ・選択トラックを取得
    9. trIndex = reaper.AZ_GetTrackItemIndex(track)
    10. ・トラックからトラックIndexを取得
    11. cancelType,inputList = reaper.AZ_GetUserInputList("MovieCope",2,"CopyNum,Interval","9,0.4")
    12. ・テキストボックスを2つ用意してコピー数と間隔を設定
    13. if cancelType then
    14. ・OKを押した場合以下を実行
    15.   startPos = endTime+inputList[2]
    16. ・終了時間から間隔時間を足すことで次の動画の位置startPosを設定
    17.   for i =1,inputList[1] do
    18. ・指定コピー数をForでループ設定
    19.       reaper.AZ_SetSelectedMediaActiveTakeCopy(0,0,trIndex,startPos)
    20. ・選択メディア(動画)をstartPos位置にコピー
    21.       startPos =length+inputList[2]+startPos
    22. ・次の動画の開始位置を設定
    23.   end
      
      end

    実行画面

TRACK9

  • AZSTOKE_SelectTrackChildAutoNameAndColor選択トラックの子の名前を自動連番設定&色の自動設定

    実行前の準備

    親子関係のトラックを生成 親のトラックには名前を設定 親トラックを選択

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    
    count = reaper.AZ_GetTrackCountSelect(0,1)
    
    
    for i = 0,count-1 do
    
       masterName = reaper.AZ_GetSelectedTrackIdName(0,i)
    
       color = reaper.AZ_GetRandomColor()
    
    
       reaper.AZ_SetSelectedTrackIdColor(0,i,color)
    
       trackList = reaper.AZ_GetSelectedTrackIdChildList(0,i)
    
       for e, value in pairs(trackList) do
    
           reaper.AZ_SetTrackItemColor(trackList[e],color)
    
           num = reaper.AZ_FormatNumDigit(e,2)
    
           setName = masterName.."_"..num
    
           reaper.AZ_SetTrackItemName(trackList[e],setName)
    
       end
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
    2. SILVERAPIを利用可能にする準備
    3. count = reaper.AZ_GetTrackCountSelect(0,1)
    4. 開いているプロジェクトのトラックの数を取得してcount変数に代入
    5. for i = 0,count-1 do
    6. countの数分forをループ
    7.    masterName = reaper.AZ_GetSelectedTrackIdName(0,i)
    8. 選択している親のトラックの名前を取得
    9.    color = reaper.AZ_GetRandomColor()
    10. カラーのランダム値をcolor変数に代入
    11.    reaper.AZ_SetSelectedTrackIdColor(0,i,color)
    12. 各親トラックに色を設定
    13.    trackList = reaper.AZ_GetSelectedTrackIdChildList(0,i)
    14. ・各親の子トラックを配列出力してtrackList配列に代入
    15.    for e, value in pairs(trackList) do
    16. trackListの数分forをループ
    17.        reaper.AZ_SetTrackItemColor(trackList[e],color)
    18. 親のトラック色をそのまま子トラックにも反映
    19.        num = reaper.AZ_FormatNumDigit(e,2)
    20. 子トラックのID順に2桁で数値を出力 例:01/02/03/04
    21.        setName = masterName.."_"..num
    22. 親トラックの名前と2桁にした数値を_で結んでsetNameに代入
    23.        reaper.AZ_SetTrackItemName(trackList[e],setName)
    24. 各子トラックに名前を付与
    25.    end
      
      end

    実行画面

  • AZSTOKE_AllDeleteTopSelectTrackSearchNotUseMediaAndTrack選択トラックを先頭にミュート削除と未使用トラックを削除

    実行前の準備

    削除を開始したい先頭トラックを選択

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    
    allCount = reaper.AZ_GetMediaTypeCount(0,"")
    
    
    --Mute Media Delete
    
    for i = allCount-1,0,-1 do
    
       mute = reaper.AZ_GetMediaMute(0,i)
    
       if mute then
    
          reaper.AZ_DeleteMedia(0,i)
    
       end
    
    end
    
    
    depthList = reaper.AZ_GetTrackDepthList(0)
    
    count = reaper.AZ_GetTrackCountSelect(0,0)
    
    track,trackId = reaper.AZ_GetSelectedTrackFirstInfo(0)
    
    
    for a = 0,1 do
    
        for i = count-1,trackId,-1 do
    
            allCount = reaper.AZ_GetTrackMediaTypeCount(0,i,"")
    
           trackList = reaper.AZ_GetTrackIdChildList(0,i)
    
           if allCount == 0 and retval == false then
    
              retval = reaper.AZ_DeleteTrackIdSelect(0,i,0)
    
           end
    
        end
    
        count = reaper.AZ_GetTrackCountSelect(0,0)
    
        for i = 0,count-1 do
    
            track = reaper.AZ_GetTrackItemSelect(0,i,0)
    
            for e, value in pairs(depthList) do
    
               if track == depthList[e].Track then
    
                  retval = reaper.AZ_SetTrackItemDepth(track,depthList[e].Depth)
    
               end
    
            end
    
        end
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
    2. SILVERのAPIを利用可能にする
    3. allCount = reaper.AZ_GetMediaTypeCount(0,"")
    4. 全てのメディアの数を出力してallCountに代入
    5. --Mute Media Delete
      
      for i = allCount-1,0,-1 do
    6. allCountから0に向かって逆にループ再生
    7.    mute = reaper.AZ_GetMediaMute(0,i)
    8. 各メディアのミュート情報を取得
    9.    if mute then
    10. ミュートがTrue(ミュート状態)だった場合以下に続く
    11.       reaper.AZ_DeleteMedia(0,i)
    12. [i]のIndexメディアを削除
    13.    end
      
      end
    14. depthList = reaper.AZ_GetTrackDepthList(0)
    15. 全トラックの階層情報をリストで取得してdepthListに代入
    16. count = reaper.AZ_GetTrackCountSelect(0,0)
    17. 全トラックの数を取得してcountに代入
    18. track,trackId = reaper.AZ_GetSelectedTrackFirstInfo(0)
    19. すべての選択トラックの先頭トラックとトラックIDを取得してtrack/trackIdに代入
    20. for a = 0,1 do
    21. 階層が変わって削除できていない場合を防ぐために2回ループ
    22.     for i = count-1,trackId,-1 do
    23. トラックの数から選択先頭トラックまでをループ
    24.         allCount = reaper.AZ_GetTrackMediaTypeCount(0,i,"")
    25. 指定トラックIDのメディアの数を取得してallCountに代入
    26.        trackList = reaper.AZ_GetTrackIdChildList(0,i)
    27. ・指定トラックIDの子のトラックを取得してtrackListに代入 ・子トラックがない場合はretvalにfalseを返す。
    28.        if allCount == 0 and retval == false then
    29. もしトラックにメディアが一つもなく子トラックがない場合
    30.           reaper.AZ_DeleteTrackIdSelect(0,i,0)
    31. 指定トラックを削除する
    32.        end
      
          end
    33.     count = reaper.AZ_GetTrackCountSelect(0,0)
    34. 削除したので再度残りのトラックの数を出力
    35.     for i = 0,count-1 do
    36. トラックの数ループ再生
    37.         track = reaper.AZ_GetTrackItemSelect(0,i,0)
    38. 指定IDのトラックを取得してtrackに代入
    39.         for e, value in pairs(depthList) do
    40. 階層リストの数分ループ
    41.            if track == depthList[e].Track then
    42. もしtrackと階層配列内のtrackが一致したら
    43.               reaper.AZ_SetTrackItemDepth(track,depthList[e].Depth)
    44. そのトラックの階層を前の状態に戻す
    45.            end
      
              end
      
          end
      
      end

    実行画面

  • AZSTOKE_AllTrackOrganize選択トラックを先頭に削除/命名/配色を一連整理

    実行前の準備

    変更したい親トラックを選択

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    
    allCount = reaper.AZ_GetMediaTypeCount(0,"")
    
    
    --Mute Media Delete
    
    for i = allCount-1,0,-1 do
    
       mute = reaper.AZ_GetMediaMute(0,i)
    
       if mute then
    
          reaper.AZ_DeleteMedia(0,i)
    
       end
    
    end
    
    
    depthList = reaper.AZ_GetTrackDepthList(0)
    
    count = reaper.AZ_GetTrackCountSelect(0,0)
    
    track,trackId = reaper.AZ_GetSelectedTrackFirstInfo(0)
    
    
    for a = 0,1 do
    
        for i = count-1,trackId,-1 do
    
           allCount = reaper.AZ_GetTrackMediaTypeCount(0,i,"")
    
           trackList,trackCount = reaper.AZ_GetTrackIdChildList(0,i)
    
           if allCount == 0 and trackCount == 0 then
    
              retval = reaper.AZ_DeleteTrackIdSelect(0,i,0)
    
           end
    
        end
    
        count = reaper.AZ_GetTrackCountSelect(0,0)
    
        for i = 0,count-1 do
    
            track = reaper.AZ_GetTrackItemSelect(0,i,0)
    
            for e, value in pairs(depthList) do
    
               if track == depthList[e].Track then
    
                  retval = reaper.AZ_SetTrackItemDepth(track,depthList[e].Depth)
    
               end
    
            end
    
        end
    
    end
    
    
    count = reaper.AZ_GetTrackCountSelect(0,1)
    
    
    for i = 0,count-1 do
    
       masterName = reaper.AZ_GetSelectedTrackIdName(0,i)
    
       color = reaper.AZ_GetRandomColor()
    
    
       reaper.AZ_SetSelectedTrackIdColor(0,i,color)
    
       trackList = reaper.AZ_GetSelectedTrackIdChildList(0,i)
    
       for e, value in pairs(trackList) do
    
           reaper.AZ_SetTrackItemColor(trackList[e],color)
    
           num = reaper.AZ_FormatNumDigit(e,2)
    
           setName = masterName.."_"..num
    
           reaper.AZ_SetTrackItemName(trackList[e],setName)
    
       end
    
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
    2. ・SILVERAPIを利用可能にする
    3. allCount = reaper.AZ_GetMediaTypeCount(0,"")
    4. ・プロジェクト内のメディアの数を出力してallCountに代入
    5. --Mute Media Delete
      
      for i = allCount-1,0,-1 do
    6. ・allCountから0に向けてForループ
    7.    mute = reaper.AZ_GetMediaMute(0,i)
    8. ・各メディアのミュートを検知
    9.    if mute then
    10. ・ミュートだった場合
    11.       reaper.AZ_DeleteMedia(0,i)
    12. ・メディアを削除対応
    13.    end
      
      end
    14. depthList = reaper.AZ_GetTrackDepthList(0)
    15. ・全トラックの階層を取得してdepthList配列に代入
    16. count = reaper.AZ_GetTrackCountSelect(0,0)
    17. ・全トラック数を取得してcountに代入
    18. track,trackId = reaper.AZ_GetSelectedTrackFirstInfo(0)
    19. ・選択トラックの先頭トラックを取得してtrackとtrackIdに代入
    20. for a = 0,1 do
    21. ・以下処理を2回ループさせる
    22.     for i = count-1,trackId,-1 do
    23. ・トラックの数分0に向かってループ
    24.        allCount = reaper.AZ_GetTrackMediaTypeCount(0,i,"")
    25. ・トラック内のメディア数を取得してallCountに代入
    26.        trackList,trackCount = reaper.AZ_GetTrackIdChildList(0,i)
    27. ・トラックの子トラックをtrackListに代入 子トラックの数をtrackCountに代入
    28.        if allCount == 0 and trackCount == 0 then
    29. ・メディアもなく、子トラックもない場合
    30.           reaper.AZ_DeleteTrackIdSelect(0,i,0)
    31. ・トラックを削除
    32.        end
      
          end
      
          count = reaper.AZ_GetTrackCountSelect(0,0)
    33. ・トラック削除後に再度トラック数を取得 countに代入
    34.     for i = 0,count-1 do
    35. ・count分Forループ
    36.         track = reaper.AZ_GetTrackItemSelect(0,i,0)
    37. ・各IDのトラックアイテムを取得
    38.         for e, value in pairs(depthList) do
    39. ・階層リスト分Forループ
    40.            if track == depthList[e].Track then
    41. ・階層に入っているトラックと各IDのトラックを検知
    42.               reaper.AZ_SetTrackItemDepth(track,depthList[e].Depth)
    43. ・指定トラックの階層を設定
    44.            end
      
              end
      
          end
      
      end
    45. count = reaper.AZ_GetTrackCountSelect(0,1)
    46. ・トラックの数を出力してcountに代入
    47. for i = 0,count-1 do
    48. ・count分Forループ
    49.    masterName = reaper.AZ_GetSelectedTrackIdName(0,i)
    50. ・選択トラックの名前を取得
    51.    color = reaper.AZ_GetRandomColor()
    52. ・ランダムのカラー値を取得
    53.    reaper.AZ_SetSelectedTrackIdColor(0,i,color)
    54. ・選択トラックにカラーを設定
    55.    trackList = reaper.AZ_GetSelectedTrackIdChildList(0,i)
    56. ・選択トラックの子の配列を取得してtrackListに代入
    57.    for e, value in pairs(trackList) do
    58. ・trackList分Forループ
    59.        reaper.AZ_SetTrackItemColor(trackList[e],color)
    60. ・子のトラックアイテムにカラーを設定
    61.        num = reaper.AZ_FormatNumDigit(e,2)
    62. ・順列番号に桁の文字列を出力 01/02/03/04
    63.        setName = masterName.."_"..num
    64. ・選択トラックの名前に桁番号を付与してsetNameに代入
    65.        reaper.AZ_SetTrackItemName(trackList[e],setName)
    66. ・各子トラックに名前を設定
    67.    end
    68. end

    実行画面

  • AZSTOKE_TrackNameIncludeStringsSoloSettingトラック名を指定文字列部分一致検知を行いSoloに設定

    実行前の準備

    トラックの命名をしておく ※部分一致の範囲を理解して命名してください

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    
    soloIncludeString = "_en"
    
    
    trackList = reaper.AZ_GetTrackItemList(0)
    
    reaper.AZ_SetTrackAllSoloOFF(0)
    
    
    for i, value in pairs(trackList) do
    
        name = reaper.AZ_GetTrackItemName(value)
    
        check = reaper.AZ_CheckIncludeString(name,soloIncludeString)
    
        if check == true then
    
           reaper.AZ_SetTrackItemSolo(value,true)
    
        end
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
    2. ・SilverのAPIを利用可能にする
    3. soloIncludeString = "_en"
    4. ・soloにする部分一致の文字列を設定してsoloIncludeStringに代入
    5. trackList = reaper.AZ_GetTrackItemList(0)
    6. ・指定プロジェクトの全てのトラックを配列のtrackListに代入
    7. reaper.AZ_SetTrackAllSoloOFF(0)
    8. ・すべてのsoloをOFFに設定
    9. for i, value in pairs(trackList) do
    10. ・trackListの配列分をForループ
    11.     name = reaper.AZ_GetTrackItemName(value)
    12. ・各トラックの名前を取得してnameに代入
    13.     check = reaper.AZ_CheckIncludeString(name,soloIncludeString)
    14. ・nameにsoloIncludeStringが入っているかをチェックしてcheckにboolを代入
    15.     if check then
    16. ・checkがtrueなら以下に実行
    17.        reaper.AZ_SetTrackItemSolo(value,true)
    18. ・checkを通ったトラックにsoloを設定
    19.     end
      
      end

    実行画面

  • AZSTOKE_TrackSetSameAutoSetterトラックのセットを同セット自動複数作成

    実行前の準備

    ベースのトラック/子トラックを作成しておく

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    
    trackNameList = {"pl0000","pl1000","pl2000","pl3000","pl4000","pl5000"}
    
    trackColorList = {33554304,33521664,25165824,16777471,21004543,20988032}
    
    
    --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 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)
    
    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])
    
        end
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
    2. ・SilverのAPIを可能にする
    3. trackNameList = {"pl0000","pl1000","pl2000","pl3000","pl4000","pl5000"}
      
      trackColorList = {33554304,33521664,25165824,16777471,21004543,20988032}
    4. ・トラックのベース名と各色番号を設定して配列に代入
    5. --Get Master Select Track
      
      masterTrack = reaper.AZ_GetTrackItemSelect(0,0,1)
    6. ・ベーストラックを取得してmasterTrackに代入
    7. masterName = reaper.AZ_GetTrackItemName(masterTrack)
    8. ・トラックの名前を取得してmasterNameに代入
    9. masterDepth = reaper.AZ_GetTrackItemDepth(masterTrack)
    10. ・トラックの階層を取得してmasterDepthに代入
    11. for i, value in pairs(trackNameList) do
    12. ・trackNameList分Forループ
    13.    if masterName == trackNameList[i] then
    14. ・masterNameと一致する場合以下を実行
    15.       reaper.AZ_SetTrackItemColor(masterTrack,trackColorList[i])
    16. ・トラックの色を設定
    17.       masterColor = trackColorList[i]
    18. ・masterColorにカラーを設定
    19.    end
      
      end
    20. --Get Master Track Children
      
      childList,masterChildCount = reaper.AZ_GetTrackItemChildList(masterTrack)
    21. ・masterTrackの子トラックを出力してchildListに配列代入
    22. childInfoList = {}
    23. ・子トラックの各情報を登録する配列を用意
    24. for i, value in pairs(childList) do
    25. ・childList分Forループ
    26.     childInfoList[i] = {}
    27. ・子トラックのさらに情報分岐用に配列に配列の枠を用意
    28.     childInfoList[i]["TrackName"]= reaper.AZ_GetTrackItemName(value)
    29. ・トラックの名前をchildInfoListに代入
    30.     reaper.AZ_SetTrackItemColor(value,masterColor)
    31. ・masterColorを子トラックに同色設定
    32. end
    33. --delet trackNameList & trackBaseList create
      
      trCount = reaper.AZ_GetTrackCountSelect(0,0)
    34. ・トラックの数を取得
    35. deletIDList = {}
      
      idCount = 0
    36. for i = 0,trCount-1 do
      
          name = reaper.AZ_GetTrackIdName(0,i)
    37. ・トラックIDごとに名前を取得
    38.     for i, value in pairs(trackNameList) do
    39. ・trackNameListごとにForルー@う
    40.         if name == value then
    41. ・nameとtrackNameListを検索して一致するか確認
    42.            idCount = idCount + 1
      
                 deletIDList[idCount] = i
    43. ・一致する場合、すでにあると判断されて削除リストにIDを入れる 
    44.         end
      
          end
      
      end
    45. table.sort(deletIDList,function(a,b) return (a>b)end)
    46. deletIDListを降順ソート化する
    47. for i = 1,idCount do
      
          table.remove(trackNameList,deletIDList[i])
      
          table.remove(trackColorList,deletIDList[i])
      
      end
    48. ・後ろから順番に消す
    49. --InsertTrack
      
      for i, value in pairs(trackNameList) do
    50. ・trackNameList分Forループ
    51.     count = reaper.AZ_GetTrackCountSelect(0,0)
    52. ・トラックの数を取得
    53.     track = reaper.AZ_InsertTrackId(0,count)
    54. ・一番最後にトラックを挿入してtrackのアイテムを出力
    55.     reaper.AZ_SetTrackItemName(track,value)
    56. ・インサートしたトラックに名前を設定
    57.     reaper.AZ_SetTrackItemDepth(track,masterDepth)
    58. ・インサートしたトラックにmasterの階層と同様にする
    59.     reaper.AZ_SetTrackItemColor(track,trackColorList[i])
    60. ・色をtrackColorListに沿って設定する
    61.     for e = 1,masterChildCount do
    62. ・masterChildCountの数分forを実行
    63.         childTrack = reaper.AZ_InsertChildTrack(track)
    64. ・インサートしたトラックの子トラックをインサートしてchildTrackにアイテムを出力
    65.         reaper.AZ_SetTrackItemName(childTrack,childInfoList[e].TrackName)
    66. ・子トラックに名前を設定
    67.         reaper.AZ_SetTrackItemColor(childTrack,trackColorList[i])
    68. ・子トラックに色を設定
    69.     end
      
      end

    実行画面

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

    実行前の準備

    ベースのトラック/子トラックを作成しておく 使用しているベースのpl0000のメディアとベース名以外を一致した状態ですべて用意しておく

    スクリプト

    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

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
    2. ・SilverAPIを利用可能にする
    3. trackNameList = {"pl0000","pl1000","pl2000","pl3000","pl4000"}
      
      trackColorList = {33554304,33521664,25165824,16777471,21004543}
    4. ・ベース名と色を配列に設定
    5. retval,inputList = reaper.AZ_GetUserInputList("SourceImportPath",1,"Path :","D:/")
    6. ・テキスト入力を設定(フォルダ階層をユーザーに指定させる)
    7. if retval then
    8. ・テキスト入力が有効の場合以下を実行
    9. --Get Master Select Track
      
         masterTrack = reaper.AZ_GetTrackItemSelect(0,0,1)
      
         masterName = reaper.AZ_GetTrackItemName(masterTrack)
      
         masterDepth = reaper.AZ_GetTrackItemDepth(masterTrack)
    10. ・選択しているマスタートラック/名前/階層を取得して各変数に代入
    11.    for i, value in pairs(trackNameList) do
      
             if masterName == trackNameList[i] then
      
                reaper.AZ_SetTrackItemColor(masterTrack,trackColorList[i])
      
                masterColor = trackColorList[i]
      
             end
      
         end
    12. ・マスタートラックの一致する配列の中身を確認して色を探して変数に代入
    13. --Get FileList
      
         fileAllList = {}
      
         fileList = reaper.AZ_GetFilePathList(inputList[1],"Wav")
    14. ・指定されたフォルダパスに含まれているwavを配列出力してfileListに代入
    15.    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
    16. ・filePathからsource名を出力してfillAllList配列に代入
    17. --Get Master Track Children
      
         childList,masterChildCount = reaper.AZ_GetTrackItemChildList(masterTrack)
    18. ・マスタートラックの子トラックを出力してchildListに代入と子トラックの数をmasterChildCountに代入
    19.    childInfoList = {}
      
         for i, value in pairs(childList) do
      
             childInfoList[i] = {}
      
             childInfoList[i]["TrackName"]= reaper.AZ_GetTrackItemName(value)
    20. ・各子トラックの名前をchildInfoListに代入
    21.        reaper.AZ_SetTrackItemColor(value,masterColor)
    22. ・マスターの子トラックにはマスターと同じ色を設定
    23.        childInfoList[i]["TrackMediaCount"] = reaper.AZ_GetTrackItemMediaTypeCount(value,"")
    24. ・各子トラックに入っているメディア数を取得
    25.        childId = reaper.AZ_GetTrackItemIndex(value)
    26. ・各子トラックアイテムからidを取得してchildIdに代入
    27.        for e = 1,childInfoList[i].TrackMediaCount do
    28. ・各子トラックのメディア数でループ再生
    29.            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)
    30. ・メディアの名前と位置を取得して各変数に代入
    31.        end
      
          end
    32. --delet trackNameList & trackBaseList create
      
          trCount = reaper.AZ_GetTrackCountSelect(0,0)
      
          deletIDList = {}
      
          idCount = 0
    33.     for i = 0,trCount-1 do
      
              name = reaper.AZ_GetTrackIdName(0,i)
    34. ・全トラックの名前を取得してnameに代入
    35.         for i, value in pairs(trackNameList) do
    36. ・ベース名の配列分ループ再生
    37.             if name == value then
    38. ・全トラック名とベース名が一致した場合以下を実行
    39.                idCount = idCount + 1
      
                     deletIDList[idCount] = i
    40. ・ベース名と一致したのであればベースから削除対象  ※すでに作られたものと認識する
    41.             end
      
              end
      
          end
    42.     table.sort(deletIDList,function(a,b) return (a>b)end)
    43. ・deletIDListを降順に並び替える
    44.     for i = 1,idCount do
      
              table.remove(trackNameList,deletIDList[i])
      
              table.remove(trackColorList,deletIDList[i])
    45. ・ベース配列から削除を行う
    46.     end
    47. --InsertTrack
      
          for i, value in pairs(trackNameList) do
    48. ・ベース名分ループ再生
    49.         count = reaper.AZ_GetTrackCountSelect(0,0)
    50. ・全トラックの数を取得してcountに代入
    51.         track = reaper.AZ_InsertTrackId(0,count)
    52. ・トラックの最後にトラックをインサート
    53.         reaper.AZ_SetTrackItemName(track,value)
      
              reaper.AZ_SetTrackItemDepth(track,masterDepth)
      
              reaper.AZ_SetTrackItemColor(track,trackColorList[i])
    54. ・インサートトラックに名前、階層、色を設定
    55.         for e = 1,masterChildCount do
    56. ・子トラックの数分forループ対応
    57.             childTrack = reaper.AZ_InsertChildTrack(track)
    58. ・各追加したベーストラックに子トラックをインサート
    59.             reaper.AZ_SetTrackItemName(childTrack,childInfoList[e].TrackName)
      
                  reaper.AZ_SetTrackItemColor(childTrack,trackColorList[i])
    60. ・子トラックに名前と色を設定
    61.             for x = 1,childInfoList[e].TrackMediaCount do
    62. ・子トラックにメディアの数分forループ
    63.                 newMediaName = reaper.AZ_ReplaceSearchString(childInfoList[e][x].MediaName,string.lower(masterName),string.lower(value))
    64. ・メディア名に対してベース名を入れ替えてnewMediaNameに代入
    65. for z, value in pairs(fileAllList) do ・全ファイル分ループ再生
    66.                     if newMediaName == fileAllList[z].SourceName then
    67. ・sourceNameにnewMediaNameが一致したら以下を実行
    68.                        reaper.AZ_InsertMediaTrackItemSecond(childTrack,fileAllList[z].Path,0,childInfoList[e][x].MediaPos)
    69. ・一致したメディアを指定トラックと指定秒数に並べる
    70.                     end
      
                      end
    71.             end
      
              end
      
           end
      
      end

    実行画面

  • AZSTOKE_CEDEC2024_FOOTREPLACECEDEC2024-実演-カットシーンでの素材を置き換えたい

    実行前の準備

    ベースの足音を並べておく 命名規則に従って別種類の足音を制作しておく

    スクリプト

    comming soon

    1 行ずつの解説

    1. Add paragraph text. Click &ldquo;Edit Text&rdquo; to update the font, size and more. To change and reuse text themes, go to Site Styles.
  • AZSTOKE_InsertTrackMediasFromFileNameファイル名を考慮してトラックをインサート

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    
    function main()
    
        retval, imputList = reaper.AZ_GetUserInputList("",  1, "import path", "")
    
    
        if(retval == false) then
    
            return
    
        end
    
    
        importPath = imputList[1]
    
    
        filePathList = reaper.AZ_GetFilePathList(importPath, "wav")
    
    
        table.sort(filePathList)
    
    
        insertPos = 0
    
        preCharID = ""
    
    
        color, _, _, _ = reaper.AZ_GetRandomColor()
    
    
        reaper.AZ_DeleteAllRegion(0)
    
    
        for i, filePath in pairs(filePathList) do
    
    
            fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]
    
    
            splitList =reaper.AZ_GetStringSplitList(fileName, "_")
    
    
            charID = splitList[1]
    
            voiceType = splitList[2]
    
    
            charTrack = reaper.AZ_InsertTrackSearchUniqueOnly(0, charID)
    
    
            reaper.AZ_SetTrackItemDepth(charTrack, 0)
    
    
            typeTrack = reaper.AZ_InsertUniqueChildTrack(charTrack, splitList[2])
    
    
            if preCharID ~= "" and  preCharID ~= charID then
    
                insertPos = insertPos + 2
    
                color, _, _, _ = reaper.AZ_GetRandomColor()
    
            end
    
    
            item = reaper.AZ_InsertMediaTrackItemSecond(typeTrack, filePath, 0, insertPos)
    
    
            itemStartPos = reaper.AZ_GetMediaItemStartTimeSeconds(item)
    
            itemEndPos = reaper.AZ_GetMediaItemEndTime(item)
    
    
            reaper.AZ_AddRegionMarker(0, itemStartPos, itemEndPos, fileName, -1, color)
    
    
            insertPos = itemEndPos + 1
    
    
            preCharID = charID
    
    
        end
    
    
    end
    
    
    main()

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
    2. ・RIGDOCKSをインポート
    3. function main()
    4. ・メインの処理を記載する関数を定義
    5.     retval, imputList = reaper.AZ_GetUserInputList("",  1, "import path", "")
    6. ・ユーザー空の入力ダイアログを表示して、インポートするフォルダのパスを取得
    7.     if(retval == false) then
      
              return
      
          end
    8. ・ダイアログがキャンセルされた場合は処理を終了する
    9.     importPath = imputList[1]
    10. ・インポートするフォルダのパスを変数に格納
    11.     filePathList = reaper.AZ_GetFilePathList(importPath, "wav")
    12. ・指定したフォルダ内のwavファイルのパスを取得
    13.     table.sort(filePathList)
    14. ・ファイルパスのリストをソート
    15.     insertPos = 0
      
          preCharID = ""
    16. ・アイテムの挿入位置と前回のキャラクターIDを初期化
    17.     color, _, _, _ = reaper.AZ_GetRandomColor()
    18. ・ランダムな色を取得
    19.     reaper.AZ_DeleteAllRegion(0)
    20. ・プロジェクト内のリージョンを全て削除
    21.     for i, filePath in pairs(filePathList) do
    22. ・取得したファイルパスごとに実行
    23.         fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]
    24. ・ファイル名を取得
    25.         splitList =reaper.AZ_GetStringSplitList(fileName, "_")
    26. ・ファイル名を"_"で分割してリスト化
    27.         charID = splitList[1]
      
              voiceType = splitList[2]
    28. ・ファイル名からキャラクターIDとボイスの種類を取得
    29.         charTrack = reaper.AZ_InsertTrackSearchUniqueOnly(0, charID)
    30. ・キャラクターIDの名前のトラックを作成(既に存在する場合は取得のみ)
    31.         reaper.AZ_SetTrackItemDepth(charTrack, 0)
    32. ・キャラクタートラックの深さを0に設定(最上位にする)
    33.         typeTrack = reaper.AZ_InsertUniqueChildTrack(charTrack, splitList[2])
    34. ・ボイスの種類の名前の子トラックを作成(既に存在する場合は取得のみ)
    35.         if preCharID ~= "" and  preCharID ~= charID then
      
                  insertPos = insertPos + 2
      
                  color, _, _, _ = reaper.AZ_GetRandomColor()
      
              end
    36. ・キャラクターIDが前回と異なる場合、挿入位置を2秒進めて色を変更
    37.         item = reaper.AZ_InsertMediaTrackItemSecond(typeTrack, filePath, 0, insertPos)
    38. ・指定したトラックにアイテムを挿入
    39.         itemStartPos = reaper.AZ_GetMediaItemStartTimeSeconds(item)
      
              itemEndPos = reaper.AZ_GetMediaItemEndTime(item)
    40. ・挿入したアイテムの開始位置と終了位置を取得
    41.         reaper.AZ_AddRegionMarker(0, itemStartPos, itemEndPos, fileName, -1, color)
    42. ・アイテムの位置にリージョンを追加
    43.         insertPos = itemEndPos + 1
    44. ・次のアイテムの挿入位置を1秒進める
    45.         preCharID = charID
    46. ・前回のキャラクターIDを更新
    47.     end
    48. end
    49. main()
    50. ・メイン処理を実行

    実行画面

  • AZSTOKE_Recording_CreateTracks収録用トラックをマイクごとに用意

    実行前の準備

    使用するマイクをMikeList.txtファイルに記載しておく

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    
    workPath = "D:\\reapdock\\Recording"
    
    
    function CreateTracks()
    
    
        retval, inputList = reaper.AZ_GetUserInputList("", 1, "soound name", "")
    
    
        if retval == false then return end
    
    
        soundName = inputList[1]
    
    
        if soundName == "" then reaper.AZ_ShowMessageBox_Error("Enter sound name", "Error", reaper.AZ_WindowType_OK()) return end
    
    
        text = reaper.AZ_ReadFile(workPath, "MikeList.txt")
    
    
        mikeList = reaper.AZ_GetStringSplitList(text, "\n")
    
    
        if mikeList[#mikeList] == "" then table.remove(mikeList, #mikeList) end
    
    
        mikeListCSV = reaper.AZ_ReplaceSearchString(text, "\n", ",")
    
    
        defaultList = ""
    
        for i, mike in pairs(mikeList) do
    
    
            defaultList = defaultList .. "1,"
    
        end
    
    
        retval, inputList = reaper.AZ_GetUserInputList("Using mike(using: 1)", #mikeList, mikeListCSV, defaultList)
    
    
        if retval == false then return end
    
    
        mikeUseList = inputList
    
    
        trackPos = reaper.CountTracks()
    
    
        soundTrack = reaper.AZ_InsertTrackSearchUniqueOnly(0, soundName)
    
    
        color = reaper.AZ_GetRandomColor()
    
    
        reaper.AZ_SetTrackItemColor(soundTrack, color)
    
    
        reaper.AZ_SetTrackItemDepth(soundTrack, 0)
    
    
        for i = 1, #mikeList do
    
            if mikeUseList[i] == "1" then
    
                reaper.AZ_InsertUniqueChildTrack(soundTrack, mikeList[i])
    
            end
    
    
        end
    
    end
    
    
    CreateTracks()

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
    2. ・RIGDOCKSをインポート
    3. workPath = "D:\\reapdock\\Recording"
    4. ・作業フォルダを指定
    5. function CreateTracks()
    6.     retval, inputList = reaper.AZ_GetUserInputList("", 1, "soound name", "")
    7.     if retval == false then return end
    8.     soundName = inputList[1]
    9. ・サウンド名をユーザー入力から取得
    10.     if soundName == "" then reaper.AZ_ShowMessageBox_Error("Enter sound name", "Error", reaper.AZ_WindowType_OK()) return end
    11. ・サウンド名が未入力の場合、エラーメッセージを表示して終了
    12.     text = reaper.AZ_ReadFile(workPath, "MikeList.txt")
    13. ・マイクリストファイルを読み込み
    14.     mikeList = reaper.AZ_GetStringSplitList(text, "\n")
    15.     if mikeList[#mikeList] == "" then table.remove(mikeList, #mikeList) end
    16. ・改行で分割してマイクリストを作成。 最後の要素が空文字の場合は削除
    17.     mikeListCSV = reaper.AZ_ReplaceSearchString(text, "\n", ",")
    18. ・カンマ区切りのマイクリストを作成
    19.     defaultList = ""
      
          for i, mike in pairs(mikeList) do
    20.         defaultList = defaultList .. "1,"
      
          end
    21. ・デフォルト値リストを作成(全て使用する設定)マイクを使用する場合は1
    22.     retval, inputList = reaper.AZ_GetUserInputList("Using mike(using: 1)", #mikeList, mikeListCSV, defaultList)
    23.     if retval == false then return end
    24.     mikeUseList = inputList
    25. ・使用するマイクの選択をユーザー入力から取得
    26.     trackPos = reaper.CountTracks()
    27. ・トラック数を取得して最後に追加する位置を決定
    28.     soundTrack = reaper.AZ_InsertTrackSearchUniqueOnly(0, soundName)
    29. ・サウンド名のトラックを作成(既存の場合は検索して取得)
    30.     color = reaper.AZ_GetRandomColor()
    31.     reaper.AZ_SetTrackItemColor(soundTrack, color)
    32. ・トラックアイテムの色をランダムに設定
    33.     reaper.AZ_SetTrackItemDepth(soundTrack, 0)
    34. ・トラックアイテムの深さを0に設定(最前面)
    35.     for i = 1, #mikeList do
    36. ・マイクリストをループ
    37.         if mikeUseList[i] == "1" then
      
                  reaper.AZ_InsertUniqueChildTrack(soundTrack, mikeList[i])
      
              end
    38. ・使用するマイクの場合(1の場合)、子トラックを作成
    39.     end
    40. end
    41. CreateTracks()
    42. ・関数を実行

    実行画面

FILE/FOLDER3

  • AZSTOKE_TextFileWirteReadセーブデータ構築Part1-テキストファイルを書き出しと読み込み-

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    
    fileName = "saveDate.txt"
    
    
    folderPath,addPath = reaper.AZ_SetResoucePathFolder("AZSTOKE",0)
    
    retval,inputList = reaper.AZ_GetUserInputList("Info",3,"Path:,Wav:,Count:","D:/,test,5")
    
    
    if retval then
    
       saveText = ""
    
       for i, value in pairs(inputList) do
    
           if i == 1 then
    
              saveText = value
    
           else
    
              saveText = saveText..","..value
    
           end
    
       end
    
       reaper.AZ_WriteFile(folderPath,fileName,saveText,0)
    
       saveText = reaper.AZ_ReadFile(folderPath,fileName)
    
       splitList = reaper.AZ_GetStringSplitList(saveText,",")
    
       for i, value in pairs(splitList) do
    
           Msg(splitList[i])
    
       end
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
    2. ・SilverAPIを利用可能にする
    3. fileName = "saveDate.txt"
    4. ・ファイル名を拡張子を入れて文字列「saveDate.txt」をfileNameに代入
    5. folderPath,addPath = reaper.AZ_SetResoucePathFolder("AZSTOKE",0)
    6. ・リソースフォルダに"AZSTOKE"というフォルダを作成
    7. retval,inputList = reaper.AZ_GetUserInputList("Info",3,"Path:,Wav:,Count:","D:/,test,5")
    8. ・UserInputで3つのインプット情報を設定、実行後に入力したものをinputListに代入
    9. if retval then
    10. ・GetUserInputListをキャンセルしていない場合
    11.    saveText = ""
    12. ・空のsaveTextを用意
    13.    for i, value in pairs(inputList) do
    14. ・inputList分ループ再生
    15.        if i == 1 then
      
                saveText = value
    16. ・最初はsaveTextにそのままvalueを代入
    17.        else
      
                saveText = saveText..","..value
    18. ・2回目以降はsaveTextに区切りの","を入れてからvalueを語尾に追記して代入
    19.        end
      
         end
      
         reaper.AZ_WriteFile(folderPath,fileName,saveText,0)
    20. ・指定フォルダパスにsaveTextを記載したファイルを生成
    21.    saveText = reaper.AZ_ReadFile(folderPath,fileName)
    22. ・さきほど生成したファイルを読み込みsaveTextに出力
    23.    splitList = reaper.AZ_GetStringSplitList(saveText,",")
    24. ・saveTextの区切りをもとに配列に変更
    25.    for i, value in pairs(splitList) do
    26. ・splitListごとにループ再生
    27.        Msg(splitList[i])
    28. ・splitListごとにコンソール出力、出力されているか確認
    29.    end
      
      end

    実行画面

  • AZSTOKE_InsertMediaOrinalFolderCreateフォルダ生成Part1-メディアインサートに専用フォルダを生成

    実行前の準備

    インサートする用のメディアを用意しておく

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    
    retval,inputList = reaper.AZ_GetUserInputList("insertMedia",1,"path:","D:/")
    
    
    if retval then
    
       filePathList = reaper.AZ_GetFilePathList(inputList[1],"wav")
    
    
       addPath = reaper.AZ_SetProjectPathFolder("AZSTOKE",3)
    
       beforePath,afterPath = reaper.AZ_SetProjectInfoRecAddPath(0,addPath)
    
    
       startPos = 0
    
    
       for i, value in pairs(filePathList) do
    
           item = reaper.AZ_InsertMediaTrackIdSecond(0,1,filePathList[i],0,startPos)
    
           endTime = reaper.AZ_GetMediaItemEndTime(item)
    
           startPos = endTime + 1
    
       end
    
    
       reaper.AZ_SetProjectInfoRecPath(0,beforePath)
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
    2. ・SilverAPIを利用可能にする
    3. retval,inputList = reaper.AZ_GetUserInputList("insertMedia",1,"path:","D:/")
    4. ・UserInputでテキスト入力画面をinputListに入力
    5. if retval then
    6. ・テキストボックスでOKを押したら以下を実行
    7.    filePathList = reaper.AZ_GetFilePathList(inputList[1],"wav")
    8. ・テキスト入力したパス情報に入っているファイルを出力
    9.    reaper.AZ_SetProjectPathFolder("AZSTOKE",3)
    10. ・プロジェクトの録音フォルダに専用フォルダを作成、現在時刻をフォルダ名に追記して生成
    11.    beforePath,afterPath = reaper.AZ_SetProjectInfoRecAddPath(0,addPath)
    12. ・プロジェクトの録音フォルダに作成したフォルダを設定
    13.    startPos = 0
    14. ・開始位置を0に設定
    15.    for i, value in pairs(filePathList) do
    16. ・ファイルパス分ループ再生
    17.        item = reaper.AZ_InsertMediaTrackIdSecond(0,1,filePathList[i],0,startPos)
    18. ・指定トラックIDと指定秒数にメディアをインサートする
    19.        endTime = reaper.AZ_GetMediaItemEndTime(item)
    20. ・インサートしたメディアの終了時間を出力してendTimeに保存
    21.        startPos = endTime + 1
    22. ・終了時間から1秒追加してStartPosに設定 end
    23.    reaper.AZ_SetProjectInfoRecPath(0,beforePath)
    24. ・プロジェクト設定の録音フォルダを前に戻す対応 end

    実行画面

  • AZSTOKE_TextFileWirteRead2セーブデータ構築Part2-配列構造を考えたJson形式での保存と利用-

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    
    t = {
    
        tracks = {
    
            {
    
                track = "AZ1",
    
                num = -21
    
            },
    
            {
    
                track = "AZ2",
    
                num = -25
    
            },
    
            {
    
                track = "AZ3",
    
                num = -24
    
            }
    
        }
    
    }
    
    
    Msg(t["tracks"][1].track)
    
    Msg(t["tracks"][1].num)
    
    
    jsonStr = reaper.AZ_Json_Serialize(t);
    
    Msg(jsonStr)
    
    
    tb = reaper.AZ_Json_Deserialize(jsonStr);
    
    
    Msg(tb["tracks"][2].track)
    
    Msg(tb["tracks"][2].num)

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
    2. ・SILVERのAPIを利用可能にする対応
    3. t = {
      
          tracks = {
      
              {
      
                  track = "AZ1",
      
                  num = -21
      
              },
      
              {
      
                  track = "AZ2",
      
                  num = -25
      
              },
      
              {
      
                  track = "AZ3",
      
                  num = -24
      
              }
      
          }
      
      }
    4. ・配列を作成 ※この配列は様々な方法で作られることを想定しています。
    5. Msg(t["tracks"][1].track)
      
      Msg(t["tracks"][1].num)
    6. ・配列の1行目をコンソール出力して確認
    7. jsonStr = reaper.AZ_Json_Serialize(t);
      
      Msg(jsonStr)
    8. ・配列をテキスト保存できるように文字列に変換
    9. reaper.AZ_WriteFile("F://script//save","savedate.txt",jsonStr,0)
    10. ・指定のフォルダにsavedate.txtとしてjsonStrを上書き保存
    11. tb = reaper.AZ_Json_Deserialize(jsonStr);
    12. ・jsonStrを配列に戻します。 ※これによりそのまま以前の配列を取得できる状態になります。
    13. Msg(tb["tracks"][2].track)
      
      Msg(tb["tracks"][2].num)
    14. ・抜き出せているか確認

    実行画面

HANDAUTOMER3

  • AZSTOKE_HANDAUTOMER1「HANDAUTOMER」-Part1- 選択メディアにHANDAUTOMERを実行してMomentary-21LUFSに自動設定

    実行前の準備

    調整したいメディアがプロジェクトに置かれている

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    
    allCount = reaper.AZ_GetSelectedMediaTypeCount(0,"")
    
    
    for i = 0,allCount-1 do
    
       reaper.AZ_SetSelectedMediaIdHANDAUTOMER(0,i,2)
    
       reaper.AZ_SetSelectedMediaIdLoudnessMaxMomentary(0,i,-21)
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
    2. ・SilverのAPIを利用可能にする
    3. allCount = reaper.AZ_GetSelectedMediaTypeCount(0,"")
    4. ・選択メディアのすべての数を取得してallCountに代入
    5. for i = 0,allCount-1 do
    6. ・allCount分Forループ対応
    7.     reaper.AZ_SetSelectedMediaIdHANDAUTOMER(0,i,2)
    8. ・HANDAUTOMERを選択メディアIDに合わせて実行
    9.     reaper.AZ_SetSelectedMediaIdLoudnessMaxMomentary(0,i,-21)
    10. ・指定選択メディアIDごとにMomentaryを-21LUFSに設定
    11. end

    実行画面

  • AZSTOKE_HANDAUTOMER2「HANDAUTOMER」-Part2- 全自動-インサート~リージョン

    実行前の準備

    調整したいWav波形をフォルダに用意 トラックを用意

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    
    retval,inputList = reaper.AZ_GetUserInputList("AZWavList",2,"Path :,Loundness :","D:\\,-21")
    
    
    if retval then
    
       color = reaper.AZ_GetRandomColor()
    
       fileList = reaper.AZ_GetFilePathList(inputList[1],"wav")
    
       startPos = 0
    
       for i, value in pairs(fileList) do
    
           item = reaper.AZ_InsertMediaTrackIdSecond(0,1,fileList[i],0,startPos)
    
           endPos = reaper.AZ_GetMediaItemEndTime(item)
    
           name = reaper.AZ_GetMediaItemName(item)
    
           reaper.AZ_SetMediaItemHANDAUTOMER(item,2)
    
           reaper.AZ_SetMediaItemLoudnessMaxMomentary(item,tonumber(inputList[2]))
    
           reaper.AZ_AddRegionMarker(0,startPos,endPos,name,i,color)
    
           startPos = endPos + 1
    
       end
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
    2. ・SilverのAPIを設定対応
    3. retval,inputList = reaper.AZ_GetUserInputList("AZWavList",2,"Path :,Loundness :","D:\\,-21")
    4. ・SimpleUIを出力してフォルダパスとラウドネス値を入力してinputListに代入
    5. if retval then
    6. ・UIでOKを押したか確認
    7.    color = reaper.AZ_GetRandomColor()
    8. ・ランダムの色を取得してcolorに代入
    9.    fileList = reaper.AZ_GetFilePathList(inputList[1],"wav")
    10. ・入力したフォルダパスにある"wav"形式の全ファイルパスを取得してfileListに代入
    11.    startPos = 0
    12. ・メディアの設置開始位置を設定「0」startPosに代入
    13.    for i, value in pairs(fileList) do
    14. ・fileList分Forループ再生
    15.        item = reaper.AZ_InsertMediaTrackIdSecond(0,1,fileList[i],0,startPos)
    16. ・トラックIDを指定してfileListのパス情報、startPos(開始位置)に沿って、メディアを並べる  インサートしたメディアアイテムをitemに代入
    17.        endPos = reaper.AZ_GetMediaItemEndTime(item)
    18. ・itemの終了地点を取得してendPosに代入
    19.        name = reaper.AZ_GetMediaItemName(item)
    20. ・itemの名前を取得してnameに代入
    21.        reaper.AZ_SetMediaItemHANDAUTOMER(item,2)
    22. ・itemに圧縮タイプ2の「HANDAUTOMER」を実行
    23.        reaper.AZ_SetMediaItemLoudnessMaxMomentary(item,tonumber(inputList[2]))
    24. ・itemにinputListのラウドネス値をtoNumberで数字にして設定
    25.        reaper.AZ_AddRegionMarker(0,startPos,endPos,name,i,color)
    26. ・itemの開始位置と終了位置、名前、ID、カラーをRegion指定してRegionMarkerを追加
    27.        startPos = endPos + 1
    28. ・インサートされた終了位置に+1秒追加したところを開始位置とする
    29.    end
      
      end

    実行画面

  • AZSTOKE_CEDEC2024_HANDAUTOMERCEDEC2024-実演-大量の音声を整音し書き出したい

    実行前の準備

    調整したい波形データをフォルダにまとめて用意しておく

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    
    allCount, count = reaper.AZ_GetSelectedMediaTypeCount(0, "")
    
    
    for i = 0, allCount - 1 do
    
    
        item = reaper.AZ_GetMediaItemSelect(0,i,1)
    
        retval = reaper.AZ_SetMediaItemHANDAUTOMER(item,2)
    
        name = reaper.AZ_GetMediaItemName(item)
    
        startPos = reaper.AZ_GetMediaItemStartTimeSeconds(item)
    
        endPos = reaper.AZ_GetMediaItemEndTime(item)
    
        reaper.AZ_AddRegionMarker(0, startPos, endPos, name, 0, 0)
    
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
    2. allCount, count = reaper.AZ_GetSelectedMediaTypeCount(0, "")
    3. ・選択メディアの数を取得してallCountに代入
    4. for i = 0, allCount - 1 do
    5. ・allCount数分繰り返し処理を実行
    6.     item = reaper.AZ_GetMediaItemSelect(0,i,1)
    7. ・選択メディアを取得してitemに代入
    8.     reaper.AZ_SetMediaItemHANDAUTOMER(item,2)
    9. ・itemに対してHANDAUTOMERを実行 圧縮レベル2
    10.     name = reaper.AZ_GetMediaItemName(item)
    11. ・itemの波形名を取得してnameに代入
    12.     startPos = reaper.AZ_GetMediaItemStartTimeSeconds(item)
    13. ・itemの開始位置を取得してstartPosに代入
    14.     endPos = reaper.AZ_GetMediaItemEndTime(item)
    15. ・itemの終了位置を取得してendPosに代入
    16.     reaper.AZ_AddRegionMarker(0, startPos, endPos, name, 0, 0)
    17. ・各種情報をもとにリージョンを生成
    18. end
    19. ・繰り返し処理を終了

Region1

  • AZSTOKE_SetRegionMakerSelectedMedia「リージョン」-Part1- 選択メディアにリージョン自動設定

    実行前の準備

    プロジェクト内に必要メディアを置く ※縦にメディアを重ねることはできません。

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    
    allCount,_ = reaper.AZ_GetSelectedMediaTypeCount(0,"")
    
    
    reaper.AZ_DeleteAllRegion(0)
    
    color = reaper.AZ_GetRandomColor()
    
    
    for i = 0,allCount-1 do
    
       startPos = reaper.AZ_GetSelectedMediaStartTimeSeconds(0,i)
    
       endPos = reaper.AZ_GetSelectedMediaEndTime(0,i)
    
       name = reaper.AZ_GetSelectedMediaName(0,i)
    
    
       reaper.AZ_AddRegionMarker(0,startPos,endPos,name,i,color)
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
    2. ・SilverAPIを利用可能にする
    3. allCount,_ = reaper.AZ_GetSelectedMediaTypeCount(0,"")
    4. ・選択メディアの数を出力してallCountに代入
    5. reaper.AZ_DeleteAllRegion(0)
    6. ・指定プロジェクト内のリージョンマーカーをすべて削除
    7. color = reaper.AZ_GetRandomColor()
    8. ・ランダムの色を取得してcolorに代入
    9. for i = 0,allCount-1 do
    10. ・選択メディア数分Forをループ対応
    11.    startPos = reaper.AZ_GetSelectedMediaStartTimeSeconds(0,i)
    12. ・各選択メディアの開始地点(秒)を取得
    13.    endPos = reaper.AZ_GetSelectedMediaEndTime(0,i)
    14. ・各選択メディアの終了時間を取得(秒)を取得
    15.    name = reaper.AZ_GetSelectedMediaName(0,i)
    16. ・各選択メディアの名前を取得
    17.    reaper.AZ_AddRegionMarker(0,startPos,endPos,name,i,color)
    18. ・リージョンマーカーを取得情報に合わせて設定
    19. end

    実行画面

TALKTRON1

  • AZSTOKE_TALKTRON_1「TALKTRON」-Part1- 多言語音量自動調整機能1

    実行前の準備

    主言語の音量調整対応が完了している 調整したい指定言語ファイルがある 主言語と調整したい言語のファイルは同名になっている

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    
    retval,pathList = reaper.AZ_GetUserInputList("GetPath",3,"basePath:,sujectPath:,trackList:","D://,D://,3")
    
    
    if retval then
    
       retval,trackList = reaper.AZ_GetUserInputList("TrackList",tonumber(pathList[3]),"track1,track2,track3,track4,track5","PL0000,PL0001,PL0002,PL0003,PL0004,PL0005")
    
    
       if retval then
    
          unmatchedPathList = reaper.AZ_TALKTRON_InsertMediaItems(pathList[2],pathList[1], 0, 1, 0, true, true, 2, trackList)
    
          for i, value in pairs(unmatchedPathList) do
    
              Msg("主ボイスに存在しないファイル:"..value)
    
          end
    
       end
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
    2. ・Silverを利用可能にする
    3. retval,pathList = reaper.AZ_GetUserInputList("GetPath",3,"basePath:,sujectPath:,trackList:","D://,D://,3")
    4. ・ベース言語パス、指定言語パス、トラックを分けたい数を入力できるように設定
    5. if retval then
    6. ・OKを押した場合は以下を実行
    7.    retval,trackList = reaper.AZ_GetUserInputList("TrackList",tonumber(pathList[3]),"track1,track2,track3,track4,track5","PL0000,PL0001,PL0002,PL0003,PL0004,PL0005")
    8. ・トラックを分けたい数分リストを入力
    9.    if retval then
    10.       unmatchedPathList = reaper.AZ_TALKTRON_InsertMediaItems(pathList[2],pathList[1], 0, 1, 0, true, true, 2, trackList)
    11. ・TALKTRONを実行 全自動で動きます。
    12. for i, value in pairs(unmatchedPathList) do Msg("主ボイスに存在しないファイル:"..value)      ・主ボイスに存在しないファイルをコンソールにリストアップ
    13.       end
      
         end
      
      end

    実行画面

LOUDMATCHIFY2

  • AZSTOKE_LOUDMATCHIFY_SAVEDATE_1「LOUDMATCHIFY」-Part1- セーブデータの生成

    実行前の準備

    セーブデータの保存先のパス情報を用意しておく

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    
    cancelType,inputList = reaper.AZ_GetUserInputList("SaveData",1,"Path:","D://script//")
    
    
    if cancelType then
    
    
       loudnessTable = {
    
         {
    
           Name = "ACTION",
    
           Loudness = -22
    
         },
    
         {
    
           Name = "CHARGE",
    
           Loudness = -30
    
         },
    
         {
    
           Name = "HIT",
    
           Loudness = -20
    
         },
    
         {
    
           Name = "JUMP",
    
           Loudness = -25
    
         },
    
         }
    
    
       jsonStr = reaper.AZ_Json_Serialize(loudnessTable);
    
       reaper.AZ_WriteFile(inputList[1],"savedata.txt",jsonStr,0)
    
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
    2. ・Silverを利用可能にする
    3. cancelType,inputList = reaper.AZ_GetUserInputList("SaveData",1,"Path:","D://script//")
    4. ・テキスト入力画面を表示して保存先を入力できるようにする
    5. if cancelType then
    6. ・入力画面でキャンセルにしていないか確認
    7.    loudnessTable = {
      
           {
      
             Name = "ACTION",
      
             Loudness = -22
      
           },
      
           {
      
             Name = "CHARGE",
      
             Loudness = -30
      
           },
      
           {
      
             Name = "HIT",
      
             Loudness = -20
      
           },
      
           {
      
             Name = "JUMP",
      
             Loudness = -25
      
           },
      
           }
    8. ・Name/Loudnessの2つのセットとしてLOUDMATCHIFYに適した形で配列を作成  ※変更追加したい場合はここに追記していく
    9. jsonStr = reaper.AZ_Json_Serialize(loudnessTable); ・配列情報を一つのテキストに変換
    10. reaper.AZ_WriteFile(inputList[1],"savedata.txt",jsonStr,0) ・テキスト情報を指定のフォルダにsavedata.txtを生成
    11. end

    実行画面

  • AZSTOKE_LOUDMATCHIFY_ACTION_1「LOUDMATCHIFY」-Part2- 名称検知ラウドネスの実行

    実行前の準備

    Trackを作成しておく LOUDMATCHIFYで利用可能なセーブデータを生成しておく 音量調整したいファイルを用意しておく

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    cancelType,inputList = reaper.AZ_GetUserInputList("LOUDMATCHIFY",2,"ListPath:,WavPath:","D:/,D:/")
    
    
    jsonStr = reaper.AZ_ReadFile(inputList[1],"savedata.txt")
    
    loudnessTable = reaper.AZ_Json_Deserialize(jsonStr)
    
    
    if cancelType then
    
       fileList = reaper.AZ_GetFilePathList(inputList[2],"wav")
    
    
       startPos = 0
    
       mediaInterval = 1
    
    
       for i, value in pairs(fileList) do
    
           item = reaper.AZ_InsertMediaTrackIdSecond(0,0,value,0,startPos)
    
           name = reaper.AZ_GetMediaItemName(item)
    
           reaper.AZ_SetMediaItemHANDAUTOMER(item,1)
    
           reaper.AZ_LOUDMATCHIFY_SetVolumeForMediaItem(item ,loudnessTable, 1,0)
    
           maxMomentary = reaper.AZ_GetMediaItemLoudnessMaxMomentary(item)
    
           endPos = reaper.AZ_GetMediaItemEndTime(item)
    
           startPos = endPos + mediaInterval
    
           Msg(name)
    
           Msg(maxMomentary)
    
       end
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. ・SILVERとGOLDを利用可能にする
    3. cancelType,inputList = reaper.AZ_GetUserInputList("LOUDMATCHIFY",2,"ListPath:,WavPath:","D:/,D:/")
    4. ・テキスト入力を可能にする。
    5. jsonStr = reaper.AZ_ReadFile(inputList[1],"savedata.txt")
    6. ・セーブデータ先のフォルダからsavedata.txtを検索してその文字列を取得する。
    7. loudnessTable = reaper.AZ_Json_Deserialize(jsonStr)
    8. ・取得した文字列を配列に置き換える
    9. if cancelType then
    10. ・テキスト入力画面でOKを押した場合は以下を実行
    11.    fileList = reaper.AZ_GetFilePathList(inputList[2],"wav")
    12. ・調整したいファイルのリストを取得
    13.    startPos = 0
      
         mediaInterval = 1
    14.    for i, value in pairs(fileList) do
    15. ・取得したリスト分Forループ
    16.        item = reaper.AZ_InsertMediaTrackIdSecond(0,0,value,0,startPos)
    17. ・ファイルをトラック1にインサートしてitemを取得
    18.        name = reaper.AZ_GetMediaItemName(item)
    19. ・itemの名前を取得してnameに代入
    20.        reaper.AZ_SetMediaItemHANDAUTOMER(item,1)
    21. ・itemにHANDAUTOMERの圧縮率1をかける
    22.        reaper.AZ_LOUDMATCHFY_SetVolumeForMediaItem(item ,loudnessTable, 1,0)
    23. ・itemにLOUDMATCHIFYを実行、セーブデータの配列を読み込んで音量調整
    24.        maxMomentary = reaper.AZ_GetMediaItemLoudnessMaxMomentary(item)
    25. ・itemの現段階のmaxMomentaryを出力
    26.        endPos = reaper.AZ_GetMediaItemEndTime(item)
    27. ・終了位置を取得
    28.        startPos = endPos + mediaInterval
    29. ・次のオーディオ位置を設定
    30.        Msg(name)
      
             Msg(maxMomentary)
    31. ・名前とラウドネス値をコンソールに出力
    32.    end
      
      end

    実行画面

Wwise9

  • AZSTOKE_Wwise_Rename_1「Wwise」-Part1- 各ファイル名の操作

    実行前の準備

    Wwiseにリネームしたいファイルが実装されている 変更したい箇所を選択しておく

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    if (reaper.AZ_Wwise_Connect("127.0.0.1",8080)) then
    
        objectList,numObjects = reaper.AZ_Wwise_GetSelectedObjectList()
    
    
        for i,value in pairs(objectList) do
    
             name = reaper.AZ_DeleteBlankString(value.Name)
    
             name = reaper.AZ_ReplaceSearchString(name,"AZ","AZSTOKE")
    
             reaper.AZ_Wwise_SetName(value.ID,name)
    
        end
    
    
        reaper.AZ_Wwise_Disconnect()
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. ・SILVERとGOLDのAPIを利用可能にする
    3. if (reaper.AZ_Wwise_Connect("127.0.0.1",8080)) then
    4. ・Wwiseのコネクトを実行し接続するとif内を実行
    5.     objectList,numObjects = reaper.AZ_Wwise_GetSelectedObjectList()
    6. ・選択オブジェクト(配列)を取得してobjectListに代入
    7.     for i,value in pairs(objectList) do
    8. ・objectList分Forループ対応
    9.          name = reaper.AZ_DeleteBlankString(value.Name)
    10. ・取得した名前のスペースを削除
    11.          name = reaper.AZ_ReplaceSearchString(name,"AZ","AZSTOKE")
    12. ・AZという文字をAZSTOKEに置換する
    13.          reaper.AZ_Wwise_SetName(value.ID,name)
    14. ・最終的に変更した文字列をオブジェクトに適用
    15.     end
    16.     reaper.AZ_Wwise_Disconnect()
    17. ・Wwiseのコネクトを終了
    18. end

    実行画面

  • AZSTOKE_CEDEC_KYUSHU2024【CEDEC+KYUSHU2024】ボイス仮整音からWwise実装までの自動化に成功

    実行前の準備

    Trackを作成しておく インサートする用のメディアを用意しておく LOUDMATCHIFYで利用可能なセーブデータを生成しておく レンダー設定を用意しておく WwiseにインサートしたいWorkUnitを作成しておく

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    reaper.AZ_DeleteAllRegion(0)
    
    cancelType, inputList = reaper.AZ_GetUserInputList("Insert",1,"Path:","D://")
    
    
    if cancelType then
    
       --file import HANDAUTOMER
    
       fileList = reaper.AZ_GetFilePathList(inputList[1],"wav")
    
    
       startPos = 0
    
       itemList = {}
    
    
       for i, value in pairs(fileList) do
    
           itemList[i] = {}
    
           itemList[i]["item"] = reaper.AZ_InsertMediaTrackIdSecond(0,0,value,0,startPos)
    
           reaper.AZ_SetMediaItemHANDAUTOMER(itemList[i].item,3)
    
           itemList[i]["name"] = reaper.AZ_GetMediaItemName(itemList[i].item)
    
    
           --get parent
    
           itemList[i]["parent"] = ""
    
           splitList = reaper.AZ_GetStringSplitList(itemList[i].name,"_")
    
           table.remove(splitList)
    
           for e, value in pairs(splitList) do
    
               if e == 1 then
    
                  itemList[i]["parent"] = itemList[i].parent..value
    
               else
    
                  itemList[i]["parent"] = itemList[i].parent.."_"..value
    
               end
    
           end
    
    
           --next start pos setting + regionMarker
    
           endPos = reaper.AZ_GetMediaItemEndTime(itemList[i].item)
    
           reaper.AZ_AddRegionMarker(0,startPos,endPos,itemList[i].name,0,0)
    
           startPos = endPos + 1
    
       end
    
    
       --render setting
    
       renderPath = "D:\\script\\renderdata"
    
       renderFileName = "render"
    
    
       jsonStr = reaper.AZ_ReadFile(renderPath,renderFileName..".txt")
    
       render = reaper.AZ_Json_Deserialize(jsonStr)
    
       path = reaper.AZ_SetProjectPathFolder("Rec",3)
    
       render.OutputDir = path
    
    
       --render
    
       fileList = reaper.AZ_RenderToAudioFile(0,render)
    
    
       --wwise intro
    
       wwisePath = "\\Actor-Mixer Hierarchy\\Default Work Unit\\Master\\VOICE"
    
       parent = ""
    
    
       if (reaper.AZ_Wwise_Connect("127.0.0.1",8080)) then
    
    
           --wwise object create
    
           for i, value in pairs(fileList) do
    
    
               if parent ~= itemList[i].parent then
    
                  parent = itemList[i].parent
    
                  containerList = reaper.AZ_Wwise_CreateContainer(wwisePath,0,itemList[i].parent)
    
               end
    
               soundVoiceList = reaper.AZ_Wwise_CreateSoundVoice(containerList.ID,value,itemList[i].name)
    
               itemList[i]["soundVoiceID"] = soundVoiceList.ID
    
           end
    
    
           --LOUDMATCHIFY Savedata
    
           jsonStr = reaper.AZ_ReadFile("D:\\script\\savedata\\savedata","savedata.txt")
    
           loudmatchifyList = reaper.AZ_Json_Deserialize(jsonStr)
    
    
           --loudness
    
           for i, value in pairs(itemList) do
    
               wwiseVol = reaper.AZ_MIDDLESCANNER_Wwise_GetVolumeForMediaItem(itemList[i].item,"English(US)")
    
               reaper.AZ_LOUDMATCHIFY_SetVolumeForMediaItem(itemList[i].item,loudmatchifyList,1,wwiseVol.Volume)
    
               Msg(itemList[i].name)
    
               Msg(wwiseVol.Volume)
    
               Msg(reaper.AZ_GetMediaItemLoudnessMaxMomentary(itemList[i].item))
    
           end
    
    
           path = reaper.AZ_SetProjectPathFolder("Rec",3)
    
           render.OutputDir = path
    
           fileList = reaper.AZ_RenderToAudioFile(0,render)
    
    
           for i, value in pairs(fileList) do
    
               reaper.AZ_Wwise_ImportAudioFile(itemList[i].soundVoiceID,value,"English(US)")
    
           end
    
    
           reaper.AZ_Wwise_Disconnect()
    
       end
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    3. ・BRONZE、SILVER、GOLDのAPIを利用可能にする
    4. reaper.AZ_DeleteAllRegion(0)
    5. ・既につくられているリージョンを削除する
    6. cancelType, inputList = reaper.AZ_GetUserInputList("Insert",1,"Path:","D://")
    7. ・音声ファイルが格納されているフォルダのパスを指定
    8. if cancelType then
      
         --file import HANDAUTOMER
      
         fileList = reaper.AZ_GetFilePathList(inputList[1],"wav")
    9. ・音声ファイルのパスを取得
    10.    startPos = 0
    11. ・音声ファイルの開始位置を設定
    12.    itemList = {}
    13.    for i, value in pairs(fileList) do
      
             itemList[i] = {}
      
             itemList[i]["item"] = reaper.AZ_InsertMediaTrackIdSecond(0,0,value,0,startPos)
    14. ・音声ファイルをReaperにインポート
    15.        reaper.AZ_SetMediaItemHANDAUTOMER(itemList[i].item,3)
    16. ・HANDAUTOMERを実行
    17.        itemList[i]["name"] = reaper.AZ_GetMediaItemName(itemList[i].item)
    18. ・メディアアイテムの名前(ファイル名)を取得
    19.        --get parent
      
             itemList[i]["parent"] = ""
      
             splitList = reaper.AZ_GetStringSplitList(itemList[i].name,"_")
      
             table.remove(splitList)
      
             for e, value in pairs(splitList) do
      
                 if e == 1 then
      
                    itemList[i]["parent"] = itemList[i].parent..value
      
                 else
      
                    itemList[i]["parent"] = itemList[i].parent.."_"..value
      
                 end
      
             end
    20. ・音声ファイル名のナンバリングを除いた部分を取得(Wwiseでコンテナ名として使用する)
    21.        --next start pos setting + regionMarker
      
             endPos = reaper.AZ_GetMediaItemEndTime(itemList[i].item)
      
             reaper.AZ_AddRegionMarker(0,startPos,endPos,itemList[i].name,0,0)
    22. ・メディアアイテムの位置にリージョンマーカーを設定
    23.        startPos = endPos + 1
    24. ・メディアアイテムの情報をリストに格納しておく
    25.    end
    26.    --render setting
      
         renderPath = "D:\\script\\renderdata"
      
         renderFileName = "render"
    27. ・ファイルからレンダリング設定データを取得
    28.    jsonStr = reaper.AZ_ReadFile(renderPath,renderFileName..".txt")
      
         render = reaper.AZ_Json_Deserialize(jsonStr)
      
         path = reaper.AZ_SetProjectPathFolder("Rec",3)
      
         render.OutputDir = path
    29. ・出力先フォルダのみ変更
    30.    --render
      
         fileList = reaper.AZ_RenderToAudioFile(0,render)
    31. ・レンダリング実行
    32.    --wwise intro
      
         wwisePath = "\\Actor-Mixer Hierarchy\\Default Work Unit\\Master\\VOICE"
    33. ・Wwise上のインポート先を指定
    34.    parent = ""
    35.    if (reaper.AZ_Wwise_Connect("127.0.0.1",8080)) then
    36. ・Wwiseに接続
    37.        --wwise object create
      
             for i, value in pairs(fileList) do
    38. ・各メディアアイテム情報に対して以下処理を実行
    39.            if parent ~= itemList[i].parent then
      
                    parent = itemList[i].parent
      
                    containerList = reaper.AZ_Wwise_CreateContainer(wwisePath,0,itemList[i].parent)
      
                 end
    40. ・対応するランダムコンテナが作成されていない場合、作成する
    41.            soundVoiceList = reaper.AZ_Wwise_CreateSoundVoice(containerList.ID,value,itemList[i].name)
    42. ・コンテナにレンダリングした音声ファイルをインポートする
    43.            itemList[i]["soundVoiceID"] = soundVoiceList.ID
      
             end
    44.        --LOUDMATCHIFY Savedata
      
             jsonStr = reaper.AZ_ReadFile("D:\\script\\savedata\\savedata","savedata.txt")
      
             loudmatchifyList = reaper.AZ_Json_Deserialize(jsonStr)
    45. ・LOUDMATCHIFY用の設定データをファイルから取得する
    46.        --loudness
      
             for i, value in pairs(itemList) do
      
                 wwiseVol = reaper.AZ_MIDDLESCANNER_Wwise_GetVolumeForMediaItem(itemList[i].item,"English(US)")
    47. ・MIDDLESCANNERを実行し、Wwise上での音量設定を取得
    48.            reaper.AZ_LOUDMATCHIFY_SetVolumeForMediaItem(itemList[i].item,loudmatchifyList,1,wwiseVol.Volume)
    49. ・MIDDLESCANNERの結果を考慮してLOUDMATCHIFYを実行
    50.            Msg(itemList[i].name)
      
                 Msg(wwiseVol.Volume)
      
                 Msg(reaper.AZ_GetMediaItemLoudnessMaxMomentary(itemList[i].item))
    51. ・処理の結果をコンソールに出力
    52.        end
    53.        path = reaper.AZ_SetProjectPathFolder("Rec",3)
      
             render.OutputDir = path
      
             fileList = reaper.AZ_RenderToAudioFile(0,render)
    54. ・レンダリング設定の出力先フォルダを変更し、レンダリングを実行
    55.        for i, value in pairs(fileList) do
      
                 reaper.AZ_Wwise_ImportAudioFile(itemList[i].soundVoiceID,value,"English(US)")
      
             end
    56. ・レンダリングしたファイルを対応するWwiseオブジェクトにインポート(置き換え)
    57.        reaper.AZ_Wwise_Disconnect()
    58. ・Wwiseから切断する
    59.    end
      
      end

    実行画面

  • AZSTOKE_Wwise_FullAuto_Blend_1書き出しからブレンドコンテナの生成までを自動化

    実行前の準備

    書き出ししたいファイルをReaperプロジェクト内に並べておく Renderの書き出し用ファイルを生成しておく ※Renderの設定ファイルの書き出し方法はこちら

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    reaper.AZ_DeleteAllRegion(0)
    
    
    itemList = reaper.AZ_GetSelectedMediaItemList(0)
    
    color = reaper.AZ_GetRandomColor()
    
    
    --Region setting
    
    for i, value in pairs(itemList) do
    
        startPos = reaper.AZ_GetMediaItemStartTimeSeconds(value)
    
        endPos = reaper.AZ_GetMediaItemEndTime(value)
    
        name = reaper.AZ_GetMediaItemName(value)
    
        reaper.AZ_AddRegionMarker(0,startPos,endPos,name,0,color)
    
    end
    
    
    --render setting
    
    renderPath = reaper.AZ_SetResoucePathFolder("AZData//Render",0)
    
    renderFileName = "render"
    
    
    jsonStr = reaper.AZ_ReadFile(renderPath,renderFileName..".txt")
    
    render = reaper.AZ_Json_Deserialize(jsonStr)
    
    path = reaper.AZ_SetProjectPathFolder("Rec",3)
    
    render.OutputDir = path
    
    
    --render
    
    fileList = reaper.AZ_RenderToAudioFile(0,render)
    
    
    if reaper.AZ_Wwise_Connect("127.0.0.1", 8080) then
    
       parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"
    
       workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")
    
       mixer = reaper.AZ_Wwise_CreateActorMixer(workunit.Path,"pl0000")
    
       container = reaper.AZ_Wwise_CreateContainer(mixer.ID,reaper.AZ_Wwise_ContainerType_Blend(),"pl0000_az")
    
       for i, value in pairs(fileList) do
    
           splitList = reaper.AZ_GetStringSplitList(value, "\\")
    
           wwiseObj = reaper.AZ_Wwise_CreateSoundSFX(container.ID,value,splitList[#splitList],"PL0000")
    
       end
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. ・APIを利用可能にする設定
    3. reaper.AZ_DeleteAllRegion(0)
    4. ・リージョンマーカーを削除
    5. itemList = reaper.AZ_GetSelectedMediaItemList(0)
    6. ・選択メディアを配列出力
    7. color = reaper.AZ_GetRandomColor()
    8. ・ランダム色を取得
    9. --Region setting
      
      for i, value in pairs(itemList) do
    10. ・選択メディアのリストをForループ
    11.     startPos = reaper.AZ_GetMediaItemStartTimeSeconds(value)
    12. ・選択メディアの開始位置(秒)を取得
    13.     endPos = reaper.AZ_GetMediaItemEndTime(value)
    14. ・選択メディアの終了位置(秒)を取得
    15.     name = reaper.AZ_GetMediaItemName(value)
    16. ・選択メディアの名前を取得
    17.     reaper.AZ_AddRegionMarker(0,startPos,endPos,name,0,color)
    18. ・リージョンを追加して各種情報を基に設定
    19. end
    20. --render setting
      
      renderPath = reaper.AZ_SetResoucePathFolder("AZData//Render",0)
    21. ・レンダーファイルのパスのフルパス情報を取得
    22. renderFileName = "render"
    23. ・取得するファイル名を設定
    24. jsonStr = reaper.AZ_ReadFile(renderPath,renderFileName..".txt")
    25. ・テキストファイルを取得して中身を文字列に変換
    26. render = reaper.AZ_Json_Deserialize(jsonStr)
    27. ・文字列変換したものを利用できる配列に切り替え
    28. path = reaper.AZ_SetProjectPathFolder("Rec",3)
    29. ・プロジェクトのリソースフォルダに専用パスを設定  ※日時分秒が設定されるため常に新しいフォルダが生成されます。
    30. render.OutputDir = path ・書き出しレンダーにパスを改めて設定
    31. --render fileList = reaper.AZ_RenderToAudioFile(0,render) ・書き出しを行い、書き出したパス情報を取得
    32. if reaper.AZ_Wwise_Connect("127.0.0.1", 8080) then
    33. ・Wwiseにコネクト対応
    34.    parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"
    35. ・追加したい親のパスを設定
    36.    workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")
    37. ・「PL0000」ワークユニットを作成
    38.    mixer = reaper.AZ_Wwise_CreateActorMixer(workunit.Path,"pl0000")
    39. ・「pl0000」アクターミキサーを作成
    40.    container = reaper.AZ_Wwise_CreateContainer(mixer.ID,reaper.AZ_Wwise_ContainerType_Blend(),"pl0000_az")
    41. ・作成したアクターミキサーの以下にブレンドコンテナを生成
    42.    for i, value in pairs(fileList) do
    43. ・書き出したファイルリスト分Forループ
    44.        splitList = reaper.AZ_GetStringSplitList(value, "\\")
    45. ・フルパスから階層で配列に切り出す対応
    46.        wwiseObj = reaper.AZ_Wwise_CreateSoundSFX(container.ID,value,splitList[#splitList],"PL0000")
    47. ・サウンドSFXを生成してファイル名を設定  ※splitList[#splitList]これにより、フルパス情報から最後の波形名を取得することができます。
    48.    end
      
      end

    実行画面

  • AZSTOKE_Wwise_FullAuto_Event_2Event生成までの自動化機能を追加-改良版1-

    実行前の準備

    書き出ししたいファイルをReaperプロジェクト内に並べておく Renderの書き出し用ファイルを生成しておく ※Renderの設定ファイルの書き出し方法はこちら

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    reaper.AZ_DeleteAllRegion(0)
    
    
    itemList = reaper.AZ_GetSelectedMediaItemList(0)
    
    color = reaper.AZ_GetRandomColor()
    
    
    --Region setting
    
    for i, value in pairs(itemList) do
    
        startPos = reaper.AZ_GetMediaItemStartTimeSeconds(value)
    
        endPos = reaper.AZ_GetMediaItemEndTime(value)
    
        name = reaper.AZ_GetMediaItemName(value)
    
        reaper.AZ_AddRegionMarker(0,startPos,endPos,name,0,color)
    
    end
    
    
    --render setting
    
    renderPath = reaper.AZ_SetResoucePathFolder("AZData//Render",0)
    
    renderFileName = "render"
    
    
    jsonStr = reaper.AZ_ReadFile(renderPath,renderFileName..".txt")
    
    render = reaper.AZ_Json_Deserialize(jsonStr)
    
    path = reaper.AZ_SetProjectPathFolder("Rec",3)
    
    render.OutputDir = path
    
    
    --render
    
    fileList = reaper.AZ_RenderToAudioFile(0,render)
    
    
    if reaper.AZ_Wwise_Connect("127.0.0.1", 8080) then
    
       parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"
    
       workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")
    
       mixer = reaper.AZ_Wwise_CreateActorMixer(workunit.Path,"pl0000")
    
       container = reaper.AZ_Wwise_CreateContainer(mixer.ID,reaper.AZ_Wwise_ContainerType_Blend(),"pl0000_az")
    
       for i, value in pairs(fileList) do
    
           splitList = reaper.AZ_GetStringSplitList(value, "\\")
    
           wwiseObj = reaper.AZ_Wwise_CreateSoundSFX(container.ID,value,splitList[#splitList],"PL0000")
    
       end
    
    
       parentPath = "\\Events"
    
       workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")
    
       reaper.AZ_Wwise_CreateEvent(workunit.ID,container.Name,1,container.ID)
    
    
       reaper.AZ_Wwise_Disconnect()
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. ・RIGDOCKSを利用可能にする対応
    3. reaper.AZ_DeleteAllRegion(0)
    4. ・現時点あるリージョンすべてを削除
    5. itemList = reaper.AZ_GetSelectedMediaItemList(0)
    6. ・選択メディアのアイテムを配列取得
    7. color = reaper.AZ_GetRandomColor()
    8. ・ランダムで色を取得
    9. --Region setting
      
      for i, value in pairs(itemList) do
    10. ・選択波形分ループ
    11.     startPos = reaper.AZ_GetMediaItemStartTimeSeconds(value)
    12. ・メディアの開始位置を取得
    13.     endPos = reaper.AZ_GetMediaItemEndTime(value)
    14. ・メディアの終了位置を取得
    15.     name = reaper.AZ_GetMediaItemName(value)
    16. ・メディアの名前を取得
    17.     reaper.AZ_AddRegionMarker(0,startPos,endPos,name,0,color)
    18. ・取得情報でメディアごとのリージョンを設定
    19. end
    20. --render setting renderPath = reaper.AZ_SetResoucePathFolder("AZData//Render",0) ・レンダーパスのフルパス情報を取得
    21. renderFileName = "render" ・レンダーのファイル名を変数として作成
    22. jsonStr = reaper.AZ_ReadFile(renderPath,renderFileName..".txt")
    23. ・レンダーファイルを読み込み
    24. render = reaper.AZ_Json_Deserialize(jsonStr)
    25. ・読み込みファイルをレンダーの設定ファイルに変換
    26. path = reaper.AZ_SetProjectPathFolder("Rec",3)
    27. ・プロジェクトファイルに書き出し先のフォルダを設定
    28. render.OutputDir = path
    29. ・レンダーのアウトプット先を設定
    30. --render
      
      fileList = reaper.AZ_RenderToAudioFile(0,render)
    31. ・レンダーを実行してパス情報を取得
    32. if reaper.AZ_Wwise_Connect("127.0.0.1", 8080) then
    33. ・Wwiseへコネクト
    34.    parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"
    35. ・ワークユニットを作りたい親のパスを設定
    36.    workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")
    37. ・PL0000のワークユニットを生成
    38.    mixer = reaper.AZ_Wwise_CreateActorMixer(workunit.Path,"pl0000")
    39. ・pl0000のアクターミキサーを生成
    40.    container = reaper.AZ_Wwise_CreateContainer(mixer.ID,reaper.AZ_Wwise_ContainerType_Blend(),"pl0000_az")
    41. ・pl0000_azのブレンドコンテナを生成
    42.    for i, value in pairs(fileList) do
    43. ・ブレンドに登録する書き出しファイルをループ実行
    44.        splitList = reaper.AZ_GetStringSplitList(value, "\\")
    45. ・フルパス情報から分割
    46.        wwiseObj = reaper.AZ_Wwise_CreateSoundSFX(container.ID,value,splitList[#splitList],"PL0000")
    47. ・ブレンドコンテナ内にSFXを生成してファイル名を入れる
    48.    end
    49.    parentPath = "\\Events"
    50. ・Event生成用の親パスを設定
    51.    workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")
    52. ・PL0000ワークユニットを生成
    53.    reaper.AZ_Wwise_CreateEvent(workunit.ID,container.Name,1,container.ID)
    54. ・ワークユニットの以下にEventを生成してブレンドコンテナをPlayで設定
    55.    reaper.AZ_Wwise_Disconnect()
    56. ・Wwiseコネクトを外す end

    実行画面

  • AZSTOKE_Wwise_FullAuto_Event_3Eventのアクションの操作の自動化追加-改良版2-

    実行前の準備

    書き出ししたいファイルをReaperプロジェクト内に並べておく Renderの書き出し用ファイルを生成しておく ※Renderの設定ファイルの書き出し方法はこちら

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    reaper.AZ_DeleteAllRegion(0)
    
    
    itemList = reaper.AZ_GetSelectedMediaItemList(0)
    
    color = reaper.AZ_GetRandomColor()
    
    
    --Region setting
    
    for i, value in pairs(itemList) do
    
        startPos = reaper.AZ_GetMediaItemStartTimeSeconds(value)
    
        endPos = reaper.AZ_GetMediaItemEndTime(value)
    
        name = reaper.AZ_GetMediaItemName(value)
    
        reaper.AZ_AddRegionMarker(0,startPos,endPos,name,0,color)
    
    end
    
    
    --render setting
    
    renderPath = reaper.AZ_SetResoucePathFolder("AZData//Render",0)
    
    renderFileName = "render"
    
    
    jsonStr = reaper.AZ_ReadFile(renderPath,renderFileName..".txt")
    
    render = reaper.AZ_Json_Deserialize(jsonStr)
    
    path = reaper.AZ_SetProjectPathFolder("Rec",3)
    
    render.OutputDir = path
    
    
    --render
    
    fileList = reaper.AZ_RenderToAudioFile(0,render)
    
    
    if reaper.AZ_Wwise_Connect("127.0.0.1", 8080) then
    
       parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"
    
       workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")
    
       mixer = reaper.AZ_Wwise_CreateActorMixer(workunit.Path,"pl0000")
    
       container = reaper.AZ_Wwise_CreateContainer(mixer.ID,reaper.AZ_Wwise_ContainerType_Blend(),"pl0000_az")
    
       for i, value in pairs(fileList) do
    
           splitList = reaper.AZ_GetStringSplitList(value, "\\")
    
           wwiseObj = reaper.AZ_Wwise_CreateSoundSFX(container.ID,value,splitList[#splitList],"PL0000")
    
       end
    
    
       parentPath = "\\Events"
    
       workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")
    
       event = reaper.AZ_Wwise_CreateEvent(workunit.ID,container.Name,2,container.ID)
    
    
       reaper.AZ_Wwise_AddActionToEvent(event.ID,1,container.ID)
    
    
       reaper.AZ_Wwise_Disconnect()
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. ・RIGDOCKSを利用可能にする対応
    3. reaper.AZ_DeleteAllRegion(0)
    4. ・現時点あるリージョンすべてを削除
    5. itemList = reaper.AZ_GetSelectedMediaItemList(0)
    6. ・選択メディアのアイテムを配列取得
    7. color = reaper.AZ_GetRandomColor()
    8. ・ランダムで色を取得
    9. --Region setting
      
      for i, value in pairs(itemList) do
    10. ・選択波形分ループ
    11.     startPos = reaper.AZ_GetMediaItemStartTimeSeconds(value)
    12. ・メディアの開始位置を取得
    13.     endPos = reaper.AZ_GetMediaItemEndTime(value)
    14. ・メディアの終了位置を取得
    15.     name = reaper.AZ_GetMediaItemName(value)
    16. ・メディアの名前を取得
    17.     reaper.AZ_AddRegionMarker(0,startPos,endPos,name,0,color)
    18. ・取得情報でメディアごとのリージョンを設定
    19. end
    20. --render setting renderPath = reaper.AZ_SetResoucePathFolder("AZData//Render",0) ・レンダーパスのフルパス情報を取得
    21. renderFileName = "render" ・レンダーのファイル名を変数として作成
    22. jsonStr = reaper.AZ_ReadFile(renderPath,renderFileName..".txt")
    23. ・レンダーファイルを読み込み
    24. render = reaper.AZ_Json_Deserialize(jsonStr)
    25. ・読み込みファイルをレンダーの設定ファイルに変換
    26. path = reaper.AZ_SetProjectPathFolder("Rec",3)
    27. ・プロジェクトファイルに書き出し先のフォルダを設定
    28. render.OutputDir = path
    29. ・レンダーのアウトプット先を設定
    30. --render
      
      fileList = reaper.AZ_RenderToAudioFile(0,render)
    31. ・レンダーを実行してパス情報を取得
    32. if reaper.AZ_Wwise_Connect("127.0.0.1", 8080) then
    33. ・Wwiseへコネクト
    34.    parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"
    35. ・ワークユニットを作りたい親のパスを設定
    36.    workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")
    37. ・PL0000のワークユニットを生成
    38.    mixer = reaper.AZ_Wwise_CreateActorMixer(workunit.Path,"pl0000")
    39. ・pl0000のアクターミキサーを生成
    40.    container = reaper.AZ_Wwise_CreateContainer(mixer.ID,reaper.AZ_Wwise_ContainerType_Blend(),"pl0000_az")
    41. ・pl0000_azのブレンドコンテナを生成
    42.    for i, value in pairs(fileList) do
    43. ・ブレンドに登録する書き出しファイルをループ実行
    44.        splitList = reaper.AZ_GetStringSplitList(value, "\\")
    45. ・フルパス情報から分割
    46.        wwiseObj = reaper.AZ_Wwise_CreateSoundSFX(container.ID,value,splitList[#splitList],"PL0000")
    47. ・ブレンドコンテナ内にSFXを生成してファイル名を入れる
    48.    end
    49.    parentPath = "\\Events"
    50. ・Event生成用の親パスを設定
    51.    workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")
    52. ・PL0000ワークユニットを生成
    53.    event = reaper.AZ_Wwise_CreateEvent(workunit.ID,container.Name,2,container.ID)
    54. ・ワークユニットの以下にEventを生成してブレンドコンテナをStopで設定
    55.    reaper.AZ_Wwise_AddActionToEvent(event.ID,1,container.ID)
    56. ・追加したイベントにさらにPlayのコンテナを追加
    57.    reaper.AZ_Wwise_Disconnect()
    58. ・Wwiseコネクトを外す end

    実行画面

  • AZSTOKE_Wwise_FullAuto_Bank_4Bankを生成と紐づけを自動化-改良版3-

    実行前の準備

    書き出ししたいファイルをReaperプロジェクト内に並べておく Renderの書き出し用ファイルを生成しておく ※Renderの設定ファイルの書き出し方法はこちら

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    reaper.AZ_DeleteAllRegion(0)
    
    
    itemList = reaper.AZ_GetSelectedMediaItemList(0)
    
    color = reaper.AZ_GetRandomColor()
    
    
    --Region setting
    
    for i, value in pairs(itemList) do
    
        startPos = reaper.AZ_GetMediaItemStartTimeSeconds(value)
    
        endPos = reaper.AZ_GetMediaItemEndTime(value)
    
        name = reaper.AZ_GetMediaItemName(value)
    
        reaper.AZ_AddRegionMarker(0,startPos,endPos,name,0,color)
    
    end
    
    
    --render setting
    
    renderPath = reaper.AZ_SetResoucePathFolder("AZData//Render",0)
    
    renderFileName = "render"
    
    
    jsonStr = reaper.AZ_ReadFile(renderPath,renderFileName..".txt")
    
    render = reaper.AZ_Json_Deserialize(jsonStr)
    
    path = reaper.AZ_SetProjectPathFolder("Rec",3)
    
    render.OutputDir = path
    
    
    --render
    
    fileList = reaper.AZ_RenderToAudioFile(0,render)
    
    
    if reaper.AZ_Wwise_Connect("127.0.0.1", 8080) then
    
       parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"
    
       workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")
    
       mixer = reaper.AZ_Wwise_CreateActorMixer(workunit.Path,"pl0000")
    
       container = reaper.AZ_Wwise_CreateContainer(mixer.ID,reaper.AZ_Wwise_ContainerType_Blend(),"pl0000_az")
    
       for i, value in pairs(fileList) do
    
           splitList = reaper.AZ_GetStringSplitList(value, "\\")
    
           wwiseObj = reaper.AZ_Wwise_CreateSoundSFX(container.ID,value,splitList[#splitList],"PL0000")
    
       end
    
    
       parentPath = "\\Events"
    
       workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")
    
       event = reaper.AZ_Wwise_CreateEvent(workunit.ID,container.Name,2,container.ID)
    
    
       reaper.AZ_Wwise_AddActionToEvent(event.ID,1,container.ID)
    
    
       parentPath = "\\SoundBanks\\Default Work Unit"
    
       soundBank = reaper.AZ_Wwise_CreateObject(parentPath, "AZ_Bank", "SoundBank")
    
    
       reaper.AZ_Wwise_AddObjectToSoundBank(soundBank.ID, workunit.ID)
    
    
       reaper.AZ_Wwise_Disconnect()
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. ・RIGDOCKSを利用可能にする対応
    3. reaper.AZ_DeleteAllRegion(0)
    4. ・現時点あるリージョンすべてを削除
    5. itemList = reaper.AZ_GetSelectedMediaItemList(0)
    6. ・選択メディアのアイテムを配列取得
    7. color = reaper.AZ_GetRandomColor()
    8. ・ランダムで色を取得
    9. --Region setting
      
      for i, value in pairs(itemList) do
    10. ・選択波形分ループ
    11.     startPos = reaper.AZ_GetMediaItemStartTimeSeconds(value)
    12. ・メディアの開始位置を取得
    13.     endPos = reaper.AZ_GetMediaItemEndTime(value)
    14. ・メディアの終了位置を取得
    15.     name = reaper.AZ_GetMediaItemName(value)
    16. ・メディアの名前を取得
    17.     reaper.AZ_AddRegionMarker(0,startPos,endPos,name,0,color)
    18. ・取得情報でメディアごとのリージョンを設定
    19. end
    20. --render setting renderPath = reaper.AZ_SetResoucePathFolder("AZData//Render",0) ・レンダーパスのフルパス情報を取得
    21. renderFileName = "render" ・レンダーのファイル名を変数として作成
    22. jsonStr = reaper.AZ_ReadFile(renderPath,renderFileName..".txt")
    23. ・レンダーファイルを読み込み
    24. render = reaper.AZ_Json_Deserialize(jsonStr)
    25. ・読み込みファイルをレンダーの設定ファイルに変換
    26. path = reaper.AZ_SetProjectPathFolder("Rec",3)
    27. ・プロジェクトファイルに書き出し先のフォルダを設定
    28. render.OutputDir = path
    29. ・レンダーのアウトプット先を設定
    30. --render
      
      fileList = reaper.AZ_RenderToAudioFile(0,render)
    31. ・レンダーを実行してパス情報を取得
    32. if reaper.AZ_Wwise_Connect("127.0.0.1", 8080) then
    33. ・Wwiseへコネクト
    34.    parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"
    35. ・ワークユニットを作りたい親のパスを設定
    36.    workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")
    37. ・PL0000のワークユニットを生成
    38.    mixer = reaper.AZ_Wwise_CreateActorMixer(workunit.Path,"pl0000")
    39. ・pl0000のアクターミキサーを生成
    40.    container = reaper.AZ_Wwise_CreateContainer(mixer.ID,reaper.AZ_Wwise_ContainerType_Blend(),"pl0000_az")
    41. ・pl0000_azのブレンドコンテナを生成
    42.    for i, value in pairs(fileList) do
    43. ・ブレンドに登録する書き出しファイルをループ実行
    44.        splitList = reaper.AZ_GetStringSplitList(value, "\\")
    45. ・フルパス情報から分割
    46.        wwiseObj = reaper.AZ_Wwise_CreateSoundSFX(container.ID,value,splitList[#splitList],"PL0000")
    47. ・ブレンドコンテナ内にSFXを生成してファイル名を入れる
    48.    end
    49.    parentPath = "\\Events"
    50. ・Event生成用の親パスを設定
    51.    workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")
    52. ・PL0000ワークユニットを生成
    53.    event = reaper.AZ_Wwise_CreateEvent(workunit.ID,container.Name,2,container.ID)
    54. ・ワークユニットの以下にEventを生成してブレンドコンテナをStopで設定
    55.    reaper.AZ_Wwise_AddActionToEvent(event.ID,1,container.ID)
    56. ・追加したイベントにさらにPlayのコンテナを追加
    57.    parentPath = "\\SoundBanks\\Default Work Unit"
    58. ・サウンドバンクのパスを設定
    59.    soundBank = reaper.AZ_Wwise_CreateObject(parentPath, "AZ_Bank", "SoundBank")
    60. ・[AZ_Bank]のバンクをパスに生成
    61.    reaper.AZ_Wwise_AddObjectToSoundBank(soundBank.ID, workunit.ID)
    62. ・バンクにイベントがあるワークユニットを設定
    63.    reaper.AZ_Wwise_Disconnect()
    64. ・Wwiseコネクトを外す対応
    65. end

    実行画面

  • AZSTOKE_Wwise_FullAuto_Bank_5BankのGenerateを自動化-改良版4-

    実行前の準備

    書き出ししたいファイルをReaperプロジェクト内に並べておく

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    reaper.AZ_DeleteAllRegion(0)
    
    
    itemList = reaper.AZ_GetSelectedMediaItemList(0)
    
    color = reaper.AZ_GetRandomColor()
    
    
    --Region setting
    
    for i, item in pairs(itemList) do
    
        startPos = reaper.AZ_GetMediaItemStartTimeSeconds(item)
    
        endPos = reaper.AZ_GetMediaItemEndTime(item)
    
        name = reaper.AZ_GetMediaItemName(item)
    
        reaper.AZ_AddRegionMarker(0, startPos, endPos, name, 0, color)
    
    end
    
    
    --render setting
    
    path = reaper.AZ_SetProjectPathFolder("Rec", 3)
    
    render = {
    
        OutputDir = path,
    
        Channels = 1,
    
        FileName = "$region",
    
        RenderingRangeType = 5,
    
    }
    
    
    --render
    
    fileList = reaper.AZ_RenderToAudioFile(0, render)
    
    
    if reaper.AZ_Wwise_Connect("127.0.0.1",  8080) then
    
       parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"
    
       workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath,  "PL0000", true)
    
       mixer = reaper.AZ_Wwise_CreateActorMixer(workunit["Path"], "pl0000", true)
    
       container = reaper.AZ_Wwise_CreateContainer(mixer["ID"], reaper.AZ_Wwise_ContainerType_Blend(), "pl0000_az", true)
    
    
       for i, filePath in pairs(fileList) do
    
           fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]
    
           wwiseObj = reaper.AZ_Wwise_CreateSoundSFX(container["ID"], filePath, fileName, "PL0000", true)
    
       end
    
    
       parentPath = "\\Events"
    
       workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath,  "PL0000", true)
    
    
       reaper.AZ_Wwise_DeleteObject(workunit["Path"] .. "\\" .. container["Name"])
    
    
       event = reaper.AZ_Wwise_CreateEvent(workunit["ID"], container["Name"], 2, container["ID"])
    
    
       reaper.AZ_Wwise_AddActionToEvent(event["ID"], 1, container["ID"])
    
    
       parentPath = "\\SoundBanks\\Default Work Unit"
    
       soundBank = reaper.AZ_Wwise_CreateObject(parentPath, "AZ_Bank", "SoundBank", true)
    
    
       reaper.AZ_Wwise_AddObjectToSoundBank(soundBank["ID"], workunit["ID"])
    
    
       reaper.AZ_Wwise_GenerateSoundBank({soundBank["Name"]}, {"Windows"}, {"Japanese"})
    
    
       reaper.AZ_Wwise_Disconnect()
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. ・RIGDOCKSをインポート
    3. reaper.AZ_DeleteAllRegion(0)
    4. ・現時点あるリージョンすべてを削除
    5. itemList = reaper.AZ_GetSelectedMediaItemList(0)
    6. ・選択メディアのアイテムを配列取得
    7. color = reaper.AZ_GetRandomColor()
    8. ・ランダムで色を取得
    9. --Region setting
      
      for i, item in pairs(itemList) do
    10. ・選択波形分、処理を行う
    11.     startPos = reaper.AZ_GetMediaItemStartTimeSeconds(item)
    12. ・メディアの開始位置を取得
    13.     endPos = reaper.AZ_GetMediaItemEndTime(item)
    14. ・メディアの終了位置を取得
    15.     name = reaper.AZ_GetMediaItemName(item)
    16. ・メディアの名前を取得
    17.     reaper.AZ_AddRegionMarker(0, startPos, endPos, name, 0, color)
    18. ・取得情報でメディアごとのリージョンを設定
    19. end
    20. --render setting
      
      path = reaper.AZ_SetProjectPathFolder("Rec", 3)
    21. ・プロジェクトファイルに書き出し先のフォルダを設定
    22. render = {
      
          OutputDir = path,
      
          Channels = 1,
      
          FileName = "$region",
      
          RenderingRangeType = 5,
      
      }
    23. ・レンダリングの設定を行う
    24. --render
      
      fileList = reaper.AZ_RenderToAudioFile(0, render)
    25. ・レンダリングを実行してパス情報を取得
    26. if reaper.AZ_Wwise_Connect("127.0.0.1",  8080) then
    27. ・Wwiseへ接続
    28.    parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"
    29. ・ワークユニットを作りたい親のパスを設定
    30.    workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath,  "PL0000", true)
    31. ・PL0000のワークユニットを生成
    32.    mixer = reaper.AZ_Wwise_CreateActorMixer(workunit["Path"], "pl0000", true)
    33. ・pl0000のアクターミキサーを生成
    34.    container = reaper.AZ_Wwise_CreateContainer(mixer["ID"], reaper.AZ_Wwise_ContainerType_Blend(), "pl0000_az", true)
    35. ・pl0000_azのブレンドコンテナを生成
    36.    for i, filePath in pairs(fileList) do
    37. ・Reaperで書き出したファイルごとに実行
    38.        fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]
    39. ・ファイル名を取得
    40.        wwiseObj = reaper.AZ_Wwise_CreateSoundSFX(container["ID"], filePath, fileName, "PL0000", true)
    41. ・ファイル名と同名のサウンドSFXオブジェクトを作成
    42.    end
    43.    parentPath = "\\Events"
    44. ・Event生成用の親パスを設定
    45.    workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath,  "PL0000", true)
    46. ・PL0000ワークユニットを生成
    47.    reaper.AZ_Wwise_DeleteObject(workunit["Path"] .. "\\" .. container["Name"])
    48. ・同名のイベントがあれば削除する
    49.    event = reaper.AZ_Wwise_CreateEvent(workunit["ID"], container["Name"], 2, container["ID"])
    50. ・ワークユニットの以下にEventを生成してブレンドコンテナのStopアクションを設定
    51.    reaper.AZ_Wwise_AddActionToEvent(event["ID"], 1, container["ID"])
    52. ・追加したイベントにブレンドコンテナのPlayアクションを追加
    53.    parentPath = "\\SoundBanks\\Default Work Unit"
    54. ・サウンドバンクのパスを設定
    55.    soundBank = reaper.AZ_Wwise_CreateObject(parentPath, "AZ_Bank", "SoundBank", true)
    56. ・[AZ_Bank]のバンクを生成
    57.    reaper.AZ_Wwise_AddObjectToSoundBank(soundBank["ID"], workunit["ID"])
    58. ・バンクにイベントの親ワークユニットを追加
    59.    reaper.AZ_Wwise_GenerateSoundBank({soundBank["Name"]}, {"Windows"}, {"Japanese"})
    60. ・サウンドバンクを生成
    61.    reaper.AZ_Wwise_Disconnect()
    62. ・Wwiseから切断
    63. end

    実行画面

  • AZSTOKE_Wwise_RandomContainer_RandomValue_1ランダムコンテナの作成とランダム値の設定の自動化

    実行前の準備

    書き出ししたいファイルをReaperプロジェクト内に並べておく

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    containerParentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"
    
    bankParentPath = "\\SoundBanks\\Default Work Unit"
    
    eventParentPath = "\\Events\\Default Work Unit"
    
    
    --render setting
    
    path = reaper.AZ_SetProjectPathFolder("Rec", 3)
    
    render = {
    
        OutputDir = path,
    
        Channels = 1,
    
        FileName = "$region",
    
        RenderingRangeType = 5,
    
        SamplingRate = 48000,
    
    }
    
    
    --render
    
    fileList = reaper.AZ_RenderToAudioFile(0, render)
    
    
    if reaper.AZ_Wwise_Connect("127.0.0.1",  8080) then
    
    
       -- Create RandomContainer
    
       container = reaper.AZ_Wwise_CreateContainer(containerParentPath, reaper.AZ_Wwise_ContainerType_Random() ,"AZ_se_exp", true)
    
    
       reaper.AZ_Wwise_SetProperty(container["ID"], "RandomAvoidRepeating", true)
    
       reaper.AZ_Wwise_SetProperty(container["ID"], "NormalOrShuffle", 0)
    
    
       if #fileList >= 4 then
    
           reaper.AZ_Wwise_SetProperty(container["ID"], "RandomAvoidRepeatingCount", #fileList - 1)
    
       else
    
           reaper.AZ_Wwise_SetProperty(container["ID"], "RandomAvoidRepeatingCount", 1)
    
       end
    
    
       -- Set Random
    
       reaper.AZ_Wwise_SetRandomizer(container["ID"], "Volume", true, -2.5, 1.5)
    
       reaper.AZ_Wwise_SetRandomizer(container["ID"], "Pitch", true, -0.4, 0.6)
    
       reaper.AZ_Wwise_SetRandomizer(container["ID"], "Highpass", true, 0, 20)
    
       reaper.AZ_Wwise_SetRandomizer(container["ID"], "Lowpass", true, 0, 20)
    
    
       for i, filePath in pairs(fileList) do
    
           fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]
    
           sound = reaper.AZ_Wwise_CreateSoundSFX(container["ID"], filePath, fileName, "AZ_se", true)
    
       end
    
    
       -- Clear Soundbank
    
       soundBank = reaper.AZ_Wwise_CreateObject(bankParentPath, "AZ_Bank", "SoundBank", true)
    
    
       reaper.AZ_Wwise_RemoveObjectFromSoundBank(soundBank["ID"], eventParentPath .. "\\" .. container["Name"])
    
    
       -- Create Event
    
       reaper.AZ_Wwise_DeleteObject(eventParentPath .. "\\" .. container["Name"])
    
    
       event = reaper.AZ_Wwise_CreateEvent(eventParentPath, container["Name"], 0)
    
    
       reaper.AZ_Wwise_AddActionToEvent(event["ID"], 2, container["ID"])
    
    
       reaper.AZ_Wwise_AddActionToEvent(event["ID"], 1, container["ID"])
    
    
       -- Set Soundbank
    
       reaper.AZ_Wwise_AddObjectToSoundBank(soundBank["ID"], event["Path"])
    
    
       reaper.AZ_Wwise_SaveProject()
    
    
       reaper.AZ_Wwise_Disconnect()
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. containerParentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"
      
      bankParentPath = "\\SoundBanks\\Default Work Unit"
      
      eventParentPath = "\\Events\\Default Work Unit"
    3. ・Wwise上でオブジェクトを作成するパスを指定
    4. --render setting
      
      path = reaper.AZ_SetProjectPathFolder("Rec", 3)
    5. ・プロジェクトファイルに書き出し先のフォルダを設定
    6. render = {
      
          OutputDir = path,
      
          Channels = 1,
      
          FileName = "$region",
      
          RenderingRangeType = 5,
      
          SamplingRate = 48000,
      
      }
    7. ・レンダリングの設定を行う
    8. --render
      
      fileList = reaper.AZ_RenderToAudioFile(0, render)
    9. ・レンダリングを実行してパス情報を取得
    10. if reaper.AZ_Wwise_Connect("127.0.0.1",  8080) then
    11. ・Wwiseへ接続
    12.    container = reaper.AZ_Wwise_CreateContainer(containerParentPath, reaper.AZ_Wwise_ContainerType_Random() ,"AZ_se_exp", true)
    13. ・AZ_se_expのランダムコンテナを生成
    14.    reaper.AZ_Wwise_SetProperty(container["ID"], "RandomAvoidRepeating", true)
    15. ・ランダムコンテナの「Avoid Repeating last」を有効化する
    16.    reaper.AZ_Wwise_SetProperty(container["ID"], "NormalOrShuffle", 0)
    17. ・ランダムコンテナの「Play Type」を「Shuffle」にする
    18.    if #fileList >= 4 then
      
             reaper.AZ_Wwise_SetProperty(container["ID"], "RandomAvoidRepeatingCount", #fileList - 1)
      
         else
      
             reaper.AZ_Wwise_SetProperty(container["ID"], "RandomAvoidRepeatingCount", 1)
      
         end
    19. ・ランダムコンテナの「Avoid Repeating last」の値を設定する  挿入する音声の数が4以上の場合は{音声数 - 1}の値にする。  音声の数が3以下の場合は1にする
    20.    reaper.AZ_Wwise_SetRandomizer(container["ID"], "Volume", true, -2.5, 1.5)
      
         reaper.AZ_Wwise_SetRandomizer(container["ID"], "Pitch", true, -0.4, 0.6)
      
         reaper.AZ_Wwise_SetRandomizer(container["ID"], "Highpass", true, 0, 20)
      
         reaper.AZ_Wwise_SetRandomizer(container["ID"], "Lowpass", true, 0, 20)
    21. ・ランダムコンテナの「Volume」、「Pitch」、「High-pass filter」、「Low-pass filter」にランダム量を設定する
    22.    for i, filePath in pairs(fileList) do
    23. ・Reaperで書き出したファイルごとに実行
    24.        fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]
    25. ・ファイル名を取得
    26.        sound = reaper.AZ_Wwise_CreateSoundSFX(container["ID"], filePath, fileName, "AZ_se", true)
    27. ・ファイル名と同名のサウンドSFXオブジェクトを作成
    28.    end
    29.    soundBank = reaper.AZ_Wwise_CreateObject(bankParentPath, "AZ_Bank", "SoundBank", true)
    30. ・[AZ_Bank]のバンクを生成
    31.    reaper.AZ_Wwise_RemoveObjectFromSoundBank(soundBank["ID"], eventParentPath .. "\\" .. container["Name"])
    32. ・これから作成するイベントと同名のイベントをサウンドバンクから削除しておく
    33.    reaper.AZ_Wwise_DeleteObject(eventParentPath .. "\\" .. container["Name"])
    34. ・同名のイベントがあれば削除する
    35.    event = reaper.AZ_Wwise_CreateEvent(eventParentPath, container["Name"], 0)
    36. ・ワークユニットの以下にEventを生成する
    37.    reaper.AZ_Wwise_AddActionToEvent(event["ID"], 2, container["ID"])
    38.    reaper.AZ_Wwise_AddActionToEvent(event["ID"], 1, container["ID"])
    39. ・追加したイベントにランダムコンテナのStopアクションとPlayアクションを追加
    40.    parentPath = "\\SoundBanks\\Default Work Unit"
    41.    reaper.AZ_Wwise_AddObjectToSoundBank(soundBank["ID"], event["Path"])
    42. ・バンクにイベントの親ワークユニットを追加
    43.    reaper.AZ_Wwise_SaveProject()
    44. ・プロジェクトを保存
    45.    reaper.AZ_Wwise_Disconnect()
    46. ・Wwiseから切断
    47. end

    実行画面

  • AZSTOKE_Wwise_CreateFromTemplete_1オブジェクトの構成をテンプレートから作成

    実行前の準備

    書き出ししたいファイルをReaperプロジェクト内に並べておく

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    function Main()
    
    
        retval, inputList = reaper.AZ_GetUserInputList("Character Info", 1, "Character Name", "")
    
        if retval == false then
    
            return
    
        end
    
    
        characterName = inputList[1]
    
    
        reaper.AZ_DeleteAllRegion(0)
    
    
        itemList = reaper.AZ_GetSelectedMediaItemList(0)
    
        color = reaper.AZ_GetRandomColor()
    
    
        --Region setting
    
        for i, item in pairs(itemList) do
    
            startPos = reaper.AZ_GetMediaItemStartTimeSeconds(item)
    
            endPos = reaper.AZ_GetMediaItemEndTime(item)
    
            name = reaper.AZ_GetMediaItemName(item)
    
            reaper.AZ_AddRegionMarker(0, startPos, endPos, name, 0, color)
    
        end
    
    
        --render setting
    
        path = reaper.AZ_SetProjectPathFolder("Rec", 3)
    
        render = {
    
            OutputDir = path,
    
            Channels = 1,
    
            FileName = "$region",
    
            RenderingRangeType = 5,
    
        }
    
    
        --render
    
        fileList = reaper.AZ_RenderToAudioFile(0, render)
    
    
        -- Wwise
    
        if reaper.AZ_Wwise_Connect("127.0.0.1",  8080) == false then return end
    
    
        -- Acter-Mixer Hierarchy
    
        rootPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"
    
        characterPath = rootPath .. "\\Characters"
    
    
        workunit = reaper.AZ_Wwise_CreateWorkUnit(characterPath,  characterName, true)
    
    
        templetePath = rootPath .. "\\Templates\\AZ_vo_tmp"
    
        mixer = reaper.AZ_Wwise_CopyObject(templetePath, workunit["Path"], characterName, true)
    
    
        -- Events
    
        rootPath = "\\Events\\Default Work Unit"
    
        characterPath = rootPath .. "\\Characters"
    
    
        workunit = reaper.AZ_Wwise_CreateWorkUnit(characterPath,  characterName, true)
    
    
        templetePath = rootPath .. "\\Templates\\AZ_vo_tmp"
    
        eventFolder = reaper.AZ_Wwise_CopyObject(templetePath, workunit["Path"], characterName, true)
    
    
        for i, filePath in pairs(fileList) do
    
            fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]
    
    
            voiceType = string.sub(fileName, 1, 3)
    
    
            type_MixerPath = ""
    
            type_EventFolderPath = ""
    
    
            if voiceType == "ACT" then
    
                type_MixerPath = mixer["Path"] .. "\\action"
    
                type_EventFolderPath = eventFolder["Path"] .. "\\battle"
    
            elseif voiceType == "DMG" then
    
                type_MixerPath = mixer["Path"] .. "\\damage"
    
                type_EventFolderPath = eventFolder["Path"] .. "\\battle"
    
            else
    
                type_MixerPath = mixer["Path"] .. "\\event"
    
                type_EventFolderPath = eventFolder["Path"] .. "\\senario"
    
            end
    
    
            sound = reaper.AZ_Wwise_CreateSoundSFX(type_MixerPath, filePath, fileName, characterName, true)
    
    
            reaper.AZ_Wwise_DeleteObject(type_EventFolderPath .. "\\" .. sound["Name"])
    
            event = reaper.AZ_Wwise_CreateEvent(type_EventFolderPath, sound["Name"], -1)
    
    
            reaper.AZ_Wwise_AddActionToEvent(event["ID"], 2, sound["ID"])
    
            reaper.AZ_Wwise_AddActionToEvent(event["ID"], 1, sound["ID"])
    
        end
    
    
        reaper.AZ_Wwise_SaveProject()
    
    
        reaper.AZ_Wwise_Disconnect()
    
    
        reaper.AZ_ShowMessageBox_Info("Success!", "", reaper.AZ_WindowType_OK())
    
    
        return
    
    
    end
    
    
    Main()

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. ・RIGDOCKSをインポート
    3. function Main()
    4. ・メインの処理を記載する関数を定義
    5.     retval, inputList = reaper.AZ_GetUserInputList("Character Info", 1, "Character Name", "")
    6. ・ユーザー空の入力ダイアログを表示して、キャラクター名を取得
    7.     if retval == false then
      
              return
      
          end
    8. ・ダイアログがキャンセルされた場合は処理を終了する
    9.     characterName = inputList[1]
    10. ・キャラクター名を変数に格納
    11.     reaper.AZ_DeleteAllRegion(0)
    12. ・プロジェクト内のリージョンを全て削除
    13.     itemList = reaper.AZ_GetSelectedMediaItemList(0)
    14. ・選択されているアイテムを取得
    15.     color = reaper.AZ_GetRandomColor()
    16. ・ランダムな色を取得
    17.     --Region setting
      
          for i, item in pairs(itemList) do
    18. ・選択されているアイテムごとに実行
    19.         startPos = reaper.AZ_GetMediaItemStartTimeSeconds(item)
      
              endPos = reaper.AZ_GetMediaItemEndTime(item)
      
              name = reaper.AZ_GetMediaItemName(item)
      
              reaper.AZ_AddRegionMarker(0, startPos, endPos, name, 0, color)
    20. ・アイテムの位置にリージョンを追加
    21.     end
    22.     --render setting
      
          path = reaper.AZ_SetProjectPathFolder("Rec", 3)
    23. ・プロジェクトファイルに書き出し先のフォルダを設定
    24.     render = {
      
              OutputDir = path,
      
              Channels = 1,
      
              FileName = "$region",
      
              RenderingRangeType = 5,
      
          }
    25. ・レンダリングの設定を作成
    26.     --render
      
          fileList = reaper.AZ_RenderToAudioFile(0, render)
    27. ・レンダリングを実行してパス情報を取得
    28.     -- Wwise
      
          if reaper.AZ_Wwise_Connect("127.0.0.1",  8080) == false then return end
    29. ・Wwiseへ接続 失敗時は処理を終了する
    30.     -- Acter-Mixer Hierarchy
      
          rootPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"
    31. ・Wwise上のActor-Mixer Hierarchyのパスを指定
    32.     characterPath = rootPath .. "\\Characters"
    33. ・キャラクター用のフォルダのパスを指定
    34.     workunit = reaper.AZ_Wwise_CreateWorkUnit(characterPath,  characterName, true)
    35. ・キャラクター名のワークユニットを生成
    36.     templetePath = rootPath .. "\\Templates\\AZ_vo_tmp"
    37. ・テンプレートのパスを指定
    38.     mixer = reaper.AZ_Wwise_CopyObject(templetePath, workunit["Path"], characterName, true)
    39. ・テンプレートをコピーしてキャラクター名のActor-Mixer Hierarchyを生成
    40.     -- Events
      
          rootPath = "\\Events\\Default Work Unit"
    41. ・Wwise上のEventsのパスを指定
    42.     characterPath = rootPath .. "\\Characters"
    43. ・キャラクター用のフォルダのパスを指定
    44.     workunit = reaper.AZ_Wwise_CreateWorkUnit(characterPath,  characterName, true)
    45. ・キャラクター名のワークユニットを生成
    46.     templetePath = rootPath .. "\\Templates\\AZ_vo_tmp"
    47. ・テンプレートのパスを指定
    48.     eventFolder = reaper.AZ_Wwise_CopyObject(templetePath, workunit["Path"], characterName, true)
    49. ・テンプレートをコピーしてキャラクター名のフォルダを生成
    50.     for i, filePath in pairs(fileList) do
    51. ・Reaperで書き出したファイルごとに実行
    52.         fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]
    53. ・ファイル名を取得
    54.         voiceType = string.sub(fileName, 1, 3)
    55. ・ファイル名の先頭3文字を取得して、ボイスの種類を判別する
    56.         type_MixerPath = ""
      
              type_EventFolderPath = ""
    57.         if voiceType == "ACT" then
      
                  type_MixerPath = mixer["Path"] .. "\\action"
      
                  type_EventFolderPath = eventFolder["Path"] .. "\\battle"
    58. ・アクションボイスの場合、アクションボイス用のパスを指定 elseif voiceType == "DMG" then type_MixerPath = mixer["Path"] .. "\\damage" type_EventFolderPath = eventFolder["Path"] .. "\\battle"
    59. ・ダメージボイスの場合、ダメージボイス用のパスを指定
    60.         else
      
                  type_MixerPath = mixer["Path"] .. "\\event"
      
                  type_EventFolderPath = eventFolder["Path"] .. "\\senario"
    61. ・それ以外のボイスの場合、イベント用ボイス用のパスを指定
    62.         end
    63.         sound = reaper.AZ_Wwise_CreateSoundSFX(type_MixerPath, filePath, fileName, characterName, true)
    64. ・ファイル名と同名のサウンドSFXオブジェクトを指定のパスに作成
    65.         reaper.AZ_Wwise_DeleteObject(type_EventFolderPath .. "\\" .. sound["Name"])
      
              event = reaper.AZ_Wwise_CreateEvent(type_EventFolderPath, sound["Name"], -1)
    66. ・同名のイベントがあれば削除してから、サウンドSFXと同名のイベントを指定のパスに生成
    67.         reaper.AZ_Wwise_AddActionToEvent(event["ID"], 2, sound["ID"])
      
              reaper.AZ_Wwise_AddActionToEvent(event["ID"], 1, sound["ID"])
    68. ・追加したイベントにサウンドSFXのStopアクションとPlayアクションを追加
    69.     end
    70.     reaper.AZ_Wwise_SaveProject()
    71. ・プロジェクトを保存
    72.     reaper.AZ_Wwise_Disconnect()
    73. ・Wwiseから切断
    74.     reaper.AZ_ShowMessageBox_Info("Success!", "", reaper.AZ_WindowType_OK())
    75. ・完了のメッセージを表示
    76.     return
    77. ・関数を終了
    78. end
    79. Main()
    80. ・Main関数を実行

    実行画面

Render3

  • AZSTOKE_Render_Savedata_1レンダー設定をテキスト保存してセーブデータを生成

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    fullPath = reaper.AZ_SetResoucePathFolder("AZData//Render",0)
    
    cancelType,inputList = reaper.AZ_GetUserInputList("SaveData",1,"FileName:","Render_a001")
    
    
    if cancelType then
    
       render = reaper.AZ_GetRenderSetting(0)
    
       jsonStr = reaper.AZ_Json_Serialize(render)
    
       reaper.AZ_WriteFile(fullPath,inputList[1]..".txt",jsonStr,0)
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    3. ・SilverとGOLDを利用可能にする設定
    4. fullPath = reaper.AZ_SetResoucePathFolder("AZData//Render",0)
    5. ・AZData//Renderというフォルダを生成してフルパス情報をfullPathを代入
    6. cancelType,inputList = reaper.AZ_GetUserInputList("SaveData",1,"FileName:","Render_a001")
    7. ・レンダーのファイル名をユーザーに指定してもらうためにテキストボックスを用意
    8. if cancelType then
      
         render = reaper.AZ_GetRenderSetting(0)
    9. ・現在のレンダー設定を取得してrenderへ保存
    10.    jsonStr = reaper.AZ_Json_Serialize(render)
    11. ・配列情報を文字列に変換してjsonStrに代入
    12.    reaper.AZ_WriteFile(fullPath,inputList[1]..".txt",jsonStr,0)
    13. ・リソースフォルダにレンダーデータをテキスト保存 end

    実行画面

  • AZSTOKE_Render_Write_1セーブデータを利用して波形のレンダリング

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    fullPath = reaper.AZ_SetResoucePathFolder("AZData//Render",0)
    
    jsonStr = reaper.AZ_ReadFile(fullPath,"Render_a001.txt")
    
    renderData = reaper.AZ_Json_Deserialize(jsonStr)
    
    
    reaper.AZ_RenderToAudioFile(0,renderData)

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
    2. require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    3. ・SilverとGoldのAPIを利用可能にする
    4. fullPath = reaper.AZ_SetResoucePathFolder("AZData//Render",0) ・リソースフォルダのAZData/Renderフォルダを確認してFullPathを取得
    5. jsonStr = reaper.AZ_ReadFile(fullPath,"Render_a001.txt") ・セーブデータ Render_a001.txtを読み込みしてjsonStrの文字列へ変換
    6. renderData = reaper.AZ_Json_Deserialize(jsonStr) ・jsonStrから配列に変換してセーブデータを利用できるように設定
    7. reaper.AZ_RenderToAudioFile(0,renderData) ・レンダー設定に合わせてオーディオファイルを書き出し

    実行画面

  • AZSTOKE_Recording_RenameAndRenderMediasメディアに名前を付けてフォルダ別に出力

    実行前の準備

    メディアをReaperプロジェクトに配置する

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    filenamePrefix = "AZREC_"
    
    
    function RenameMedias()
    
        soundNameList = {}
    
    
        trackCount = reaper.CountTracks(0)
    
    
        soundTrackList = {}
    
    
        for i = 0, trackCount - 1 do
    
            if reaper.AZ_GetTrackIdDepth(0, i) == 0 then
    
                table.insert(soundTrackList, reaper.GetTrack(0, i))
    
            end
    
        end
    
    
        for i, soundTrack in pairs(soundTrackList) do
    
    
            soundName = reaper.AZ_GetTrackItemName(soundTrack)
    
    
            mileTrackList, _ = reaper.AZ_GetTrackItemChildList(soundTrack)
    
    
            for j, mikeTrack in pairs(mileTrackList) do
    
                mikeName = reaper.AZ_GetTrackItemName(mikeTrack)
    
    
                mediaItemList = reaper.AZ_GetTrackMediaItemList(0, reaper.AZ_GetTrackItemIndex(mikeTrack))
    
    
                soundIndex = 1
    
    
                for k, media in pairs(mediaItemList) do
    
                    mediaName = reaper.AZ_GetMediaItemName(media)
    
    
                    mediaNemeComponent = reaper.AZ_GetStringSplitList(mediaName, "_")
    
    
                    if mediaNemeComponent[#mediaNemeComponent] ~= "ng" then
    
    
                        fileName = filenamePrefix.. soundName .. "_" .. mikeName .. "_" .. reaper.AZ_FormatNumDigit(soundIndex, 3)
    
    
                        reaper.AZ_SetMediaItemName(media, fileName)
    
    
                        table.insert(soundNameList, fileName)
    
    
                        soundIndex = soundIndex + 1
    
                    end
    
                end
    
    
            end
    
    
        end
    
    
        Msg("以下の音声ファイルを命名しました。")
    
        ShowObject(soundNameList)
    
    
    end
    
    
    function RenderMedias()
    
    
        outputPath = "$parent/$track/$item"
    
    
        reaper.AZ_SetAllMediaSelected(0, false)
    
    
        mediaItemList = reaper.AZ_GetMediaItemList(0)
    
    
        for i, media in pairs(mediaItemList) do
    
    
            fileName = reaper.AZ_GetMediaItemName(media)
    
    
            filenameComponent = reaper.AZ_GetStringSplitList(fileName, "_")
    
    
            if filenameComponent[#filenameComponent] ~= "ng" then
    
                reaper.SetMediaItemSelected(media, true)
    
    
            end
    
    
        end
    
    
        -- レンダリング設定
    
        renderingSetting = {
    
            RenderingSetting = 32,
    
            RenderingRangeType = 4,
    
            RenderingTarget = 3,
    
            OutputDir = "D:/Recording",
    
            FileName = outputPath,
    
            IsTail = false
    
        }
    
    
        filePathList = reaper.AZ_RenderToAudioFile(0, renderingSetting)
    
    
        Msg("以下のファイルを書き出しました。")
    
        ShowObject(filePathList)
    
    
    end
    
    
    RenameMedias()
    
    
    RenderMedias()

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. -- RIGDOCKSをインポート
    3. filenamePrefix = "AZREC_"
    4. -- ファイル名の先頭に付ける文字列
    5. function RenameMedias()
    6. -- メディアアイテムの名前を変更する関数
    7.     soundNameList = {}
    8.     trackCount = reaper.CountTracks(0)
    9. -- トラックの数を取得
    10.     soundTrackList = {}
    11.     for i = 0, trackCount - 1 do
    12. -- トラックの数だけループ
    13.         if reaper.AZ_GetTrackIdDepth(0, i) == 0 then
      
                  table.insert(soundTrackList, reaper.GetTrack(0, i))
      
              end
    14. -- トラックの深さが0のトラックをサウンドトラックとみなし、リストに追加 end
    15.     for i, soundTrack in pairs(soundTrackList) do
    16. -- サウンドトラックの数だけループ
    17.         soundName = reaper.AZ_GetTrackItemName(soundTrack)
    18. -- サウンドトラックの名前を取得
    19.         mileTrackList, _ = reaper.AZ_GetTrackItemChildList(soundTrack)
    20. -- サウンドトラックの子トラック(マイクトラック)を取得
    21.         for j, mikeTrack in pairs(mileTrackList) do
    22. -- マイクトラックの数だけループ
    23.             mikeName = reaper.AZ_GetTrackItemName(mikeTrack)
    24. -- マイクトラックの名前を取得
    25.             mediaItemList = reaper.AZ_GetTrackMediaItemList(0, reaper.AZ_GetTrackItemIndex(mikeTrack))
    26. -- マイクトラックにあるメディアアイテムを取得
    27.             soundIndex = 1
    28. -- ファイル名に付ける番号を1から始める
    29.             for k, media in pairs(mediaItemList) do
    30. -- メディアアイテムの数だけループ
    31.                 mediaName = reaper.AZ_GetMediaItemName(media)
    32. -- メディアアイテムの名前を取得
    33.                 mediaNemeComponent = reaper.AZ_GetStringSplitList(mediaName, "_")
    34. -- メディアアイテムの名前を"_"で分割してリストにする
    35.                 if mediaNemeComponent[#mediaNemeComponent] ~= "ng" then
    36. -- メディアアイテムの名前の最後の要素が"ng"でない場合、OKテイクと判断しファイル名を変更する
    37.                     fileName = filenamePrefix.. soundName .. "_" .. mikeName .. "_" .. reaper.AZ_FormatNumDigit(soundIndex, 3)
    38. -- ファイル名を"AZREC_" + サウンドトラックの名前 + "_" + マイクトラックの名前 + "_" + 3桁の番号 にする
    39.                     reaper.AZ_SetMediaItemName(media, fileName)
    40. -- メディアアイテムの名前を変更
    41.                     table.insert(soundNameList, fileName)
    42. -- 変更したファイル名をリストに追加
    43.                     soundIndex = soundIndex + 1
    44. -- ファイル名に付ける番号を1つ増やす
    45.                 end
      
                  end
    46.         end
    47.     end
    48. Msg("以下の音声ファイルを命名しました。") ShowObject(soundNameList)
    49. -- 変更したファイル名のリストを表示
    50. end
    51. function RenderMedias()
    52. -- メディアアイテムをレンダリングする関数
    53.     outputPath = "$parent/$track/$item"
    54. -- 書き出すファイルのパスを【親トラック名(サウンド名)】/【トラック名(マイク名)】/【アイテム名】にする
    55.     reaper.AZ_SetAllMediaSelected(0, false)
    56. -- 全てのメディアアイテムの選択を解除
    57.     mediaItemList = reaper.AZ_GetMediaItemList(0)
    58. -- プロジェクト内の全てのメディアアイテムを取得
    59.     for i, media in pairs(mediaItemList) do
    60. -- メディアアイテムの数だけループ
    61.         fileName = reaper.AZ_GetMediaItemName(media)
    62. -- メディアアイテムの名前を取得
    63.         filenameComponent = reaper.AZ_GetStringSplitList(fileName, "_")
    64. -- メディアアイテムの名前を"_"で分割してリストにする
    65.         if filenameComponent[#filenameComponent] ~= "ng" then
      
                  reaper.SetMediaItemSelected(media, true)
    66.         end
    67. -- メディアアイテムの名前の最後の要素が"ng"でない場合、OKテイクと判断し、そのメディアアイテムを選択する
    68.     end
    69. -- レンダリング設定 renderingSetting = { RenderingSetting = 32, RenderingRangeType = 4, RenderingTarget = 3, OutputDir = "D:/Recording", FileName = outputPath, IsTail = false }
    70. -- レンダリング設定の内容(出力先フォルダは「D:/Recording」)
    71.     filePathList = reaper.AZ_RenderToAudioFile(0, renderingSetting)
    72. -- レンダリングして書き出したファイルのパスのリストを取得
    73. Msg("以下のファイルを書き出しました。") ShowObject(filePathList)
    74. -- 書き出したファイルのパスのリストを表示
    75. end
    76. RenameMedias()
    77. -- OKテイクのメディアアイテムの名前を変更
    78. RenderMedias()
    79. -- OKテイクのメディアアイテムをレンダリング

    実行画面

Slack2

  • AZSTOKE_Slack_call_1HANDAUTOMER実行後にSlack通知

    実行前の準備

    メディアをインポートしたいトラックを生成して選択しておく インポートしたいメディアをフォルダに用意しておく SLACKのBotを作成しておく※SlackBot作成手順

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    
    token = "----"
    
    user = "----"
    
    
    canselType,inputList = reaper.AZ_GetUserInputList("wav",1,"path:","")
    
    if canselType then
    
       fileList = reaper.AZ_GetFilePathList(inputList[1],"wav")
    
    
       track = reaper.AZ_GetTrackItemSelect(0,0,1)
    
       startPos = 0
    
    
       for i, value in pairs(fileList) do
    
          item = reaper.AZ_InsertMediaTrackItemSecond(track,value,0,startPos)
    
          reaper.AZ_SetMediaItemHANDAUTOMER(item,2)
    
          endTime = reaper.AZ_GetMediaItemEndTime(item)
    
          startPos = endTime + 1
    
       end
    
    
       reaper.AZ_Slack_PostDirectMessage(token,user,"HANDAUTOMER作業が終了しました。",true,true)
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
    2. ・SilverのAPIを利用可能にする
    3. token = "----"
      
      user = "----"
    4. ・トークン情報とユーザー情報を設定  ※これは各Slackごとに設定が異なります。
    5. canselType,inputList = reaper.AZ_GetUserInputList("wav",1,"path:","") ・テキストボックスにパス情報を入力
    6. if canselType then ・テキストボックスでOKを押せば以下の処理を実行
    7. fileList = reaper.AZ_GetFilePathList(inputList[1],"wav") ・パス情報からwavデータのフルパス情報を取得
    8. track = reaper.AZ_GetTrackItemSelect(0,0,1) ・選択しているトラックの一番最初を取得 startPos = 0 ・メディアの設置秒を設定
    9. for i, value in pairs(fileList) do ・wavのファイル分ループ
    10. item = reaper.AZ_InsertMediaTrackItemSecond(track,value,0,startPos) ・指定トラックアイテムの指定位置にメディアをインサート
    11. reaper.AZ_SetMediaItemHANDAUTOMER(item,2) ・指定メディアにHANDAUTOMERを実行
    12. endTime = reaper.AZ_GetMediaItemEndTime(item) ・指定メディアの終了位置を取得
    13. startPos = endTime + 1 ・メディアの終了時間から1秒後に開始時間を設定 end
    14. reaper.AZ_Slack_PostDirectMessage(token,user,"HANDAUTOMER作業が終了しました。",true,true) ・終了したことをスラックに送信 end

    実行画面

  • AZSTOKE_Slack_Thread_2実行した波形名を子スレッドに自動記載

    実行前の準備

    メディアをインポートしたいトラックを生成して選択しておく インポートしたいメディアをフォルダに用意しておく SLACKのBotを作成しておく※SlackBot作成手順

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    
    token = "-----"
    
    user = "-----"
    
    
    canselType,inputList = reaper.AZ_GetUserInputList("wav",1,"path:","")
    
    if canselType then
    
       fileList = reaper.AZ_GetFilePathList(inputList[1],"wav")
    
    
       track = reaper.AZ_GetTrackItemSelect(0,0,1)
    
       startPos = 0
    
    
       message = "以下のファイルを実行しました。\n"
    
    
       for i, value in pairs(fileList) do
    
          item = reaper.AZ_InsertMediaTrackItemSecond(track,value,0,startPos)
    
          name = reaper.AZ_GetMediaItemName(item)
    
          message = message..name.."\n"
    
          reaper.AZ_SetMediaItemHANDAUTOMER(item,2)
    
          endTime = reaper.AZ_GetMediaItemEndTime(item)
    
          startPos = endTime + 1
    
       end
    
    
       post = reaper.AZ_Slack_PostDirectMessage(token,user,"HANDAUTOMER作業が終了しました。",true,true)
    
       t0 = os.clock()
    
       while os.clock() - t0 <= 5 do end
    
       postedMessage = reaper.AZ_Slack_ReplayMessage(token,post.Channel,post.ThreadTimeStamp, message)
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
    2. ・Silverを利用可能にする設定  ※Bronzeも必要ですがここに記載は必要ありません。
    3. token = "-----"
      
      user = "-----"
    4. ・これはご自身のトークンとユーザー名をご確認ください。
    5. canselType,inputList = reaper.AZ_GetUserInputList("wav",1,"path:","")
    6. ・テキストボックスの入力でパスを取得
    7. if canselType then
    8. ・テキストボックスでOKを押すと以下を実行
    9.    fileList = reaper.AZ_GetFilePathList(inputList[1],"wav")
    10. ・入力したパスからファイルのフルパスを出力
    11.    track = reaper.AZ_GetTrackItemSelect(0,0,1)
    12. ・選択しているトラックを取得
    13.    startPos = 0
    14. ・波形を置く開始位置を設定
    15. message = "以下のファイルを実行しました。\n"
    16. ・slackのメッセージに記載する文章を用意
    17.    for i, value in pairs(fileList) do
    18. ・ファイルパスからForでループ対応
    19.       item = reaper.AZ_InsertMediaTrackItemSecond(track,value,0,startPos)
    20. ・メディアを指定の位置にインサートしてメディアitemを出力
    21.       name = reaper.AZ_GetMediaItemName(item)
    22. ・itemの名前を出力
    23.       message = message..name.."\n"
    24. ・messageに名前を追加して改行する
    25.       reaper.AZ_SetMediaItemHANDAUTOMER(item,2)
    26. ・HANDAUTOMERを実行
    27.       endTime = reaper.AZ_GetMediaItemEndTime(item)
    28. ・メディアの終了時間を取得
    29.       startPos = endTime + 1
    30. ・次の開始時間を取得
    31.    end
    32. post = reaper.AZ_Slack_PostDirectMessage(token,user,"HANDAUTOMER作業が終了しました。",true,true)
    33. ・親のSlackPosを設定 t0 = os.clock() while os.clock() - t0 <= 5 do end
    34. ・親スレッドが生まれるのを5秒待機
    35.    postedMessage = reaper.AZ_Slack_ReplayMessage(token,post.Channel,post.ThreadTimeStamp, message)
    36. ・親のポストにスレッドでMessageを送信 end

    実行画面

SVN2

  • AZSTOKE_SVN_Revision_Insert_1指定リビジョンのファイルを取得してインサート自動化

    実行前の準備

    SVNで取得したいリビジョン番号を用意

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_GOLD")
    
    
    url =  "---URL---" -- svnリポジトリへのurl
    
    toDir = "F:\\RIGDOCKS\\File"
    
    revisioln = 10
    
    fileList = reaper.AZ_SVN_Export_CommitOnly(url, toDir, reaper.AZ_FileWriteMode_Overwrite(), revisioln)
    
    
    setTime = 0
    
    
    for i, value in pairs(fileList) do
    
        item = reaper.AZ_InsertMediaTrackIdSecond(0,1,value,0,setTime)
    
        endTime = reaper.AZ_GetMediaItemEndTime(item)
    
        setTime = endTime + 1
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_GOLD")
    2. ・GOLDを利用可能にする
    3. url = "---URL---"
    4. ・自身のSVNのリポジトリURLを記載
    5. toDir = "F:\\RIGDOCKS\\File"
    6. ・指定リビジョンのファイルをコピーする先
    7. revisioln = 10
    8. ・指定リビジョン番号
    9. fileList = reaper.AZ_SVN_Export_CommitOnly(url, toDir, reaper.AZ_FileWriteMode_Overwrite(), revisioln)
    10. ・リビジョンを指定してコピーした後にそのファイルのパス情報を配列(fileList)で出力
    11. setTime = 0
    12. ・インサート時の開始位置(秒)
    13. for i, value in pairs(fileList) do
    14. ・配列分ループ対応
    15.     item = reaper.AZ_InsertMediaTrackIdSecond(0,1,value,0,setTime)
    16. ・パス情報をもとにプロジェクトにインサート
    17.     endTime = reaper.AZ_GetMediaItemEndTime(item)
    18. ・インサートしたメディアの最終地点を取得(秒)
    19.     setTime = endTime + 1
    20. ・最終地点からさらに1秒後に次のメディア開始地点を設定
    21. end

    実行画面

  • AZSTOKE_SVN_ImportToWwise_1音声ファイルをSVNから取得し、Wwiseにインポート

    実行前の準備

    取得したい音声ファイルが追加/変更されたリビジョンを控えておく

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    url = -- svnリポジトリへのurl
    
    toDir = "F:\\RIGDOCKS\\tmp"  -- 一時的にファイルを出力するフォルダ
    
    
    retval , inputList = reaper.AZ_GetUserInputList("", 1, "リビジョン", "")
    
    
    if retval then
    
    
      revisioln = tonumber(inputList[1])
    
    
      fileList = reaper.AZ_SVN_Export_CommitOnly(url, toDir, reaper.AZ_FileWriteMode_Overwrite(), revisioln)
    
    
      originalFilePathList = {}
    
    
      if reaper.AZ_Wwise_Connect("127.0.0.1", 8080) then
    
          containerPath = "\\Actor-Mixer Hierarchy\\AZ_Voice"
    
          eventFolderPath = "\\Events\\AZ_Voice"
    
    
          vf_men = reaper.AZ_Wwise_CreateVirtualFolder(containerPath, "men", true)
    
          vf_women = reaper.AZ_Wwise_CreateVirtualFolder(containerPath, "women", true)
    
    
          vf_ev_men = reaper.AZ_Wwise_CreateVirtualFolder(eventFolderPath, "men", true)
    
          vf_ev_women = reaper.AZ_Wwise_CreateVirtualFolder(eventFolderPath, "women", true)
    
    
          for i, filePath in pairs(fileList) do
    
             fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]
    
    
             voice = nil
    
    
             if string.sub(fileName, 7, 9) == "men" then
    
    
               voice = reaper.AZ_Wwise_CreateSoundVoice(vf_men["Path"], filePath, fileName, "Japanese", "men", true)
    
               event = reaper.AZ_Wwise_CreateEvent(vf_ev_men["Path"], voice["Name"], 1, voice["ID"], true)
    
    
             elseif string.sub(fileName, 7, 11) == "women" then
    
    
                voice = reaper.AZ_Wwise_CreateSoundVoice(vf_women["Path"], filePath, fileName, "Japanese", "women", true)
    
                event = reaper.AZ_Wwise_CreateEvent(vf_ev_women["Path"], voice["Name"], 1, voice["ID"], true)
    
    
             end
    
    
             reaper.AZ_Wwise_SetProperty(voice["ID"], "IsStreamingEnabled", true)
    
    
             originalsPath = reaper.AZ_Wwise_GetProperty(voice["ID"], "sound:originalWavFilePath", "Japanese")
    
    
             table.insert(originalFilePathList, originalsPath)
    
    
          end
    
    
          reaper.AZ_Wwise_Disconnect()
    
      end
    
    
      for i, file in pairs(originalFilePathList) do
    
         reaper.AZ_SVN_Add(reaper.AZ_GetPathInfo(file)["ParentPath"], {".*\\..*"})
    
         reaper.AZ_SVN_Add(file)
    
    
      end
    
    
      reaper.AZ_ShowMessageBox_Info("処理が終了しました", "", reaper.AZ_WindowType_OK())
    
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. ・SILVER、GOLDをインポートする
    3. url = -- svnリポジトリへのurl toDir = "F:\\RIGDOCKS\\tmp" -- 一時的にファイルを出力するフォルダ
    4. ・必要な情報を設定する
    5. retval , inputList = reaper.AZ_GetUserInputList("", 1, "リビジョン", "")
    6. if retval then
    7. ・指定のリビジョンを入力画面から取得する。取得できた場合のみ先に進む
    8.   revisioln = tonumber(inputList[1])
    9. ・リビジョン番号を数値型で取得する
    10.   fileList = reaper.AZ_SVN_Export_CommitOnly(url, toDir, reaper.AZ_FileWriteMode_Overwrite(), revisioln)
    11. ・指定リビジョンにて追加、更新されたファイルを一時フォルダに出力する
    12.   originalFilePathList = {}
    13. ・Wwiseにインポートしたファイルのパスを格納するための配列を用意しておく
    14.   if reaper.AZ_Wwise_Connect("127.0.0.1", 8080) then
    15. ・Wwiseに接続する
    16.       containerPath = "\\Actor-Mixer Hierarchy\\AZ_Voice"
      
            eventFolderPath = "\\Events\\AZ_Voice"
    17. ・サウンドオブジェクトとイベントの格納先パスを指定
    18.       vf_men = reaper.AZ_Wwise_CreateVirtualFolder(containerPath, "men", true)
      
            vf_women = reaper.AZ_Wwise_CreateVirtualFolder(containerPath, "women", true)
    19.       vf_ev_men = reaper.AZ_Wwise_CreateVirtualFolder(eventFolderPath, "men", true)
      
            vf_ev_women = reaper.AZ_Wwise_CreateVirtualFolder(eventFolderPath, "women", true)
    20. ・仮想フォルダを作成
    21.       for i, filePath in pairs(fileList) do
    22. ・一時フォルダに出力したファイルのパスごとに以下の処理を行う
    23.          fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]
    24. ・ファイルパスからファイル名のみを取得
    25.          voice = nil
    26.          if string.sub(fileName, 7, 9) == "men" then
    27.            voice = reaper.AZ_Wwise_CreateSoundVoice(vf_men["Path"], filePath, fileName, "Japanese", "men", true)
      
                 event = reaper.AZ_Wwise_CreateEvent(vf_ev_men["Path"], voice["Name"], 1, voice["ID"], true)
    28. ・ファイル名の7~9文字目が「men」の場合は「men」仮想フォルダの配下にサウンドボイスオブジェクトとイベントを作成する
    29.          elseif string.sub(fileName, 7, 11) == "women" then
    30.             voice = reaper.AZ_Wwise_CreateSoundVoice(vf_women["Path"], filePath, fileName, "Japanese", "women", true)
      
                  event = reaper.AZ_Wwise_CreateEvent(vf_ev_women["Path"], voice["Name"], 1, voice["ID"], true)
    31. ・ファイル名の7~11文字目が「women」の場合は「women」仮想フォルダの配下にサウンドボイスオブジェクトとイベントを作成する
    32.          end
    33.          reaper.AZ_Wwise_SetProperty(voice["ID"], "IsStreamingEnabled", true)
    34. ・作成したサウンドボイスオブジェクトの「Stream」にチェックを入れる
    35.          originalsPath = reaper.AZ_Wwise_GetProperty(voice["ID"], "sound:originalWavFilePath", "Japanese")
    36.          table.insert(originalFilePathList, originalsPath)
    37. ・Originalsフォルダ内にインポートされた音声ファイルのパスを取得し、配列に格納する
    38.       end
    39.       reaper.AZ_Wwise_Disconnect()
    40. ・Wwiseから切断する
    41.   end
    42.   for i, file in pairs(originalFilePathList) do
    43. ・Originalsフォルダ内にインポートされた音声ファイルのパスごとに以下の処理を行う
    44.      reaper.AZ_SVN_Add(reaper.AZ_GetPathInfo(file)["ParentPath"], {".*\\..*"})
    45. ・音声ファイルの親フォルダをSVNに追加する(フォルダ配下のファイルは除外する)
    46.      reaper.AZ_SVN_Add(file)
    47. ・音声ファイルをSVNを追加する
    48.   end
    49. reaper.AZ_ShowMessageBox_Info("処理が終了しました", "", reaper.AZ_WindowType_OK())
    50. ・処理が終了した旨のポップアップ表示を行う
    51. end

    実行画面

Perforce2

  • AZSTOKE_Perforce_latest_Insert_1最新リビジョンの指定フォルダから取得してインサート自動化

    実行前の準備

    トラックを2つ用意しておく

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    url = "p4v URL"
    
    userName = "p4vユーザー名"
    
    password = "p4vパスワード"
    
    
    workspace = "p4vワークスペース名"
    
    depotPath = "p4vフォルダパス"
    
    
    setTime = 0
    
    
    if reaper.AZ_P4_Connect(url, userName, password)  then
    
    
        fileList = reaper.AZ_P4_ExportAudioToProject(workspace, depotPath, "",  -1, "wav", true)
    
    
        for i, value in pairs(fileList) do
    
            item = reaper.AZ_InsertMediaTrackIdSecond(0,1,value,0,setTime)
    
            endTime = reaper.AZ_GetMediaItemEndTime(item)
    
            setTime = endTime + 1
    
        end
    
    
        reaper.AZ_P4_Disconnect()
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_GOLD")
    2. ・APIを利用できるようにする対応
    3. url = "p4vホストのURL" userName = "p4vユーザー名" password = "p4vパスワード"
    4. workspace = "p4vワークスペース名" depotPath = "p4v取得したい先のパス情報"
    5. ・必要情報を用意
    6. setTime = 0
    7. ・波形の開始セットタイミングを用意
    8. if reaper.AZ_P4_Connect(url, userName, password)  then
    9. ・Perforceにコネクト接続
    10.     fileList = reaper.AZ_P4_ExportAudioToProject(workspace, depotPath, "",  -1, "wav", true)
    11. ・最新リビジョンのファイルをプロジェクトにコピー 、フルパス情報を出力
    12.     for i, value in pairs(fileList) do
    13. ・フルパス情報をForでループ
    14.         item = reaper.AZ_InsertMediaTrackIdSecond(0,1,value,0,setTime)
    15. ・メディアをインサート対応
    16.         endTime = reaper.AZ_GetMediaItemEndTime(item)
    17. ・設置したメディアの終了時間を取得
    18.         setTime = endTime + 1
    19. ・次のメディアの開始位置を設定 end
    20.     reaper.AZ_P4_Disconnect()
    21. ・P4vをコネクト解除
    22. end

    実行画面

  • AZSTOKE_Perforce_latest_Insert_2不要ファイルを選別しながらPerforceで管理されたファイルをReaperにインポート

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    url = "p4v URL"
    
    userName = "p4vユーザー名"
    
    password = "p4vパスワード"
    
    
    workspace = "p4vワークスペース名"
    
    depotPath = "p4vフォルダパス"
    
    
    setTime = 0
    
    
    if reaper.AZ_P4_Connect(url, userName, password)  then
    
    
        fileList = reaper.AZ_P4_ExportAudioToProject(workspace, depotPath, "",  -1, "wav", true, {".*/unuse/.*", ".*_old\\..*"})
    
    
        for i, filePath in pairs(fileList) do
    
    
            parentDir = reaper.AZ_GetPathInfo(filePath)["ParentName"]
    
    
            track = reaper.AZ_InsertTrackSearchUniqueOnly(0, parentDir)
    
    
            item = reaper.AZ_InsertMediaTrackItemSecond(track, filePath, 0, setTime)
    
    
            endTime = reaper.AZ_GetMediaItemEndTime(item)
    
    
            setTime = endTime + 1
    
        end
    
    
        reaper.AZ_P4_Disconnect()
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. ・RIGDOCKSをインポート
    3. url = "p4v URL" userName = "p4vユーザー名" password = "p4vパスワード"
    4. workspace = "p4vワークスペース名" depotPath = "p4vフォルダパス"
    5. ・Perforceサーバーへの接続情報を記載
    6. setTime = 0
    7. ・メディアの挿入位置
    8. if reaper.AZ_P4_Connect(url, userName, password)  then
    9. ・Perforceサーバーに接続
    10.     fileList = reaper.AZ_P4_ExportAudioToProject(workspace, depotPath, "",  -1, "wav", true, {".*/unuse/.*", ".*_old\\..*"})
    11. ・最新状態のファイルのうち、以下の条件を満たすファイルをプロジェクトフォルダに出力し、そのパスを取得   ・wavファイル   ・「unuse」フォルダ内に無い   ・「_old.」という文字列を含まない
    12.     for i, filePath in pairs(fileList) do
    13. ・for文で各パスごとに処理を行う
    14.         parentDir = reaper.AZ_GetPathInfo(filePath)["ParentName"]
    15. ・ファイルパスの親フォルダ名を取得
    16.         track = reaper.AZ_InsertTrackSearchUniqueOnly(0, parentDir)
    17. ・親フォルダ名と同じ名前のトラックがReaper上にない場合のみ作成する
    18.         item = reaper.AZ_InsertMediaTrackItemSecond(track, filePath, 0, setTime)
    19. ・親フォルダ名と同じ名前のトラックにファイルを挿入
    20.         endTime = reaper.AZ_GetMediaItemEndTime(item)
    21.         setTime = endTime + 1
    22. ・挿入したファイルの終了位置を取得し、その1秒後を次のファイルの挿入位置とする
    23.     end
    24.     reaper.AZ_P4_Disconnect()
    25. ・各ファイルに対する処理の終了後、Perforceサーバーから切断する
    26. end

    実行画面

Transcription6

  • AZSTOKE_TRSC_OutputToProject文字起こし結果をメモアイテムに記載

    実行前の準備

    Reaperにボイスのメディアを並べる

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    
    function Transcription(track)
    
    
       trscTrack = reaper.AZ_InsertUniqueChildTrack(track, "Transcription")
    
    
       itemList = reaper.AZ_GetMediaItemListInTrackItem(track)
    
    
       -- モデルを読み込み
    
       ctx = reaper.AZ_TRSC_LoadModel()
    
    
       for i, item in pairs(itemList) do
    
    
          -- 文字起こし実行
    
          text = reaper.AZ_TRSC_FullForMediaItem(ctx, item, "ja")
    
    
          itemStart = reaper.AZ_GetMediaItemStartTimeSeconds(item)
    
          itemLength = reaper.AZ_GetMediaItemLength(item)
    
    
          reaper.AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text)
    
    
       end
    
    
       -- モデルを解放
    
       reaper.AZ_TRSC_ReleaseModel(ctx)
    
    
       reaper.AZ_ShowMessageBox_Info("文字起こしが終了しました", "", reaper.AZ_WindowType_OK())
    
    
    end
    
    
    function main()
    
    
       track = reaper.AZ_GetTrackItemSelect(0, 0, 1)
    
    
       if track == nil then
    
           reaper.AZ_ShowMessageBox_Error("トラックが選択されていません。", "Error", reaper.AZ_WindowType_OK())
    
           return
    
       end
    
    
       -- リージョン作成
    
       itemList = reaper.AZ_GetMediaItemListInTrackItem(track)
    
       for i, item in pairs(itemList) do
    
           reaper.AZ_AddRegionMarkerMediaItem(item)
    
       end
    
    
       Transcription(track)
    
    end
    
    
    main()

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
    2. ・ RIGDOCKSをインポート
    3. function Transcription(track)
    4. ・ 文字起こしを実行する関数
    5.    trscTrack = reaper.AZ_InsertUniqueChildTrack(track, "Transcription")
    6. ・ 文字起こし結果を入れるトラックを作成
    7.    itemList = reaper.AZ_GetMediaItemListInTrackItem(track)
    8. ・ 文字起こしするアイテムのリストを取得
    9. -- モデルを読み込み ctx = reaper.AZ_TRSC_LoadModel()
    10. ・ 文字起こしモデルを読み込む
    11.    for i, item in pairs(itemList) do
    12. ・ アイテムの数だけループ
    13. -- 文字起こし実行 text = reaper.AZ_TRSC_FullForMediaItem(ctx, item, "ja")
    14. ・ アイテムに対して文字起こしを実行(日本語指定)
    15.       itemStart = reaper.AZ_GetMediaItemStartTimeSeconds(item)
    16. ・ アイテムの開始位置を取得
    17.       itemLength = reaper.AZ_GetMediaItemLength(item)
    18. ・ アイテムの長さを取得
    19.       reaper.AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text)
    20. ・ 文字起こし結果をNoteアイテムとしてトラックに挿入
    21.    end
    22. -- モデルを解放 reaper.AZ_TRSC_ReleaseModel(ctx)
    23. ・ 文字起こしモデルを解放
    24. reaper.AZ_ShowMessageBox_Info("文字起こしが終了しました", "", reaper.AZ_WindowType_OK())
    25. ・ 終了メッセージを表示
    26. end
    27. function main()
    28. ・ メイン関数
    29.    track = reaper.AZ_GetTrackItemSelect(0, 0, 1)
    30. ・ トラックが選択されているか確認
    31. if track == nil then reaper.AZ_ShowMessageBox_Error("トラックが選択されていません。", "Error", reaper.AZ_WindowType_OK()) return end
    32. ・ トラックが選択されていない場合、エラーメッセージを表示して終了
    33. -- リージョン作成 itemList = reaper.AZ_GetMediaItemListInTrackItem(track)
    34. ・ 文字起こしするアイテムのリストを取得
    35.    for i, item in pairs(itemList) do
      
             reaper.AZ_AddRegionMarkerMediaItem(item)
    36. ・ アイテムの位置にリージョンを作成
    37.    end
    38.    Transcription(track)
    39. ・ 文字起こし実行
    40. end
    41. main()
    42. ・ メイン関数を実行

    実行画面

  • AZSTOKE_TRSC_OutputToExcel文字起こし結果をExcelに記載

    実行前の準備

    Reaperにボイスのメディアを並べる 台本用のExcelファイルを用意する

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    function Transcription(track)
    
    
       trscTrack = reaper.AZ_InsertUniqueChildTrack(track, "Transcription")
    
    
       itemList = reaper.AZ_GetMediaItemListInTrackItem(track)
    
    
       -- モデルを読み込み
    
       ctx = reaper.AZ_TRSC_LoadModel()
    
    
       for i, item in pairs(itemList) do
    
    
          -- 文字起こし実行
    
          text = reaper.AZ_TRSC_FullForMediaItem(ctx, item, "ja")
    
    
          itemStart = reaper.AZ_GetMediaItemStartTimeSeconds(item)
    
          itemLength = reaper.AZ_GetMediaItemLength(item)
    
    
          reaper.AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text)
    
    
       end
    
    
       -- モデルを解放
    
       reaper.AZ_TRSC_ReleaseModel(ctx)
    
    
       reaper.AZ_ShowMessageBox_Info("文字起こしが終了しました", "", reaper.AZ_WindowType_OK())
    
    
       return trscTrack
    
    
    end
    
    
    C_id = "B"
    
    C_serif = "C"
    
    C_trsc = "D"
    
    R_header = 2
    
    
    tableRnage = "3:100,B"
    
    
    function OutputExcel(excelDocPath, voiceTrack)
    
    
       charID = reaper.AZ_GetTrackItemName(voiceTrack)
    
       childrenList, count = reaper.AZ_GetTrackItemChildList(voiceTrack)
    
    
       trscTrack = childrenList[1]
    
    
       itemList = reaper.AZ_GetMediaItemListInTrackItem(trscTrack)
    
    
       excelDoc = reaper.AZ_Excel_OpenFile(excelDocPath)
    
    
       if reaper.AZ_GetErrorCode() ~= 0 then
    
           reaper.AZ_ShowMessageBox_Error("Excelファイルの読み込みに失敗しました。", "Error", reaper.AZ_WindowType_OK())
    
           reaper.AZ_Excel_CloseFile(excelDoc)
    
           return
    
       end
    
    
       reaper.AZ_Excel_SaveDocument(excelDoc)
    
    
       if reaper.AZ_GetErrorCode() ~= 0 then
    
           reaper.AZ_ShowMessageBox_Error("Excelファイルを閉じてください。", "Error", reaper.AZ_WindowType_OK())
    
           reaper.AZ_Excel_CloseFile(excelDoc)
    
           return
    
       end
    
    
       worksheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, charID)
    
    
       if reaper.AZ_GetErrorCode() == 53 then
    
           reaper.AZ_ShowMessageBox_Error("シートが存在しません。", "Error", reaper.AZ_WindowType_OK())
    
           reaper.AZ_Excel_CloseFile(excelDoc)
    
           return
    
       end
    
    
       rows = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, voiceID, C_id, tableRnage)
    
    
       for i, noteItem in pairs(itemList) do
    
           region = reaper.AZ_GetRegionMarkerListMediaItem(noteItem)[1]
    
    
           voiceID = region["Name"]
    
    
           trsc = reaper.AZ_GetMediaItemNotes(noteItem)
    
    
           exists = false
    
           for j, row in pairs(rows["Cells"]) do
    
    
               if row[C_id] == voiceID then
    
                   reaper.AZ_Excel_SetCellValue(worksheet, C_trsc .. j, trsc)
    
                   Msg(voiceID .. "文字起こしをに書き込みました。")
    
                   exists = true
    
               end
    
           end
    
    
           if exists == false then
    
               Msg(voiceID .. "は存在しません。")
    
           end
    
       end
    
    
       reaper.AZ_Excel_SaveDocument(excelDoc)
    
       reaper.AZ_Excel_CloseFile(excelDoc)
    
    end
    
    
    function main()
    
    
       excelDocPath = "D:\\reapdock\\voice\\Scripts.xlsx"
    
    
       retval, inputList = reaper.AZ_GetUserInputList("", 1, "台本パス", excelDocPath)
    
       if retval == false then return end
    
    
       excelDocPath = inputList[1]
    
    
       voiceTrack = reaper.AZ_GetTrackItemSelect(0, 0, 1)
    
    
       if voiceTrack == nil then
    
           reaper.AZ_ShowMessageBox_Error("トラックが選択されていません。", "Error", reaper.AZ_WindowType_OK())
    
           return
    
       end
    
    
       -- リージョン作成
    
       itemList = reaper.AZ_GetMediaItemListInTrackItem(voiceTrack)
    
       for i, item in pairs(itemList) do
    
           reaper.AZ_AddRegionMarkerMediaItem(item)
    
       end
    
    
       Transcription(voiceTrack)
    
    
       OutputExcel(excelDocPath, voiceTrack)
    
    
    end
    
    
    main()V

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. ・ RIGDOCKSをインポート
    3. ******** AZSTOKE_TRSC_OutputToProject参照 ******
    4. function Transcription(track)
    5.     trscTrack = reaper.AZ_InsertUniqueChildTrack(track, "Transcription")
    6.     itemList = reaper.AZ_GetMediaItemListInTrackItem(track)
    7. -- モデルを読み込み ctx = reaper.AZ_TRSC_LoadModel()
    8.     for i, item in pairs(itemList) do
    9. -- 文字起こし実行 text = reaper.AZ_TRSC_FullForMediaItem(ctx, item, "ja")
    10.        itemStart = reaper.AZ_GetMediaItemStartTimeSeconds(item)
      
             itemLength = reaper.AZ_GetMediaItemLength(item)
    11.        reaper.AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text)
    12.     end
    13. -- モデルを解放 reaper.AZ_TRSC_ReleaseModel(ctx)
    14. reaper.AZ_ShowMessageBox_Info("文字起こしが終了しました", "", reaper.AZ_WindowType_OK())
    15.     return trscTrack
    16. end
    17. ******** AZSTOKE_TRSC_OutputToProject参照 ここまで ******
    18. C_id = "B"
      
      C_serif = "C"
      
      C_trsc = "D"
    19. ・ Excelの列を定義
    20. R_header = 2
    21. ・ Excelのヘッダー行を定義
    22. tableRnage = "3:100,B"
    23. ・ Excelの検索範囲を定義(3行目から100行目までのB列)
    24. function OutputExcel(excelDocPath, voiceTrack)
    25. ・ Excelに文字起こし結果を出力する関数
    26.     scriptTable = {}
    27. ・ 台本のテーブルを初期化
    28.     charID = reaper.AZ_GetTrackItemName(voiceTrack)
    29. ・ トラックの名前をキャラクターIDとして取得
    30.     childrenList, count = reaper.AZ_GetTrackItemChildList(voiceTrack)
    31.     trscTrack = childrenList[1]
    32. ・ 文字起こし結果が入っている子トラックを取得
    33.     itemList = reaper.AZ_GetMediaItemListInTrackItem(trscTrack)
    34. ・ 文字起こし結果のアイテムリストを取得
    35.     excelDoc = reaper.AZ_Excel_OpenFile(excelDocPath)
    36. ・ Excelファイルを開く
    37. if reaper.AZ_GetErrorCode() ~= 0 then reaper.AZ_ShowMessageBox_Error("Excelファイルの読み込みに失敗しました。", "Error", reaper.AZ_WindowType_OK()) reaper.AZ_Excel_CloseFile(excelDoc) return end
    38. ・ Excelファイルが開けなかった場合はエラーメッセージを表示して終了
    39.     reaper.AZ_Excel_SaveDocument(excelDoc)
    40. if reaper.AZ_GetErrorCode() ~= 0 then reaper.AZ_ShowMessageBox_Error("Excelファイルを閉じてください。", "Error", reaper.AZ_WindowType_OK()) reaper.AZ_Excel_CloseFile(excelDoc) return end
    41. ・ Excelファイルが保存できない状態の場合はエラーメッセージを表示して終了
    42.     worksheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, charID)
    43. ・ キャラクターIDと同じ名前のシートを開く
    44. if reaper.AZ_GetErrorCode() == 53 then reaper.AZ_ShowMessageBox_Error("シートが存在しません。", "Error", reaper.AZ_WindowType_OK()) reaper.AZ_Excel_CloseFile(excelDoc) return end
    45. ・ シートが存在しない場合はエラーメッセージを表示して終了
    46.     rows = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, voiceID, C_id, tableRnage)
    47. ・ Excelのシートから、キャラクターIDと同じ値が入っている行を検索
    48.     for i, noteItem in pairs(itemList) do
    49. ・ 文字起こし結果のアイテムリストをループ
    50.         region = reaper.AZ_GetRegionMarkerListMediaItem(noteItem)[1]
    51.         voiceID = region["Name"]
    52. ・ アイテムに付いているリージョンの名前を取得(これがセリフIDになる想定)
    53.         trsc = reaper.AZ_GetMediaItemNotes(noteItem)
    54. ・ アイテムのノートから文字起こし結果を取得
    55.         exists = false
    56. ・ ExcelのシートにセリフIDが存在するかどうかのフラグ
    57.         for j, row in pairs(rows["Cells"]) do
    58.             if row[C_id] == voiceID then
    59. ・ Excelのシートからセリフを取得
    60.                 reaper.AZ_Excel_SetCellValue(worksheet, C_trsc .. j, trsc)
    61. ・ Excelのシートに文字起こし結果を書き込む
    62. Msg(voiceID .. "文字起こしを書き込みました。")
    63. ・ 書き込み完了のメッセージを表示
    64.                 exists = true
    65. ・ セリフIDが存在するフラグを立てる end end
    66. if exists == false then Msg(voiceID .. "は存在しません。") end
    67. ・ セリフIDが存在しない場合はメッセージを表示 end
    68.     reaper.AZ_Excel_SaveDocument(excelDoc)
      
          reaper.AZ_Excel_CloseFile(excelDoc)
    69. ・ Excelファイルを保存して閉じる
    70. end
    71. function main()
    72. ******** AZSTOKE_TRSC_OutputToProject参照 ******
    73.     excelDocPath = "D:\\reapdock\\voice\\Scripts.xlsx"
    74. retval, inputList = reaper.AZ_GetUserInputList("", 1, "台本パス", excelDocPath) if retval == false then return end
    75.     excelDocPath = inputList[1]
    76.     voiceTrack = reaper.AZ_GetTrackItemSelect(0, 0, 1)
    77. if voiceTrack == nil then reaper.AZ_ShowMessageBox_Error("トラックが選択されていません。", "Error", reaper.AZ_WindowType_OK()) return end
    78. -- リージョン作成 itemList = reaper.AZ_GetMediaItemListInTrackItem(voiceTrack) for i, item in pairs(itemList) do reaper.AZ_AddRegionMarkerMediaItem(item) end
    79.     Transcription(voiceTrack)
    80. ******** AZSTOKE_TRSC_OutputToProject参照 ここまで ******
    81.     scriptTable = OutputExcel(excelDocPath, voiceTrack)
    82. ・ 文字起こし結果をExcelに出力して、台本のテーブルを取得
    83. end
    84. main()

    実行画面

  • AZSTOKE_TRSC_CheckSimilarity文字起こし結果を台本と比較

    実行前の準備

    Reaperにボイスのメディアを並べる 台本用のExcelファイルを用意する

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    function Transcription(track)
    
    
        trscTrack = reaper.AZ_InsertUniqueChildTrack(track, "Transcription")
    
    
        itemList = reaper.AZ_GetMediaItemListInTrackItem(track)
    
    
        -- モデルを読み込み
    
        ctx = reaper.AZ_TRSC_LoadModel()
    
    
        for i, item in pairs(itemList) do
    
    
           -- 文字起こし実行
    
           text = reaper.AZ_TRSC_FullForMediaItem(ctx, item, "ja")
    
    
           itemStart = reaper.AZ_GetMediaItemStartTimeSeconds(item)
    
           itemLength = reaper.AZ_GetMediaItemLength(item)
    
    
           reaper.AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text)
    
    
        end
    
    
        -- モデルを解放
    
        reaper.AZ_TRSC_ReleaseModel(ctx)
    
    
        reaper.AZ_ShowMessageBox_Info("文字起こしが終了しました", "", reaper.AZ_WindowType_OK())
    
    
        return trscTrack
    
    
    end
    
    
    C_id = "B"
    
    C_serif = "C"
    
    C_trsc = "D"
    
    C_similarity = "E"
    
    R_header = 2
    
    
    tableRnage = "3:100,B"
    
    
    function OutputExcel(excelDocPath, voiceTrack)
    
    
        scriptTable = {}
    
    
        charID = reaper.AZ_GetTrackItemName(voiceTrack)
    
        childrenList, count = reaper.AZ_GetTrackItemChildList(voiceTrack)
    
    
        trscTrack = childrenList[1]
    
    
        itemList = reaper.AZ_GetMediaItemListInTrackItem(trscTrack)
    
    
        excelDoc = reaper.AZ_Excel_OpenFile(excelDocPath)
    
    
        if reaper.AZ_GetErrorCode() ~= 0 then
    
            reaper.AZ_ShowMessageBox_Error("Excelファイルの読み込みに失敗しました。", "Error", reaper.AZ_WindowType_OK())
    
            reaper.AZ_Excel_CloseFile(excelDoc)
    
            return
    
        end
    
    
        reaper.AZ_Excel_SaveDocument(excelDoc)
    
    
        if reaper.AZ_GetErrorCode() ~= 0 then
    
            reaper.AZ_ShowMessageBox_Error("Excelファイルを閉じてください。", "Error", reaper.AZ_WindowType_OK())
    
            reaper.AZ_Excel_CloseFile(excelDoc)
    
            return
    
        end
    
    
        worksheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, charID)
    
    
        if reaper.AZ_GetErrorCode() == 53 then
    
            reaper.AZ_ShowMessageBox_Error("シートが存在しません。", "Error", reaper.AZ_WindowType_OK())
    
            reaper.AZ_Excel_CloseFile(excelDoc)
    
            return
    
        end
    
    
        rows = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, voiceID, C_id, tableRnage)
    
    
        for i, noteItem in pairs(itemList) do
    
            region = reaper.AZ_GetRegionMarkerListMediaItem(noteItem)[1]
    
    
            voiceID = region["Name"]
    
    
            trsc = reaper.AZ_GetMediaItemNotes(noteItem)
    
    
            exists = false
    
            for j, row in pairs(rows["Cells"]) do
    
    
                if row[C_id] == voiceID then
    
    
                    serif = reaper.AZ_Excel_GetCellValue(worksheet, C_serif .. j)
    
    
                    similarity = reaper.AZ_CalcStringSimilarity(trsc, serif)
    
    
                    reaper.AZ_Excel_SetCellValue(worksheet, C_trsc .. j, trsc)
    
                    reaper.AZ_Excel_SetCellValue(worksheet, C_similarity .. j, similarity)
    
    
                    Msg(voiceID .. "文字起こしを書き込みました。")
    
    
                    scriptItem = {
    
                        ID = voiceID,
    
                        NoteItem = noteItem,
    
                        Serif = serif,
    
                        Trsc = trsc,
    
                        Similarity = similarity
    
                    }
    
    
                    table.insert(scriptTable, scriptItem)
    
    
                    exists = true
    
                end
    
            end
    
    
            if exists == false then
    
                Msg(voiceID .. "は存在しません。")
    
            end
    
        end
    
    
        reaper.AZ_Excel_SaveDocument(excelDoc)
    
        reaper.AZ_Excel_CloseFile(excelDoc)
    
    
        return scriptTable
    
    end
    
    
    function CheckSimilarity(voiceTrack, scriptTable, threshold)
    
    
        errorVoiceList = {}
    
    
        mediaItemList = reaper.AZ_GetMediaItemListInTrackItem(voiceTrack)
    
    
        for i, voiceMedia in pairs(mediaItemList) do
    
            voiceID = reaper.AZ_GetMediaItemName(voiceMedia)
    
    
            for j, scriptItem in pairs(scriptTable) do
    
                if scriptItem["ID"] == voiceID then
    
    
                  if scriptItem["Similarity"] < threshold then
    
    
                      table.insert(errorVoiceList, voiceID)
    
    
                      region = reaper.AZ_GetRegionMarkerListMediaItem(voiceMedia)[1]
    
    
                      reaper.AZ_SetRegionMarkerColor(0, region["Index"], 255)
    
    
                  end
    
    
                end
    
            end
    
    
        end
    
    
        return errorVoiceList
    
    
    end
    
    
    function main()
    
    
        excelDocPath = "D:\\reapdock\\voice\\Scripts.xlsx"
    
        threshould = 80
    
    
        retval, inputList = reaper.AZ_GetUserInputList("", 2, "台本パス,台本一致許容度", excelDocPath.."," .. tostring(threshould))
    
        if retval == false then return end
    
    
        excelDocPath = inputList[1]
    
        threshould = tonumber(inputList[2])
    
    
        voiceTrack = reaper.AZ_GetTrackItemSelect(0, 0, 1)
    
    
        if voiceTrack == nil then
    
            reaper.AZ_ShowMessageBox_Error("トラックが選択されていません。", "Error", reaper.AZ_WindowType_OK())
    
            return
    
        end
    
    
        -- リージョン作成
    
        itemList = reaper.AZ_GetMediaItemListInTrackItem(voiceTrack)
    
        for i, item in pairs(itemList) do
    
            reaper.AZ_AddRegionMarkerMediaItem(item)
    
        end
    
    
        Transcription(voiceTrack)
    
    
        scriptTable = OutputExcel(excelDocPath, voiceTrack)
    
    
        if scriptTable == nil then
    
            Msg("Excelの書き込みに失敗しました。")
    
    
        elseif #scriptTable > 0 then
    
            errorVoiceList = CheckSimilarity(voiceTrack, scriptTable, threshould)
    
    
            Msg("以下のボイスが台本と一致していない可能性があります。")
    
            ShowObject(errorVoiceList)
    
    
        else
    
            Msg("台本と相違があるボイスはありませんでした。")
    
    
        end
    
    
    end
    
    
    main()

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. ******** AZSTOKE_TRSC_OutputToProject参照 ******
    3. function Transcription(track)
    4.     trscTrack = reaper.AZ_InsertUniqueChildTrack(track, "Transcription")
    5.     itemList = reaper.AZ_GetMediaItemListInTrackItem(track)
    6. -- モデルを読み込み ctx = reaper.AZ_TRSC_LoadModel()
    7.     for i, item in pairs(itemList) do
    8. -- 文字起こし実行 text = reaper.AZ_TRSC_FullForMediaItem(ctx, item, "ja")
    9.        itemStart = reaper.AZ_GetMediaItemStartTimeSeconds(item)
      
             itemLength = reaper.AZ_GetMediaItemLength(item)
    10.        reaper.AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text)
    11.     end
    12. -- モデルを解放 reaper.AZ_TRSC_ReleaseModel(ctx)
    13. reaper.AZ_ShowMessageBox_Info("文字起こしが終了しました", "", reaper.AZ_WindowType_OK())
    14.     return trscTrack
    15. end
    16. ******** AZSTOKE_TRSC_OutputToProject参照 ここまで ******
    17. ******** AZSTOKE_TRSC_OutputToExcel参照 ******
    18. C_id = "B"
      
      C_serif = "C"
      
      C_trsc = "D"
      
      C_similarity = "E"
      
      R_header = 2
    19. tableRnage = "3:100,B"
    20. function OutputExcel(excelDocPath, voiceTrack)
    21.     scriptTable = {}
    22.     charID = reaper.AZ_GetTrackItemName(voiceTrack)
      
          childrenList, count = reaper.AZ_GetTrackItemChildList(voiceTrack)
    23.     trscTrack = childrenList[1]
    24.     itemList = reaper.AZ_GetMediaItemListInTrackItem(trscTrack)
    25.     excelDoc = reaper.AZ_Excel_OpenFile(excelDocPath)
    26. if reaper.AZ_GetErrorCode() ~= 0 then reaper.AZ_ShowMessageBox_Error("Excelファイルの読み込みに失敗しました。", "Error", reaper.AZ_WindowType_OK()) reaper.AZ_Excel_CloseFile(excelDoc) return end
    27.     reaper.AZ_Excel_SaveDocument(excelDoc)
    28. if reaper.AZ_GetErrorCode() ~= 0 then reaper.AZ_ShowMessageBox_Error("Excelファイルを閉じてください。", "Error", reaper.AZ_WindowType_OK()) reaper.AZ_Excel_CloseFile(excelDoc) return end
    29.     worksheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, charID)
    30. if reaper.AZ_GetErrorCode() == 53 then reaper.AZ_ShowMessageBox_Error("シートが存在しません。", "Error", reaper.AZ_WindowType_OK()) reaper.AZ_Excel_CloseFile(excelDoc) return end
    31.     rows = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, voiceID, C_id, tableRnage)
    32.     for i, noteItem in pairs(itemList) do
      
              region = reaper.AZ_GetRegionMarkerListMediaItem(noteItem)[1]
    33.         voiceID = region["Name"]
    34.         trsc = reaper.AZ_GetMediaItemNotes(noteItem)
    35.         exists = false
      
              for j, row in pairs(rows["Cells"]) do
    36.             if row[C_id] == voiceID then
    37.                 serif = reaper.AZ_Excel_GetCellValue(worksheet, C_serif .. j)
    38.                 similarity = reaper.AZ_CalcStringSimilarity(trsc, serif)
    39. ・ 文字起こし結果と台詞の一致度を計算
    40.                 reaper.AZ_Excel_SetCellValue(worksheet, C_trsc .. j, trsc)
      
                      reaper.AZ_Excel_SetCellValue(worksheet, C_similarity .. j, similarity)
    41. ・ Excelのシートに一致度を書き込む
    42. ・ 書き込み完了のメッセージを表示
    43. Msg(voiceID .. "文字起こしを書き込みました。")
    44.                 scriptItem = {
      
                          ID = voiceID,
      
                          NoteItem = noteItem,
      
                          Serif = serif,
      
                          Trsc = trsc,
      
                          Similarity = similarity
      
                      }
    45. ・ 台本の行データを格納するアイテムを作成
    46.                 table.insert(scriptTable, scriptItem)
    47. ・ 台本のテーブルにアイテムを追加
    48.                 exists = true
      
                  end
      
              end
    49. if exists == false then Msg(voiceID .. "は存在しません。") end end
    50.     reaper.AZ_Excel_SaveDocument(excelDoc)
      
          reaper.AZ_Excel_CloseFile(excelDoc)
    51.     return scriptTable
      
      end
    52. ******** AZSTOKE_TRSC_OutputToExcel参照 ここまで******
    53. function CheckSimilarity(voiceTrack, scriptTable, threshold)
    54.     errorVoiceList = {}
    55. ・ 台本と一致していない可能性のあるボイスを格納するリスト
    56.     mediaItemList = reaper.AZ_GetMediaItemListInTrackItem(voiceTrack)
    57. ・ ボイストラックのアイテムのリストを取得
    58.     for i, voiceMedia in pairs(mediaItemList) do
      
              voiceID = reaper.AZ_GetMediaItemName(voiceMedia)
    59. ・ アイテムの名前をセリフIDとして取得
    60.         for j, scriptItem in pairs(scriptTable) do
      
                  if scriptItem["ID"] == voiceID then
    61. ・ 台本のテーブルからセリフIDが一致するアイテムを探す
    62.               if scriptItem["Similarity"] < threshold then
    63. ・ 一致度が閾値を下回っている場合
    64.                   table.insert(errorVoiceList, voiceID)
    65. ・ 一致していない可能性のあるボイスのリストにセリフIDを追加
    66.                   region = reaper.AZ_GetRegionMarkerListMediaItem(voiceMedia)[1]
    67. ・ アイテムに対応するリージョンを取得
    68.                   reaper.AZ_SetRegionMarkerColor(0, region["Index"], 255)
    69. ・ 一致していない可能性のあるボイスのリージョンの色を赤に変更
    70.               end
    71.             end
      
              end
    72.     end
    73.     return errorVoiceList
    74. ・ 一致していない可能性のあるボイスのリストを返す
    75. end
    76. function main()
    77.     excelDocPath = "D:\\reapdock\\voice\\Scripts.xlsx"
      
          threshould = 80
    78. retval, inputList = reaper.AZ_GetUserInputList("", 2, "台本パス,台本一致許容度", excelDocPath.."," .. tostring(threshould)) if retval == false then return end
    79.     excelDocPath = inputList[1]
      
          threshould = tonumber(inputList[2])
    80.     voiceTrack = reaper.AZ_GetTrackItemSelect(0, 0, 1)
    81. if voiceTrack == nil then reaper.AZ_ShowMessageBox_Error("トラックが選択されていません。", "Error", reaper.AZ_WindowType_OK()) return end
    82. -- リージョン作成 itemList = reaper.AZ_GetMediaItemListInTrackItem(voiceTrack) for i, item in pairs(itemList) do reaper.AZ_AddRegionMarkerMediaItem(item) end
    83.     Transcription(voiceTrack)
    84.     scriptTable = OutputExcel(excelDocPath, voiceTrack)
    85. if scriptTable == nil then Msg("Excelの書き込みに失敗しました。")
    86.     elseif #scriptTable > 0 then
      
              errorVoiceList = CheckSimilarity(voiceTrack, scriptTable, threshould)
    87. ・ 台本と一致していない可能性のあるボイスのリストを取得
    88. Msg("以下のボイスが台本と一致していない可能性があります。") ShowObject(errorVoiceList)
    89. ・ 一致していない可能性のあるボイスのリストを表示
    90. else Msg("台本と相違があるボイスはありませんでした。")
    91.     end
    92. end
    93. main()

    実行画面

  • AZSTOKE_TRSC_NoticeToSlack台本との比較結果をslackに通知

    実行前の準備

    Reaperにボイスのメディアを並べる 台本用のExcelファイルを用意する

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    function Transcription(track)
    
    
        trscTrack = reaper.AZ_InsertUniqueChildTrack(track, "Transcription")
    
    
        itemList = reaper.AZ_GetMediaItemListInTrackItem(track)
    
    
        -- モデルを読み込み
    
        ctx = reaper.AZ_TRSC_LoadModel()
    
    
        for i, item in pairs(itemList) do
    
    
           -- 文字起こし実行
    
           text = reaper.AZ_TRSC_FullForMediaItem(ctx, item, "ja")
    
    
           itemStart = reaper.AZ_GetMediaItemStartTimeSeconds(item)
    
           itemLength = reaper.AZ_GetMediaItemLength(item)
    
    
           reaper.AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text)
    
    
        end
    
    
        -- モデルを解放
    
        reaper.AZ_TRSC_ReleaseModel(ctx)
    
    
        reaper.AZ_ShowMessageBox_Info("文字起こしが終了しました", "", reaper.AZ_WindowType_OK())
    
    
        return trscTrack
    
    
    end
    
    
    C_id = "B"
    
    C_serif = "C"
    
    C_trsc = "D"
    
    C_similarity = "E"
    
    R_header = 2
    
    
    tableRnage = "3:100,B"
    
    
    function OutputExcel(excelDocPath, voiceTrack)
    
    
        scriptTable = {}
    
    
        charID = reaper.AZ_GetTrackItemName(voiceTrack)
    
        childrenList, count = reaper.AZ_GetTrackItemChildList(voiceTrack)
    
    
        trscTrack = childrenList[1]
    
    
        itemList = reaper.AZ_GetMediaItemListInTrackItem(trscTrack)
    
    
        excelDoc = reaper.AZ_Excel_OpenFile(excelDocPath)
    
    
        if reaper.AZ_GetErrorCode() ~= 0 then
    
            reaper.AZ_ShowMessageBox_Error("Excelファイルの読み込みに失敗しました。", "Error", reaper.AZ_WindowType_OK())
    
            reaper.AZ_Excel_CloseFile(excelDoc)
    
            return
    
        end
    
    
        reaper.AZ_Excel_SaveDocument(excelDoc)
    
    
        if reaper.AZ_GetErrorCode() ~= 0 then
    
            reaper.AZ_ShowMessageBox_Error("Excelファイルを閉じてください。", "Error", reaper.AZ_WindowType_OK())
    
            reaper.AZ_Excel_CloseFile(excelDoc)
    
            return
    
        end
    
    
        worksheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, charID)
    
    
        if reaper.AZ_GetErrorCode() == 53 then
    
            reaper.AZ_ShowMessageBox_Error("シートが存在しません。", "Error", reaper.AZ_WindowType_OK())
    
            reaper.AZ_Excel_CloseFile(excelDoc)
    
            return
    
        end
    
    
        rows = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, voiceID, C_id, tableRnage)
    
    
        for i, noteItem in pairs(itemList) do
    
            region = reaper.AZ_GetRegionMarkerListMediaItem(noteItem)[1]
    
    
            voiceID = region["Name"]
    
    
            trsc = reaper.AZ_GetMediaItemNotes(noteItem)
    
    
            exists = false
    
            for j, row in pairs(rows["Cells"]) do
    
    
                if row[C_id] == voiceID then
    
    
                    serif = reaper.AZ_Excel_GetCellValue(worksheet, C_serif .. j)
    
    
                    similarity = reaper.AZ_CalcStringSimilarity(trsc, serif)
    
    
                    reaper.AZ_Excel_SetCellValue(worksheet, C_trsc .. j, trsc)
    
                    reaper.AZ_Excel_SetCellValue(worksheet, C_similarity .. j, similarity)
    
    
                    Msg(voiceID .. "文字起こしを書き込みました。")
    
    
                    scriptItem = {
    
                        ID = voiceID,
    
                        NoteItem = noteItem,
    
                        Serif = serif,
    
                        Trsc = trsc,
    
                        Similarity = similarity
    
                    }
    
    
                    table.insert(scriptTable, scriptItem)
    
    
                    exists = true
    
                end
    
            end
    
    
            if exists == false then
    
                Msg(voiceID .. "は存在しません。")
    
            end
    
        end
    
    
        reaper.AZ_Excel_SaveDocument(excelDoc)
    
        reaper.AZ_Excel_CloseFile(excelDoc)
    
    
        return scriptTable
    
    end
    
    
    function CheckSimilarity(voiceTrack, scriptTable, threshold)
    
    
        errorVoiceList = {}
    
    
        mediaItemList = reaper.AZ_GetMediaItemListInTrackItem(voiceTrack)
    
    
        for i, voiceMedia in pairs(mediaItemList) do
    
            voiceID = reaper.AZ_GetMediaItemName(voiceMedia)
    
    
            for j, scriptItem in pairs(scriptTable) do
    
                if scriptItem["ID"] == voiceID then
    
    
                  if scriptItem["Similarity"] < threshold then
    
    
                      table.insert(errorVoiceList, voiceID)
    
    
                      region = reaper.AZ_GetRegionMarkerListMediaItem(voiceMedia)[1]
    
    
                      reaper.AZ_SetRegionMarkerColor(0, region["Index"], 255)
    
    
                  end
    
    
                end
    
            end
    
    
        end
    
    
        return errorVoiceList
    
    
    end
    
    
    function GetSlackUserData()
    
        slackDataPath = reaper.GetResourcePath() .. "\\AZData\\Slack"
    
    
        token = reaper.AZ_ReadFile(slackDataPath, "slackToken.txt")
    
    
        userName =  reaper.AZ_ReadFile(slackDataPath, "slackUser.txt")
    
    
        if userName == "" or token == "" then
    
            retval, obj = reaper.AZ_GetUserInputList("SlackInfo", 2, "slackトークン,通知先ユーザー", token..","..userName )
    
            token = obj[1]
    
            userName = obj[2]
    
            reaper.AZ_WriteFile(slackDataPath, "slackToken.txt", token, 0)
    
            reaper.AZ_WriteFile(slackDataPath, "slackUser.txt", userName, 0)
    
        else
    
            token = reaper.AZ_ReplaceSearchString(token, "\n", "")
    
            userName = reaper.AZ_ReplaceSearchString(userName, "\n", "")
    
        end
    
    
        return token, userName
    
    end
    
    
    function SendSlackMessage(token, userName, caption, body)
    
    
        slackMessage = reaper.AZ_Slack_PostDirectMessage(token, userName, caption, false)
    
    
        if slackMessage ~= nil then
    
    
          t0 = os.clock()
    
          while os.clock() - t0 <= 5 do end
    
    
          slackMessage = reaper.AZ_Slack_ReplayMessage(token, slackMessage["Channel"], slackMessage["TimeStamp"], body)
    
    
        end
    
    end
    
    
    function main()
    
    
        excelDocPath = "D:\\reapdock\\voice\\Scripts.xlsx"
    
        threshould = 80
    
    
        retval, inputList = reaper.AZ_GetUserInputList("", 2, "台本パス,台本一致許容度", excelDocPath.."," .. tostring(threshould))
    
        if retval == false then return end
    
    
        token, userName = GetSlackUserData()
    
    
        excelDocPath = inputList[1]
    
        threshould = tonumber(inputList[2])
    
    
        voiceTrack = reaper.AZ_GetTrackItemSelect(0, 0, 1)
    
    
        if voiceTrack == nil then
    
            reaper.AZ_ShowMessageBox_Error("トラックが選択されていません。", "Error", reaper.AZ_WindowType_OK())
    
            return
    
        end
    
    
        -- リージョン作成
    
        itemList = reaper.AZ_GetMediaItemListInTrackItem(voiceTrack)
    
        for i, item in pairs(itemList) do
    
            reaper.AZ_AddRegionMarkerMediaItem(item)
    
        end
    
    
        Transcription(voiceTrack)
    
    
        scriptTable = OutputExcel(excelDocPath, voiceTrack)
    
    
        caption = "ボイスの文字起こしと台本チェックが完了しました。"
    
    
        if scriptTable == nil then
    
            Msg(caption)
    
    
            message = "Excelの書き込みに失敗しました。"
    
            Msg(message)
    
    
            SendSlackMessage(token, userName, caption, message)
    
    
        elseif #scriptTable > 0 then
    
            Msg(caption)
    
    
            errorVoiceList = CheckSimilarity(voiceTrack, scriptTable, threshould)
    
    
            message = "以下のボイスが台本と一致していない可能性があります。"
    
            Msg(message)
    
            ShowObject(errorVoiceList)
    
    
            message = message .. "\n" .. "```"
    
            for i, errorVoice in pairs(errorVoiceList) do
    
                message= message .. errorVoice .. "\n"
    
            end
    
            message = message .. "```"
    
    
            SendSlackMessage(token, userName, caption, message)
    
        else
    
            Msg(caption)
    
    
            message = "台本と相違があるボイスはありませんでした。"
    
            Msg(message)
    
    
            SendSlackMessage(token, userName, caption, message)
    
        end
    
    
    end
    
    
    main()

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. ******** AZSTOKE_TRSC_OutputToProject参照 ******
    3. function Transcription(track)
    4.     trscTrack = reaper.AZ_InsertUniqueChildTrack(track, "Transcription")
    5.     itemList = reaper.AZ_GetMediaItemListInTrackItem(track)
    6. -- モデルを読み込み ctx = reaper.AZ_TRSC_LoadModel()
    7.     for i, item in pairs(itemList) do
    8. -- 文字起こし実行 text = reaper.AZ_TRSC_FullForMediaItem(ctx, item, "ja")
    9.        itemStart = reaper.AZ_GetMediaItemStartTimeSeconds(item)
      
             itemLength = reaper.AZ_GetMediaItemLength(item)
    10.        reaper.AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text)
    11.     end
    12. -- モデルを解放 reaper.AZ_TRSC_ReleaseModel(ctx)
    13. reaper.AZ_ShowMessageBox_Info("文字起こしが終了しました", "", reaper.AZ_WindowType_OK())
    14.     return trscTrack
    15. end
    16. ******** AZSTOKE_TRSC_OutputToProject参照 ここまで ******
    17. ******** AZSTOKE_TRSC_OutputToExcel参照 ******
    18. C_id = "B"
      
      C_serif = "C"
      
      C_trsc = "D"
      
      C_similarity = "E"
      
      R_header = 2
    19. tableRnage = "3:100,B"
    20. function OutputExcel(excelDocPath, voiceTrack)
    21.     scriptTable = {}
    22.     charID = reaper.AZ_GetTrackItemName(voiceTrack)
      
          childrenList, count = reaper.AZ_GetTrackItemChildList(voiceTrack)
    23.     trscTrack = childrenList[1]
    24.     itemList = reaper.AZ_GetMediaItemListInTrackItem(trscTrack)
    25.     excelDoc = reaper.AZ_Excel_OpenFile(excelDocPath)
    26. if reaper.AZ_GetErrorCode() ~= 0 then reaper.AZ_ShowMessageBox_Error("Excelファイルの読み込みに失敗しました。", "Error", reaper.AZ_WindowType_OK()) reaper.AZ_Excel_CloseFile(excelDoc) return end
    27.     reaper.AZ_Excel_SaveDocument(excelDoc)
    28. if reaper.AZ_GetErrorCode() ~= 0 then reaper.AZ_ShowMessageBox_Error("Excelファイルを閉じてください。", "Error", reaper.AZ_WindowType_OK()) reaper.AZ_Excel_CloseFile(excelDoc) return end
    29.     worksheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, charID)
    30. if reaper.AZ_GetErrorCode() == 53 then reaper.AZ_ShowMessageBox_Error("シートが存在しません。", "Error", reaper.AZ_WindowType_OK()) reaper.AZ_Excel_CloseFile(excelDoc) return end
    31.     rows = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, voiceID, C_id, tableRnage)
    32.     for i, noteItem in pairs(itemList) do
      
              region = reaper.AZ_GetRegionMarkerListMediaItem(noteItem)[1]
    33.         voiceID = region["Name"]
    34.         trsc = reaper.AZ_GetMediaItemNotes(noteItem)
    35.         exists = false
      
              for j, row in pairs(rows["Cells"]) do
    36.             if row[C_id] == voiceID then
    37.                 serif = reaper.AZ_Excel_GetCellValue(worksheet, C_serif .. j)
    38.                 similarity = reaper.AZ_CalcStringSimilarity(trsc, serif)
    39.                 reaper.AZ_Excel_SetCellValue(worksheet, C_trsc .. j, trsc)
      
                      reaper.AZ_Excel_SetCellValue(worksheet, C_similarity .. j, similarity)
    40. Msg(voiceID .. "文字起こしを書き込みました。")
    41.                 scriptItem = {
      
                          ID = voiceID,
      
                          NoteItem = noteItem,
      
                          Serif = serif,
      
                          Trsc = trsc,
      
                          Similarity = similarity
      
                      }
    42.                 table.insert(scriptTable, scriptItem)
    43.                 exists = true
      
                  end
      
              end
    44. if exists == false then Msg(voiceID .. "は存在しません。") end end
    45.     reaper.AZ_Excel_SaveDocument(excelDoc)
      
          reaper.AZ_Excel_CloseFile(excelDoc)
    46.     return scriptTable
      
      end
    47. ******** AZSTOKE_TRSC_OutputToExcel参照 ここまで******
    48. ******** AZSTOKE_TRSC_CheckSimilarity参照 ******
    49. function CheckSimilarity(voiceTrack, scriptTable, threshold)
    50.     errorVoiceList = {}
    51.     mediaItemList = reaper.AZ_GetMediaItemListInTrackItem(voiceTrack)
    52.     for i, voiceMedia in pairs(mediaItemList) do
      
              voiceID = reaper.AZ_GetMediaItemName(voiceMedia)
    53.         for j, scriptItem in pairs(scriptTable) do
      
                  if scriptItem["ID"] == voiceID then
    54.               if scriptItem["Similarity"] < threshold then
    55.                   table.insert(errorVoiceList, voiceID)
    56.                   region = reaper.AZ_GetRegionMarkerListMediaItem(voiceMedia)[1]
    57.                   reaper.AZ_SetRegionMarkerColor(0, region["Index"], 255)
    58.               end
    59.             end
      
              end
    60.     end
    61.     return errorVoiceList
    62. end
    63. ******** AZSTOKE_TRSC_CheckSimilarity参照 ここまで******
    64. function GetSlackUserData()
    65. ・ Slackのトークンと通知先ユーザーを取得する関数
    66.     slackDataPath = reaper.GetResourcePath() .. "\\AZData\\Slack"
    67. ・ Slackのトークンと通知先ユーザーを保存するパス
    68.     token = reaper.AZ_ReadFile(slackDataPath, "slackToken.txt")
    69.     userName =  reaper.AZ_ReadFile(slackDataPath, "slackUser.txt")
    70. ・ Slackのトークンと通知先ユーザーをファイルから読み込む
    71. if userName == "" or token == "" then retval, obj = reaper.AZ_GetUserInputList("SlackInfo", 2, "slackトークン,通知先ユーザー", token..","..userName )
    72. ・ Slackのトークンと通知先ユーザーが保存されていない場合、ユーザーに入力を促すダイアログを表示
    73.         token = obj[1]
      
              userName = obj[2]
      
              reaper.AZ_WriteFile(slackDataPath, "slackToken.txt", token, 0)
      
              reaper.AZ_WriteFile(slackDataPath, "slackUser.txt", userName, 0)
    74. ・ ユーザーが入力したSlackのトークンと通知先ユーザーをファイルに保存
    75.     else
      
              token = reaper.AZ_ReplaceSearchString(token, "\n", "")
      
              userName = reaper.AZ_ReplaceSearchString(userName, "\n", "")
    76. ・ ファイルから読み込んだSlackのトークンと通知先ユーザーから改行コードを削除 end
    77.     return token, userName
    78. ・ Slackのトークンと通知先ユーザーを返す end
    79. function SendSlackMessage(token, userName, caption, body)
    80. ・ Slackにメッセージを送信する関数
    81.     slackMessage = reaper.AZ_Slack_PostDirectMessage(token, userName, caption, false)
    82. ・ SlackのAPIを使用して、指定されたユーザーにメッセージを送信
    83.     if slackMessage ~= nil then
    84. ・ メッセージの送信に成功した場合
    85.       t0 = os.clock()
      
            while os.clock() - t0 <= 5 do end
    86. ・ メッセージの送信後、一定時間待機(SlackのAPIの反映を待つため)
    87.       slackMessage = reaper.AZ_Slack_ReplayMessage(token, slackMessage["Channel"], slackMessage["TimeStamp"], body)
    88. ・ 送信したメッセージに対して、さらに内容を追加するためのAPIを呼び出す
    89.     end
      
      end
    90. function main()
    91.     excelDocPath = "D:\\reapdock\\voice\\Scripts.xlsx"
      
          threshould = 80
    92. retval, inputList = reaper.AZ_GetUserInputList("", 2, "台本パス,台本一致許容度", excelDocPath.."," .. tostring(threshould)) if retval == false then return end
    93.     token, userName = GetSlackUserData()
    94.     excelDocPath = inputList[1]
      
          threshould = tonumber(inputList[2])
    95.     voiceTrack = reaper.AZ_GetTrackItemSelect(0, 0, 1)
    96. if voiceTrack == nil then reaper.AZ_ShowMessageBox_Error("トラックが選択されていません。", "Error", reaper.AZ_WindowType_OK()) return end
    97. -- リージョン作成 itemList = reaper.AZ_GetMediaItemListInTrackItem(voiceTrack) for i, item in pairs(itemList) do reaper.AZ_AddRegionMarkerMediaItem(item) end
    98.     Transcription(voiceTrack)
    99.     scriptTable = OutputExcel(excelDocPath, voiceTrack)
    100. caption = "ボイスの文字起こしと台本チェックが完了しました。"
    101. ・ ボイスの文字起こしと台本チェックが完了したことを知らせるキャプション
    102.     if scriptTable == nil then
      
              Msg(caption)
    103. message = "Excelの書き込みに失敗しました。" Msg(message)
    104.         SendSlackMessage(token, userName, caption, message)
    105. ・ Excelの書き込みに失敗した場合、Slackにエラーメッセージを送信
    106.     elseif #scriptTable > 0 then
      
              Msg(caption)
    107.         errorVoiceList = CheckSimilarity(voiceTrack, scriptTable, threshould)
    108. message = "以下のボイスが台本と一致していない可能性があります。" Msg(message) ShowObject(errorVoiceList)
    109. ・ 台本と一致していない可能性のあるボイスのリストをコンソール表示
    110.         message = message .. "\n" .. "```"
      
              for i, errorVoice in pairs(errorVoiceList) do
      
                  message= message .. errorVoice .. "\n"
      
              end
      
              message = message .. "```"
    111. ・ 台本と一致していない可能性のあるボイスのリストをSlackに送信するためのメッセージを作成 ・ メッセージのフォーマットは、コードブロック(``` ~ ```)を使用して見やすくする
    112.         SendSlackMessage(token, userName, caption, message)
    113. ・ 台本と一致していない可能性のあるボイスのリストをSlackに送信
    114.     else
      
              Msg(caption)
    115. message = "台本と相違があるボイスはありませんでした。" Msg(message)
    116.         SendSlackMessage(token, userName, caption, message)
    117. ・ 台本と相違があるボイスがなかった場合、その旨をSlackに送信 end
    118. end
    119. main()

    実行画面

  • AZSTOKE_TRSC_CutSilent音声区間を切り出し文字起こし

    実行前の準備

    Reaperに音声ファイルを配置しておく

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    
    function CutSilent(mediaItem)
    
    
        cutItemList = {}
    
        silentSectionList = reaper.AZ_GetAudioSectionListInMediaItem(mediaItem, 0.2)
    
    
        currentItem = mediaItem
    
        prevSplitPos = 0
    
    
        for i, section in pairs(silentSectionList) do
    
            leftItem, rigthItem = reaper.AZ_SplitMediaItem(currentItem, section["StartTime"] - prevSplitPos)
    
            prevSplitPos = section["StartTime"]
    
            reaper.AZ_DeleteMediaItem(leftItem)
    
    
            leftItem, rigthItem = reaper.AZ_SplitMediaItem(rigthItem, section["EndTime"] - prevSplitPos)
    
            prevSplitPos = section["EndTime"]
    
    
            currentItem = rigthItem
    
    
            table.insert(cutItemList, leftItem)
    
        end
    
    
        reaper.AZ_DeleteMediaItem(currentItem)
    
    
        return cutItemList
    
    
    end
    
    
    function Transcription(mediaItemList)
    
    
        -- モデルを読み込み
    
        ctx = reaper.AZ_TRSC_LoadModel()
    
    
        for i, item in pairs(mediaItemList) do
    
    
            track = reaper.GetMediaItemTrack(item)
    
    
            trscTrack = reaper.AZ_InsertUniqueChildTrack(track, "Transcription")
    
    
           -- 文字起こし実行
    
            text = reaper.AZ_TRSC_FullForMediaItem(ctx, item, "ja")
    
    
            itemStart = reaper.AZ_GetMediaItemStartTimeSeconds(item)
    
            itemLength = reaper.AZ_GetMediaItemLength(item)
    
    
            reaper.AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text)
    
    
        end
    
    
        -- モデルを解放
    
        reaper.AZ_TRSC_ReleaseModel(ctx)
    
    
        return
    
    
    end
    
    
    function main()
    
        mediaItemList = reaper.AZ_GetSelectedMediaItemList(0)
    
    
        cutAllItemList = {}
    
    
        for i, item in pairs(mediaItemList) do
    
    
            cutItemList = CutSilent(item)
    
    
            for j, cutItem in pairs(cutItemList) do
    
                table.insert(cutAllItemList, cutItem)
    
            end
    
    
        end
    
    
        Transcription(cutAllItemList)
    
    
        reaper.AZ_ShowMessageBox_Info("音声の切り出しが完了しました。", "", reaper.AZ_WindowType_OK())
    
    end
    
    
    main()

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
    2. ・ RIGDOCKSをインポート
    3. function CutSilent(mediaItem)
    4. ・ 音声の無音部分を切り出す関数
    5.     cutItemList = {}
      
          silentSectionList = reaper.AZ_GetAudioSectionListInMediaItem(mediaItem, 0.2)
    6. ・ 音声の無音部分を取得(0.2秒以上の無音部分を検出)
    7.     currentItem = mediaItem
      
          prevSplitPos = 0
    8. ・ 現在のアイテムと前回の分割位置を初期化
    9.     for i, section in pairs(silentSectionList) do
    10. ・ 無音部分のリストをループ
    11.         leftItem, rigthItem = reaper.AZ_SplitMediaItem(currentItem, section["StartTime"] - prevSplitPos)
    12. ・ 無音部分の開始位置でアイテムを分割し、左側のアイテムと右側のアイテムを取得
    13.         prevSplitPos = section["StartTime"]
    14. ・ 前回の分割位置を更新
    15.         reaper.AZ_DeleteMediaItem(leftItem)
    16. ・ 左側のアイテムは無音部分なので削除
    17.         leftItem, rigthItem = reaper.AZ_SplitMediaItem(rigthItem, section["EndTime"] - prevSplitPos)
    18. ・ 右側のアイテムを無音部分の終了位置で分割し、左側のアイテムと右側のアイテムを取得
    19.         prevSplitPos = section["EndTime"]
    20. ・ 前回の分割位置を更新
    21.         currentItem = rigthItem
    22. ・ 現在のアイテムを右側のアイテムに更新(次のループでこのアイテムを分割するため)
    23.         table.insert(cutItemList, leftItem)
    24. ・ 切り出したアイテムをリストに追加
    25.     end
    26.     reaper.AZ_DeleteMediaItem(currentItem)
    27. ・ 最後に残ったアイテムも削除(無音部分の最後のアイテム)
    28.     return cutItemList
    29. ・ 切り出したアイテムのリストを返す
    30. end
    31. function Transcription(mediaItemList)
    32. ・ 文字起こしを実行する関数
    33. -- モデルを読み込み ctx = reaper.AZ_TRSC_LoadModel()
    34. ・ モデルを読み込む
    35.     for i, item in pairs(mediaItemList) do
    36. ・ メディアイテムのリストをループ
    37.         track = reaper.GetMediaItemTrack(item)
    38. ・ アイテムのトラックを取得
    39.         trscTrack = reaper.AZ_InsertUniqueChildTrack(track, "Transcription")
    40. ・ トラックに文字起こし用の子トラックを追加
    41. -- 文字起こし実行 text = reaper.AZ_TRSC_FullForMediaItem(ctx, item, "ja")
    42. ・ アイテムに対して文字起こしを実行(日本語で)
    43.         itemStart = reaper.AZ_GetMediaItemStartTimeSeconds(item)
      
              itemLength = reaper.AZ_GetMediaItemLength(item)
    44. ・ アイテムの開始時間と長さを取得
    45.         reaper.AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text)
    46. ・ 文字起こしの結果をノートアイテムとしてトラックに挿入
    47.     end
    48. -- モデルを解放 reaper.AZ_TRSC_ReleaseModel(ctx)
    49. ・ モデルを解放
    50.     return
    51. end
    52. function main()
      
          mediaItemList = reaper.AZ_GetSelectedMediaItemList(0)
    53. ・ 選択されているメディアイテムのリストを取得
    54.     cutAllItemList = {}
    55. ・ 切り出したアイテムを格納するリストを初期化
    56.     for i, item in pairs(mediaItemList) do
    57.         cutItemList = CutSilent(item)
    58. ・ 各アイテムに対して無音部分を切り出す関数を呼び出し、切り出したアイテムのリストを取得
    59.         for j, cutItem in pairs(cutItemList) do
      
                  table.insert(cutAllItemList, cutItem)
      
              end
    60. ・ 切り出したアイテムを全てのアイテムのリストに追加
    61.     end
    62.     Transcription(cutAllItemList)
    63. ・ 切り出したアイテムのリストに対して文字起こしを実行
    64. reaper.AZ_ShowMessageBox_Info("音声の切り出しが完了しました。", "", reaper.AZ_WindowType_OK())
    65. ・ 処理が完了したことをユーザーに通知
    66. end
    67. main()
    68. ・ メイン関数を呼び出して処理を開始

    実行画面

  • AZSTOKE_TRSC_OutputToGoogleSheets文字起こし結果をスプレッドシートに記載する

    実行前の準備

    Reaperに音声ファイルを配置しておく 台本用のスプレッドシートファイルを用意する

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    function CutSilent(mediaItem)
    
    
        cutItemList = {}
    
        silentSectionList = reaper.AZ_GetAudioSectionListInMediaItem(mediaItem, 0.2)
    
        currentItem = mediaItem
    
        prevSplitPos = 0
    
    
        baseName = reaper.AZ_GetMediaItemName(mediaItem)
    
    
        for i, section in pairs(silentSectionList) do
    
            leftItem, rightItem = reaper.AZ_SplitMediaItem(currentItem, section["StartTime"] - prevSplitPos)
    
            prevSplitPos = section["StartTime"]
    
            reaper.AZ_DeleteMediaItem(leftItem)
    
    
            leftItem, rightItem = reaper.AZ_SplitMediaItem(rightItem, section["EndTime"] - prevSplitPos)
    
            prevSplitPos = section["EndTime"]
    
            currentItem = rightItem
    
    
            name = baseName .. "_" .. reaper.AZ_FormatNumDigit(i, 2)
    
            reaper.AZ_SetMediaItemName(leftItem, name)
    
    
            -- リージョン作成
    
            reaper.AZ_AddRegionMarkerMediaItem(leftItem)
    
    
            table.insert(cutItemList, leftItem)
    
        end
    
    
        reaper.AZ_DeleteMediaItem(currentItem)
    
    
        return cutItemList
    
    end
    
    
    function Transcription(mediaItemList)
    
    
        -- モデルを読み込み
    
        ctx = reaper.AZ_TRSC_LoadModel()
    
    
        trscTrackList = {}
    
    
        exists = {}
    
    
        for i, item in pairs(mediaItemList) do
    
    
            track = reaper.GetMediaItemTrack(item)
    
    
            trscTrack = reaper.AZ_InsertUniqueChildTrack(track, "Transcription")
    
    
            -- 文字起こし実行
    
            text = reaper.AZ_TRSC_FullForMediaItem(ctx, item, "ja")
    
    
            itemStart = reaper.AZ_GetMediaItemStartTimeSeconds(item)
    
            itemLength = reaper.AZ_GetMediaItemLength(item)
    
    
            reaper.AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text)
    
    
            if not exists[trscTrack] then
    
                exists[trscTrack] = true
    
                table.insert(trscTrackList, trscTrack)
    
            end
    
        end
    
    
        -- モデルを解放
    
        reaper.AZ_TRSC_ReleaseModel(ctx)
    
    
        return trscTrackList
    
    end
    
    
    C_id = "B"
    
    C_serif = "C"
    
    C_trsc = "D"
    
    R_header = 2
    
    tableRange = "B3:B100"
    
    
    function OutputGSheet(spreadSheetId, sheetId, trscTrackList)
    
    
        connection = reaper.AZ_GSheet_Connect_UserAccount(spreadSheetId)
    
    
        for _, trscTrack in pairs(trscTrackList) do  -- トラックをループ
    
    
            itemList = reaper.AZ_GetMediaItemListInTrackItem(trscTrack)
    
    
            for i, noteItem in pairs(itemList) do
    
    
                region = reaper.AZ_GetRegionMarkerListMediaItem(noteItem)[1]
    
                voiceID = region["Name"]
    
    
                trsc = reaper.AZ_GetMediaItemNotes(noteItem)
    
    
                rows = reaper.AZ_GSheet_SearchRowsInWorksheet(connection, sheetId, voiceID, C_id, tableRange)
    
    
                if #rows["Cells"] == 0 then
    
    
                    Msg(voiceID .. " : 存在しません。")
    
                else
    
    
                    rowNumber = rows["Cells"][1]["RowNumber"]
    
    
                    reaper.AZ_GSheet_SetCellValue(connection, sheetId, C_trsc .. rowNumber, trsc)
    
    
                    Msg(voiceID .. " : 文字起こしを書き込みました。")
    
                end
    
            end
    
        end
    
    
        reaper.AZ_GSheet_Disconnect(connection)
    
    end
    
    
    function main()
    
    
        retval, inputList = reaper.AZ_GetUserInputList("", 2, "スプレッドシートID,シートID", "**********,**********")
    
        if retval == false then return end
    
    
        spreadSheetId = inputList[1]
    
        sheetId_str = inputList[2]
    
        sheetId = tonumber(sheetId_str)
    
    
        mediaItemList = reaper.AZ_GetSelectedMediaItemList(0)
    
        cutAllItemList = {}
    
    
        for i, item in pairs(mediaItemList) do
    
    
            cutItemList = CutSilent(item)
    
    
            for j, cutItem in pairs(cutItemList) do
    
                table.insert(cutAllItemList, cutItem)
    
            end
    
        end
    
    
        trscTrackList = Transcription(cutAllItemList)
    
    
        OutputGSheet(spreadSheetId, sheetId, trscTrackList)
    
    end
    
    
    main()

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. ・ RIGDOCKSをインポート
    3. function CutSilent(mediaItem)
    4. ・ 音声の無音部分を切り出す関数
    5.     cutItemList = {}
      
          silentSectionList = reaper.AZ_GetAudioSectionListInMediaItem(mediaItem, 0.2)
      
          currentItem = mediaItem
      
          prevSplitPos = 0
    6. ・ 現在のアイテムと前回の分割位置を初期化
    7.     baseName = reaper.AZ_GetMediaItemName(mediaItem)
    8. ・ メディアの名前を取得してbaseNameに保存
    9.     for i, section in pairs(silentSectionList) do
    10. ・ 無音部分のリストをループ
    11.         leftItem, rightItem = reaper.AZ_SplitMediaItem(currentItem, section["StartTime"] - prevSplitPos)
    12. ・ 無音部分の開始位置でアイテムを分割し、左側のアイテムと右側のアイテムを取得
    13.         prevSplitPos = section["StartTime"]
    14. ・ 前回の分割位置を更新
    15.         reaper.AZ_DeleteMediaItem(leftItem)
    16. ・ 左側のアイテムは無音部分なので削除
    17.         leftItem, rightItem = reaper.AZ_SplitMediaItem(rightItem, section["EndTime"] - prevSplitPos)
    18. ・ 右側のアイテムを無音部分の終了位置で分割し、左側のアイテムと右側のアイテムを取得
    19.         prevSplitPos = section["EndTime"]
    20. ・ 前回の分割位置を更新
    21.         currentItem = rightItem
    22. ・ 現在のアイテムを右側のアイテムに更新(次のループでこのアイテムを分割するため)
    23.         name = baseName .. "_" .. reaper.AZ_FormatNumDigit(i, 2)
      
              reaper.AZ_SetMediaItemName(leftItem, name)
    24. ・ baseNameに番号をつけて切り出したアイテムに名前を設定
    25. -- リージョン作成 reaper.AZ_AddRegionMarkerMediaItem(leftItem)
    26. ・ アイテム名をもとにリージョンを作成
    27.         table.insert(cutItemList, leftItem)
    28. ・ 切り出したアイテムをリストに追加
    29.     end
    30.     reaper.AZ_DeleteMediaItem(currentItem)
    31. ・ 最後に残ったアイテムも削除(無音部分の最後のアイテム)
    32.     return cutItemList
    33. ・ 切り出したアイテムのリストを返す
    34. end
    35. -------- ここから REAPDOCK AZSTOKE_TRSC_CutSilentを参照 --------
    36. function Transcription(mediaItemList)
    37. -- モデルを読み込み ctx = reaper.AZ_TRSC_LoadModel()
    38.     trscTrackList = {}
    39.     exists = {}
    40.     for i, item in pairs(mediaItemList) do
    41.         track = reaper.GetMediaItemTrack(item)
    42.         trscTrack = reaper.AZ_InsertUniqueChildTrack(track, "Transcription")
    43. -- 文字起こし実行 text = reaper.AZ_TRSC_FullForMediaItem(ctx, item, "ja")
    44.         itemStart = reaper.AZ_GetMediaItemStartTimeSeconds(item)
      
              itemLength = reaper.AZ_GetMediaItemLength(item)
    45.         reaper.AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text)
    46.         if not exists[trscTrack] then
      
                  exists[trscTrack] = true
      
                  table.insert(trscTrackList, trscTrack)
      
              end
      
          end
    47. -- モデルを解放 reaper.AZ_TRSC_ReleaseModel(ctx)
    48.     return trscTrackList
      
      end
    49. -------- ここまで REAPDOCK AZSTOKE_TRSC_CutSilentを参照 --------
    50. C_id = "B"
      
      C_serif = "C"
      
      C_trsc = "D"
    51. ・ スプレッドシートの列を定義
    52. R_header = 2
    53. ・ スプレッドシートのヘッダー行を定義
    54. tableRange = "B3:B100"
    55. ・ スプレッドシートの検索範囲を定義(3行目から100行目までのB列)
    56. function OutputGSheet(spreadSheetId, sheetId, trscTrackList)
    57. ・ スプレッドシートに文字起こし結果を出力する関数
    58.     connection = reaper.AZ_GSheet_Connect_UserAccount(spreadSheetId)
    59. ・ スプレッドシートIDを指定して接続
    60. for _, trscTrack in pairs(trscTrackList) do -- トラックをループ
    61. ・ 文字起こし結果のトラックリストをループ
    62.         itemList = reaper.AZ_GetMediaItemListInTrackItem(trscTrack)
    63. ・ 文字起こしトラック内にあるアイテムのリストを取得
    64.         for i, noteItem in pairs(itemList) do
    65. ・ 文字起こしアイテムリストをループ
    66.             region = reaper.AZ_GetRegionMarkerListMediaItem(noteItem)[1]
      
                  voiceID = region["Name"]
    67. ・ リージョン名からvoiceIDを取得(これがセリフIDになる想定)
    68.             trsc = reaper.AZ_GetMediaItemNotes(noteItem)
    69. ・ アイテムのノートから文字起こし結果を取得
    70.             rows = reaper.AZ_GSheet_SearchRowsInWorksheet(connection, sheetId, voiceID, C_id, tableRange)
    71. ・ シートの指定範囲からセリフIDと一致する行を検索
    72.             if #rows["Cells"] == 0 then
    73. Msg(voiceID .. " : 存在しません。")
    74. ・ 検索結果が0件の場合、存在しない旨をメッセージ表示
    75.             else
    76.                 rowNumber = rows["Cells"][1]["RowNumber"]
    77. ・ 検索結果が存在する場合、最初の一致行の行番号を取得
    78.                 reaper.AZ_GSheet_SetCellValue(connection, sheetId, C_trsc .. rowNumber, trsc)
    79. ・ 取得したD列の行番号のセルに文字起こし結果を書き込む
    80. Msg(voiceID .. " : 文字起こしを書き込みました。")
    81. ・ 書き込み完了のメッセージ表示
    82.             end
      
              end
      
          end
    83.     reaper.AZ_GSheet_Disconnect(connection)
    84. ・ シートから切断
    85. end
    86. function main()
    87. ・ メイン関数
    88. retval, inputList = reaper.AZ_GetUserInputList("", 2, "スプレッドシートID,シートID", "**********,**********") if retval == false then return end
    89. ・ ユーザー入力を取得(キャンセルの場合は終了)
    90.     spreadSheetId = inputList[1]
      
          sheetId_str = inputList[2]
      
          sheetId = tonumber(sheetId_str)
    91. ・ スプレッドシートIDとシートIDを取得し、シートIDを数値に変換
    92.     mediaItemList = reaper.AZ_GetSelectedMediaItemList(0)
    93. ・ 選択されているメディアイテムのリストを取得
    94.     cutAllItemList = {}
    95. ・ 切り出したアイテムを格納するリストを初期化
    96.     for i, item in pairs(mediaItemList) do
    97.         cutItemList = CutSilent(item)
    98. ・ 各アイテムに対して無音部分を切り出す関数を呼び出し、切り出したアイテムのリストを取得
    99.         for j, cutItem in pairs(cutItemList) do
      
                  table.insert(cutAllItemList, cutItem)
      
              end
    100. ・ 切り出したアイテムを全てのアイテムのリストに追加
    101.     end
    102.     trscTrackList = Transcription(cutAllItemList)
    103. ・ 切り出したアイテムのリストに対して文字起こしを実行
    104.     OutputGSheet(spreadSheetId, sheetId, trscTrackList)
    105. ・ 文字起こしした結果をスプレッドシートに出力
    106. end
    107. main()
    108. ・ メイン関数を呼び出して処理を開始

    実行画面

Excel9

  • AZSTOKE_Excel_InsertLength_1音声ファイルをReaperにインポートし、その長さをExcelに記録する

    実行前の準備

    Excelファイルを用意する インポートする音声ファイルを用意する

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    retval, inputList = reaper.AZ_GetUserInputList("", 2, "Source Path,Excel Path", ",")
    
    
    if retval then
    
    
        sourceParentPath = inputList[1]
    
    
        excelPath = inputList[2]
    
    
        track = reaper.AZ_InsertTrackSearchUniqueOnly(0, "work")
    
    
        sourcePathList = reaper.AZ_GetFilePathList(sourceParentPath, "wav")
    
    
        items = reaper.AZ_InsertMediaItems(track, sourcePathList, 0, 1)
    
    
        excel = reaper.AZ_Excel_OpenFile(excelPath)
    
    
        worksheet = reaper.AZ_Excel_OpenWorksheet(excel, "items")
    
    
        for i, item in pairs(items)do
    
    
          itemName = reaper.AZ_GetMediaItemName(item)
    
    
          itemLength = reaper.AZ_GetMediaItemLength(item)
    
    
          searchResult = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, itemName, "A")
    
    
          resultRow = ""
    
    
          for k, v in pairs(searchResult["Cells"]) do
    
    
              resultRow = k
    
          end
    
    
          if resultRow == "" then
    
    
              searchResult = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, ".+", "A", ",A", true)
    
    
              newRow = 1
    
    
              for k, v in pairs(searchResult["Cells"]) do newRow = newRow + 1 end
    
    
              reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 1, itemName)
    
    
              reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 2, itemLength)
    
    
          else
    
    
              cell = "B" .. resultRow
    
    
              reaper.AZ_Excel_SetCellValue(worksheet, cell, itemLength)
    
          end
    
    
        end
    
    
        reaper.AZ_Excel_SaveDocument(excel)
    
    
        reaper.AZ_Excel_CloseFile(excel)
    
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. ・RIGDOCKSをインポート
    3. retval, inputList = reaper.AZ_GetUserInputList("", 2, "Source Path,Excel Path", ",")
    4. ・必要事項の入力を要求
    5. if retval then
    6.     sourceParentPath = inputList[1]
    7. ・入力値から音声ファイルの親フォルダのパスを取得
    8.     excelPath = inputList[2]
    9. ・入力値からExcelファイルのパスを取得
    10.     track = reaper.AZ_InsertTrackSearchUniqueOnly(0, "work")
    11. ・「work」という名前のトラックを作成
    12.     sourcePathList = reaper.AZ_GetFilePathList(sourceParentPath, "wav")
    13. ・親フォルダの配下にある音声ファイルのパスを全て取得
    14.     items = reaper.AZ_InsertMediaItems(track, sourcePathList, 0, 1)
    15. ・音声ファイルを「work」トラックに挿入
    16.     excel = reaper.AZ_Excel_OpenFile(excelPath)
    17. ・エクセルファイルを開く
    18.     worksheet = reaper.AZ_Excel_OpenWorksheet(excel, "items")
    19. ・エクセルファイルの「items」ワークシートを開く
    20.     for i, item in pairs(items)do
    21.       itemName = reaper.AZ_GetMediaItemName(item)
    22.       itemLength = reaper.AZ_GetMediaItemLength(item)
    23. ・メディアアイテムの名前と長さを取得
    24.       searchResult = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, itemName, "A")
    25. ・ワークシート内にメディアアイテム名に対応する行があるか検索
    26.       resultRow = ""
    27.       for k, v in pairs(searchResult["Cells"]) do
    28.           resultRow = k
      
            end
    29. ・検索結果の行番号を取得
    30.       if resultRow == "" then
    31. ・検索結果の行番号がない→対応する行がない場合
    32.           searchResult = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, ".+", "A", ",A", true)
    33. ・A列が空欄でない行を取得
    34.           newRow = 1
    35.           for k, v in pairs(searchResult["Cells"]) do newRow = newRow + 1 end
    36. ・A列が空欄の行の行番号を取得
    37.           reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 1, itemName)
    38.           reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 2, itemLength)
    39. ・新しい行として、メディアアイテム名と長さを記載
    40.       else
    41. ・対応する行がある場合
    42.           cell = "B" .. resultRow
    43.           reaper.AZ_Excel_SetCellValue(worksheet, cell, itemLength)
    44. ・B列に長さを記載
    45.       end
    46.     end
    47.     reaper.AZ_Excel_SaveDocument(excel)
    48. ・Excelファイルを保存
    49.     reaper.AZ_Excel_CloseFile(excel)
    50. ・Excelファイルを閉じる
    51. end

    実行画面

  • AZSTOKE_Excel_SetVolume_1音声ファイルをReaperにインポートし、音量値をExcelファイルのデータに合わせる

    実行前の準備

    Excelファイルを用意する インポートする音声ファイルを用意する

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    retval, inputList = reaper.AZ_GetUserInputList("", 2, "Source Path,Excel Path", ",")
    
    
    if retval then
    
    
        sourceParentPath = inputList[1]
    
    
        excelPath = inputList[2]
    
    
        track = reaper.AZ_InsertTrackSearchUniqueOnly(0, "work")
    
    
        sourcePathList = reaper.AZ_GetFilePathList(sourceParentPath, "wav")
    
    
        items = reaper.AZ_InsertMediaItems(track, sourcePathList, 0, 1)
    
    
        excel = reaper.AZ_Excel_OpenFile(excelPath)
    
    
        worksheet = reaper.AZ_Excel_OpenWorksheet(excel, "volume")
    
    
        for i, item in pairs(items)do
    
    
          itemName = reaper.AZ_GetMediaItemName(item)
    
    
          searchResult = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, itemName, "A")
    
    
          volume = 0
    
    
          for k, v in pairs(searchResult["Cells"]) do
    
    
              volume = v["B"]
    
          end
    
    
          if volume ~= 0 then
    
    
              reaper.AZ_SetMediaItemVolume(item, volume)
    
    
          end
    
    
        end
    
    
        reaper.AZ_Excel_CloseFile(excel)
    
    
    end

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. ・RIGDOCKSをインポート
    3. retval, inputList = reaper.AZ_GetUserInputList("", 2, "Source Path,Excel Path", ",")
    4. ・必要事項の入力を要求
    5. if retval then
    6.     sourceParentPath = inputList[1]
    7. ・入力値から音声ファイルの親フォルダのパスを取得
    8.     excelPath = inputList[2]
    9. ・入力値からExcelファイルのパスを取得
    10.     track = reaper.AZ_InsertTrackSearchUniqueOnly(0, "work")
    11. ・「work」という名前のトラックを作成
    12.     sourcePathList = reaper.AZ_GetFilePathList(sourceParentPath, "wav")
    13. ・親フォルダの配下にある音声ファイルのパスを全て取得
    14.     items = reaper.AZ_InsertMediaItems(track, sourcePathList, 0, 1)
    15. ・音声ファイルを「work」トラックに挿入
    16.     excel = reaper.AZ_Excel_OpenFile(excelPath)
    17. ・エクセルファイルを開く
    18.     worksheet = reaper.AZ_Excel_OpenWorksheet(excel, "volume")
    19. ・エクセルファイルの「volume」ワークシートを開く
    20.     for i, item in pairs(items)do
    21.       itemName = reaper.AZ_GetMediaItemName(item)
    22. ・メディアアイテムの名前を取得
    23.       searchResult = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, itemName, "A")
    24. ・ワークシート内にメディアアイテム名に対応する行があるか検索
    25.       volume = 0
    26.       for k, v in pairs(searchResult["Cells"]) do
    27.           volume = v["B"]
    28. ・対応する行がある場合、B列に記載された音量値を取得する
    29.       end
    30.       if volume ~= 0 then
    31.           reaper.AZ_SetMediaItemVolume(item, volume)
    32. ・音量値が取得できた場合のみ、メディアアイテムの音量値をその値に設定する
    33.       end
    34.     end
    35.     reaper.AZ_Excel_CloseFile(excel)
    36. ・Excelファイルを閉じる
    37. end

    実行画面

  • AZSTOKE_Excel_InsertAndSetLoudnessPerforceで管理された音声ファイルをExcelの表を基に設定し、Wwiseに自動実装①

    実行前の準備

    Excelファイルを用意する インポートする音声ファイルを用意する

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    p4URL = "********"
    
    p4UserName = "********"
    
    p4Password = "********"
    
    p4Workspace = "********"
    
    
    function InsertAndSetLoudness(depotPath, excelPath)
    
    
        track, trackID = reaper.AZ_InsertTrackSearchUniqueOnly(0, "voice")
    
    
        trackCount = reaper.CountTrackMediaItems(track)
    
    
        endTime = reaper.AZ_GetTrackMediaEndTime(0, trackID, trackCount - 1)
    
    
        startPos = endTime + 3
    
    
        if reaper.AZ_P4_Connect(p4URL, p4UserName, p4Password)then
    
    
             filePathList = reaper.AZ_P4_ExportAudioToProject(p4Workspace, depotPath, "", -1, "wav")
    
    
             itemList = reaper.AZ_InsertMediaItems(track, filePathList, startPos, 1)
    
    
             reaper.AZ_P4_Disconnect()
    
        end
    
    
        reaper.AZ_SetMediaItemListHANDAUTOMER(itemList, 2)
    
    
        excelDoc = reaper.AZ_Excel_OpenFile(excelPath)
    
    
        sheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, "script")
    
    
        color, _, _, _ = reaper.AZ_GetRandomColor()
    
    
        for i, item in pairs(itemList) do
    
            itemName = reaper.AZ_GetMediaItemName(item)
    
            itemStartPos = reaper.AZ_GetMediaItemStartTimeSeconds(item)
    
            itemEndPos = reaper.AZ_GetMediaItemEndTime(item)
    
    
            reaper.AZ_AddRegionMarker(0, itemStartPos, itemEndPos, itemName, -1, color)
    
    
            result = reaper.AZ_Excel_SearchRowsInWorksheet(sheet, itemName, "A", "", false)
    
    
            exists = false
    
            for j, row in pairs(result["Cells"]) do
    
                exists = true
    
    
                Msg("name: " .. row["A"])
    
                Msg("Loudness: " .. row["C"])
    
                Msg("")
    
    
                loudness =  tonumber(row["C"])
    
            end
    
    
            if exists == true then
    
                 reaper.AZ_SetMediaItemLoudnessMaxMomentary(item, loudness)
    
    
            end
    
        end
    
    
        reaper.AZ_Excel_CloseFile(excelDoc)
    
    
    end
    
    
    function main()
    
    
        retval, inputList = reaper.AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")
    
    
        if retval == false then return end
    
    
        deptPath = inputList[1]
    
        excelPath = inputList[2]
    
    
        InsertAndSetLoudness(deptPath, excelPath)
    
    
    end
    
    
    main()

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. ・RIGDOCKSをインポート
    3. p4URL = "********"
      
      p4UserName = "********"
      
      p4Password = "********"
      
      p4Workspace = "********"
    4. ・perforceの接続情報を設定
    5. function InsertAndSetLoudness(depotPath, excelPath)
    6. ・関数定義、引数はデポパスとExcelパス
    7.     track, trackID = reaper.AZ_InsertTrackSearchUniqueOnly(0, "voice")
    8. ・「voice」という名前のトラックを作成
    9.     trackCount = reaper.CountTrackMediaItems(track)
    10. ・「voice」トラック内のメディアアイテム数を取得
    11.     endTime = reaper.AZ_GetTrackMediaEndTime(0, trackID, trackCount - 1)
    12. ・最後のメディアアイテムの終了時間を取得
    13.     startPos = endTime + 3
    14. ・新規挿入位置を最後のメディアアイテム終了時間の3秒後に設定
    15.     if reaper.AZ_P4_Connect(p4URL, p4UserName, p4Password)then
    16. ・perforceに接続
    17.          filePathList = reaper.AZ_P4_ExportAudioToProject(p4Workspace, depotPath, "", -1, "wav")
    18. ・デポパス配下の音声ファイルを全てプロジェクトにエクスポートし、パスのリストを取得
    19.          itemList = reaper.AZ_InsertMediaItems(track, filePathList, startPos, 1)
    20. ・音声ファイルを「voice」トラックに挿入し、メディアアイテムのリストを取得
    21.          reaper.AZ_P4_Disconnect()
    22. ・perforceから切断
    23.     end
    24.     reaper.AZ_SetMediaItemListHANDAUTOMER(itemList, 2)
    25. ・挿入したメディアアイテム全てにHANDAUTOMERを実行
    26.     excelDoc = reaper.AZ_Excel_OpenFile(excelPath)
    27. ・Excelファイルを開く
    28.     sheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, "script")
    29. ・「script」ワークシートを開く
    30.     color, _, _, _ = reaper.AZ_GetRandomColor()
    31. ・ランダムな色を取得
    32.     for i, item in pairs(itemList) do
    33. ・挿入したメディアアイテム全てに対してループ
    34.         itemName = reaper.AZ_GetMediaItemName(item)
    35. ・メディアアイテムの名前を取得
    36.         itemStartPos = reaper.AZ_GetMediaItemStartTimeSeconds(item)
      
              itemEndPos = reaper.AZ_GetMediaItemEndTime(item)
    37.         reaper.AZ_AddRegionMarker(0, itemStartPos, itemEndPos, itemName, -1, color)
    38. ・メディアアイテムの範囲にリージョンを追加
    39.         result = reaper.AZ_Excel_SearchRowsInWorksheet(sheet, itemName, "A", "", false)
    40. ・ワークシート内にメディアアイテム名に対応する行があるか検索
    41.         exists = false
      
              for j, row in pairs(result["Cells"]) do
    42. ・検索結果の最初の行を取得
    43.             exists = true
    44.             Msg("name: " .. row["A"])
      
                  Msg("Loudness: " .. row["C"])
      
                  Msg("")
    45. ・コンソールにメディアアイテム名とラウドネス値を表示
    46.             loudness =  tonumber(row["C"])
    47. ・対応する行がある場合、C列に記載されたラウドネス値を取得
    48.         end
    49.         if exists == true then
      
                   reaper.AZ_SetMediaItemLoudnessMaxMomentary(item, loudness)
    50. ・ラウドネス値が取得できた場合のみ、メディアアイテムのラウドネス値をその値に設定する
    51.         end
      
          end
    52.     reaper.AZ_Excel_CloseFile(excelDoc)
    53. ・Excelファイルを閉じる
    54. end
    55. function main()
    56. ・メイン関数定義
    57.     retval, inputList = reaper.AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")
    58. ・必要事項の入力を要求
    59.     if retval == false then return end
    60. ・キャンセルされた場合、処理を中断
    61.     deptPath = inputList[1]
      
          excelPath = inputList[2]
    62. ・入力値からデポパスとExcelパスを取得
    63.     InsertAndSetLoudness(deptPath, excelPath)
    64. ・関数を実行
    65. end
    66. main()
    67. ・メイン関数を実行

    実行画面

  • AZSTOKE_Excel_ImportToWwisePerforceで管理された音声ファイルをExcelの表を基に設定し、Wwiseに自動実装②

    実行前の準備

    Excelファイルを用意する インポートする音声ファイルを用意する Wwiseプロジェクトを用意する

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    p4URL = "********"
    
    p4UserName = "********"
    
    p4Password = "********"
    
    p4Workspace = "********"
    
    
    function InsertAndSetLoudness(depotPath, excelPath)
    
    
        track, trackID = reaper.AZ_InsertTrackSearchUniqueOnly(0, "voice")
    
    
        trackCount = reaper.CountTrackMediaItems(track)
    
    
        endTime = reaper.AZ_GetTrackMediaEndTime(0, trackID, trackCount - 1)
    
    
        startPos = endTime + 3
    
    
        if reaper.AZ_P4_Connect(p4URL, p4UserName, p4Password)then
    
    
             filePathList = reaper.AZ_P4_ExportAudioToProject(p4Workspace, depotPath, "", -1, "wav")
    
    
             itemList = reaper.AZ_InsertMediaItems(track, filePathList, startPos, 1)
    
    
             reaper.AZ_P4_Disconnect()
    
        end
    
    
        reaper.AZ_SetMediaItemListHANDAUTOMER(itemList, 2)
    
    
        excelDoc = reaper.AZ_Excel_OpenFile(excelPath)
    
    
        sheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, "script")
    
    
        color, _, _, _ = reaper.AZ_GetRandomColor()
    
    
        for i, item in pairs(itemList) do
    
            itemName = reaper.AZ_GetMediaItemName(item)
    
            itemStartPos = reaper.AZ_GetMediaItemStartTimeSeconds(item)
    
            itemEndPos = reaper.AZ_GetMediaItemEndTime(item)
    
    
            reaper.AZ_AddRegionMarker(0, itemStartPos, itemEndPos, itemName, -1, color)
    
    
            result = reaper.AZ_Excel_SearchRowsInWorksheet(sheet, itemName, "A", "", false)
    
    
            exists = false
    
            for j, row in pairs(result["Cells"]) do
    
                exists = true
    
    
                Msg("name: " .. row["A"])
    
                Msg("Loudness: " .. row["C"])
    
                Msg("")
    
    
                loudness =  tonumber(row["C"])
    
            end
    
    
            if exists == true then
    
                 reaper.AZ_SetMediaItemLoudnessMaxMomentary(item, loudness)
    
    
            end
    
        end
    
    
        reaper.AZ_Excel_CloseFile(excelDoc)
    
    
    end
    
    
    function ImportToWwise(excelPath)
    
    
        path = reaper.AZ_SetProjectPathFolder("Rec", 3)
    
        renderOptions = {
    
            OutputDir = path,
    
            Channels = 1,
    
            FileName = "$region",
    
            RenderingRangeType = 5,
    
        }
    
    
        renderedFiles = reaper.AZ_RenderToAudioFile(0, renderOptions)
    
    
        excelDoc = reaper.AZ_Excel_OpenFile(excelPath)
    
    
        sheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, "script")
    
    
        if reaper.AZ_Wwise_Connect("127.0.0.1",  8080)then
    
    
            for i, filePath in pairs(renderedFiles) do
    
    
                fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]
    
    
                result = reaper.AZ_Excel_SearchRowsInWorksheet(sheet, fileName, "A", "", false)
    
    
                exists = false
    
                for j, row in pairs(result["Cells"]) do
    
                    if exists == false then
    
                        exists = true
    
    
                        wSoundPath = row["D"]
    
                        wEventPath = row["E"]
    
                        wSubFolder = row["F"]
    
    
                        sound = reaper.AZ_Wwise_CreateSoundSFX(wSoundPath, filePath, fileName, wSubFolder, true)
    
    
                        reaper.AZ_Wwise_DeleteObject(wEventPath .. "\\" .. sound["Name"])
    
                        event = reaper.AZ_Wwise_CreateEvent(wEventPath, sound["Name"], -1)
    
    
                        reaper.AZ_Wwise_AddActionToEvent(event["ID"], 2, sound["ID"])
    
                        reaper.AZ_Wwise_AddActionToEvent(event["ID"], 1, sound["ID"])
    
    
                        Msg("SoundPath: " .. sound["Path"])
    
                        Msg("EventPath: " .. event["Path"])
    
                        Msg("")
    
    
                    end
    
                end
    
    
            end
    
    
            reaper.AZ_Wwise_SaveProject()
    
    
            reaper.AZ_Wwise_Disconnect()
    
    
        end
    
    
        reaper.AZ_Excel_CloseFile(excelDoc)
    
    
        return
    
    
    end
    
    
    function main()
    
    
        retval, inputList = reaper.AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")
    
    
        if retval == false then return end
    
    
        deptPath = inputList[1]
    
        excelPath = inputList[2]
    
    
        InsertAndSetLoudness(deptPath, excelPath)
    
    
        ImportToWwise(excelPath)
    
    
    end
    
    
    main()

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. -------- ここから REAPDOCK InsertAndSetLoudnessを参照 --------
    3. p4URL = "********"
      
      p4UserName = "********"
      
      p4Password = "********"
      
      p4Workspace = "********"
    4. function InsertAndSetLoudness(depotPath, excelPath)
    5.     track, trackID = reaper.AZ_InsertTrackSearchUniqueOnly(0, "voice")
    6.     trackCount = reaper.CountTrackMediaItems(track)
    7.     endTime = reaper.AZ_GetTrackMediaEndTime(0, trackID, trackCount - 1)
    8.     startPos = endTime + 3
    9.     if reaper.AZ_P4_Connect(p4URL, p4UserName, p4Password)then
    10.          filePathList = reaper.AZ_P4_ExportAudioToProject(p4Workspace, depotPath, "", -1, "wav")
    11.          itemList = reaper.AZ_InsertMediaItems(track, filePathList, startPos, 1)
    12.          reaper.AZ_P4_Disconnect()
      
          end
    13.     reaper.AZ_SetMediaItemListHANDAUTOMER(itemList, 2)
    14.     excelDoc = reaper.AZ_Excel_OpenFile(excelPath)
    15.     sheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, "script")
    16.     color, _, _, _ = reaper.AZ_GetRandomColor()
    17.     for i, item in pairs(itemList) do
      
              itemName = reaper.AZ_GetMediaItemName(item)
      
              itemStartPos = reaper.AZ_GetMediaItemStartTimeSeconds(item)
      
              itemEndPos = reaper.AZ_GetMediaItemEndTime(item)
    18.         reaper.AZ_AddRegionMarker(0, itemStartPos, itemEndPos, itemName, -1, color)
    19.         result = reaper.AZ_Excel_SearchRowsInWorksheet(sheet, itemName, "A", "", false)
    20.         exists = false
      
              for j, row in pairs(result["Cells"]) do
      
                  exists = true
    21.             Msg("name: " .. row["A"])
      
                  Msg("Loudness: " .. row["C"])
      
                  Msg("")
    22.             loudness =  tonumber(row["C"])
      
              end
    23.         if exists == true then
      
                   reaper.AZ_SetMediaItemLoudnessMaxMomentary(item, loudness)
    24.         end
      
          end
    25.     reaper.AZ_Excel_CloseFile(excelDoc)
    26. end
    27. -------- ここまで REAPDOCK InsertAndSetLoudnessを参照 --------
    28. function ImportToWwise(excelPath)
    29. ・リージョンをレンダリングし、Wwiseにインポートする関数を定義、引数はExcelパス
    30.     path = reaper.AZ_SetProjectPathFolder("Rec", 3)
    31. ・プロジェクトフォルダ内に「Rec」フォルダを作成し、そのパスを取得
    32.     renderOptions = {
      
              OutputDir = path,
      
              Channels = 1,
      
              FileName = "$region",
      
              RenderingRangeType = 5,
      
          }
    33. ・レンダリングオプションを設定
    34.     renderedFiles = reaper.AZ_RenderToAudioFile(0, renderOptions)
    35. ・リージョンごとに音声ファイルをレンダリングし、そのパスのリストを取得
    36.     excelDoc = reaper.AZ_Excel_OpenFile(excelPath)
    37. ・Excelファイルを開く
    38.     sheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, "script")
    39. ・「script」ワークシートを開く
    40.     if reaper.AZ_Wwise_Connect("127.0.0.1",  8080)then
    41. ・Wwiseに接続
    42.         for i, filePath in pairs(renderedFiles) do
    43. ・レンダリングした音声ファイル全てに対してループ
    44.             fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]
    45. ・音声ファイル名を取得
    46.             result = reaper.AZ_Excel_SearchRowsInWorksheet(sheet, fileName, "A", "", false)
    47. ・ワークシート内に音声ファイル名に対応する行があるか検索
    48.             exists = false
      
                  for j, row in pairs(result["Cells"]) do
      
                      if exists == false then
      
                          exists = true
    49. ・検索結果の最初の行を取得
    50.                     wSoundPath = row["D"]
      
                          wEventPath = row["E"]
      
                          wSubFolder = row["F"]
    51. ・対応する行がある場合、D~F列に記載されたWwiseパス情報を取得
    52.                     sound = reaper.AZ_Wwise_CreateSoundSFX(wSoundPath, filePath, fileName, wSubFolder, true)
    53. ・Wwiseにサウンドオブジェクトを作成
    54.                     reaper.AZ_Wwise_DeleteObject(wEventPath .. "\\" .. sound["Name"])
    55. ・既に同名のイベントオブジェクトが存在する場合は削除
    56.                     event = reaper.AZ_Wwise_CreateEvent(wEventPath, sound["Name"], -1)
    57. ・Wwiseにイベントオブジェクトを作成
    58.                     reaper.AZ_Wwise_AddActionToEvent(event["ID"], 2, sound["ID"])
    59. ・イベントにStopアクションを追加
    60.                     reaper.AZ_Wwise_AddActionToEvent(event["ID"], 1, sound["ID"])
    61. ・イベントにPlayアクションを追加
    62.                     Msg("SoundPath: " .. sound["Path"])
      
                          Msg("EventPath: " .. event["Path"])
      
                          Msg("")
    63. ・コンソールにWwiseパス情報を表示
    64.                 end
      
                  end
    65.         end
    66.         reaper.AZ_Wwise_SaveProject()
    67. ・Wwiseプロジェクトを保存
    68.         reaper.AZ_Wwise_Disconnect()
    69. ・Wwiseから切断
    70.     end
    71.     reaper.AZ_Excel_CloseFile(excelDoc)
    72. ・Excelファイルを閉じる
    73.     return
    74. end
    75. function main()
    76.     retval, inputList = reaper.AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")
    77.     if retval == false then return end
    78.     deptPath = inputList[1]
      
          excelPath = inputList[2]
    79.     InsertAndSetLoudness(deptPath, excelPath)
    80.     ImportToWwise(excelPath)
    81. ・リージョンをレンダリングし、Wwiseにインポートする関数を実行
    82. end
    83. main()

    実行画面

  • AZSTOKE_Excel_GenerateAndSlackPerforceで管理された音声ファイルをExcelの表を基に設定し、Wwiseに自動実装③

    実行前の準備

    Excelファイルを用意する インポートする音声ファイルを用意する Wwiseプロジェクトを用意する

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    p4URL = "********"
    
    p4UserName = "********"
    
    p4Password = "********"
    
    p4Workspace = "********"
    
    
    slackProfilePath = reaper.GetResourcePath() .. "\\AZData\\Slack"
    
    
    function InsertAndSetLoudness(depotPath, excelPath)
    
    
        track, trackID = reaper.AZ_InsertTrackSearchUniqueOnly(0, "voice")
    
    
        trackCount = reaper.CountTrackMediaItems(track)
    
    
        endTime = reaper.AZ_GetTrackMediaEndTime(0, trackID, trackCount - 1)
    
    
        startPos = endTime + 3
    
    
        if reaper.AZ_P4_Connect(p4URL, p4UserName, p4Password)then
    
    
             filePathList = reaper.AZ_P4_ExportAudioToProject(p4Workspace, depotPath, "", -1, "wav")
    
    
             itemList = reaper.AZ_InsertMediaItems(track, filePathList, startPos, 1)
    
    
             reaper.AZ_P4_Disconnect()
    
        end
    
    
        reaper.AZ_SetMediaItemListHANDAUTOMER(itemList, 2)
    
    
        excelDoc = reaper.AZ_Excel_OpenFile(excelPath)
    
    
        sheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, "script")
    
    
        color, _, _, _ = reaper.AZ_GetRandomColor()
    
    
        for i, item in pairs(itemList) do
    
            itemName = reaper.AZ_GetMediaItemName(item)
    
            itemStartPos = reaper.AZ_GetMediaItemStartTimeSeconds(item)
    
            itemEndPos = reaper.AZ_GetMediaItemEndTime(item)
    
    
            reaper.AZ_AddRegionMarker(0, itemStartPos, itemEndPos, itemName, -1, color)
    
    
            result = reaper.AZ_Excel_SearchRowsInWorksheet(sheet, itemName, "A", "", false)
    
    
            exists = false
    
            for j, row in pairs(result["Cells"]) do
    
                exists = true
    
    
                Msg("name: " .. row["A"])
    
                Msg("Loudness: " .. row["C"])
    
                Msg("")
    
    
                loudness =  tonumber(row["C"])
    
            end
    
    
            if exists == true then
    
                 reaper.AZ_SetMediaItemLoudnessMaxMomentary(item, loudness)
    
    
            end
    
        end
    
    
        reaper.AZ_Excel_CloseFile(excelDoc)
    
    
    end
    
    
    function ImportToWwise(excelPath)
    
    
        path = reaper.AZ_SetProjectPathFolder("Rec", 3)
    
        renderOptions = {
    
            OutputDir = path,
    
            Channels = 1,
    
            FileName = "$region",
    
            RenderingRangeType = 5,
    
        }
    
    
        renderedFiles = reaper.AZ_RenderToAudioFile(0, renderOptions)
    
    
        excelDoc = reaper.AZ_Excel_OpenFile(excelPath)
    
    
        sheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, "script")
    
    
        if reaper.AZ_Wwise_Connect("127.0.0.1",  8080)then
    
    
            for i, filePath in pairs(renderedFiles) do
    
    
                fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]
    
    
                result = reaper.AZ_Excel_SearchRowsInWorksheet(sheet, fileName, "A", "", false)
    
    
                exists = false
    
                for j, row in pairs(result["Cells"]) do
    
                    if exists == false then
    
                        exists = true
    
    
                        wSoundPath = row["D"]
    
                        wEventPath = row["E"]
    
                        wSubFolder = row["F"]
    
    
                        sound = reaper.AZ_Wwise_CreateSoundSFX(wSoundPath, filePath, fileName, wSubFolder, true)
    
    
                        reaper.AZ_Wwise_DeleteObject(wEventPath .. "\\" .. sound["Name"])
    
                        event = reaper.AZ_Wwise_CreateEvent(wEventPath, sound["Name"], -1)
    
    
                        reaper.AZ_Wwise_AddActionToEvent(event["ID"], 2, sound["ID"])
    
                        reaper.AZ_Wwise_AddActionToEvent(event["ID"], 1, sound["ID"])
    
    
                        Msg("SoundPath: " .. sound["Path"])
    
                        Msg("EventPath: " .. event["Path"])
    
                        Msg("")
    
    
                    end
    
                end
    
    
            end
    
    
            reaper.AZ_Wwise_SaveProject()
    
    
            reaper.AZ_Wwise_Disconnect()
    
    
        end
    
    
        reaper.AZ_Excel_CloseFile(excelDoc)
    
    
        return
    
    
    end
    
    
    function GenerateSoundBank()
    
    
        generatedLog = ""
    
    
        if reaper.AZ_Wwise_Connect("127.0.0.1",  8080)then
    
    
            generatedLog = reaper.AZ_Wwise_GenerateSoundBank({"Voice"}, {"Windows"}, {"Japanese"})
    
    
            reaper.AZ_Wwise_Disconnect()
    
    
        end
    
    
        return generatedLog
    
    
    end
    
    
    function GetSlackUserData()
    
        slackDataPath = reaper.GetResourcePath() .. "\\AZData\\Slack"
    
    
        token = reaper.AZ_ReadFile(slackDataPath, "slackToken.txt")
    
    
        userName =  reaper.AZ_ReadFile(slackDataPath, "slackUser.txt")
    
    
        if userName == "" or token == "" then
    
            retval, obj = reaper.AZ_GetUserInputList("SlackInfo", 2, "slackトークン,通知先ユーザー", token..","..userName )
    
            token = obj[1]
    
            userName = obj[2]
    
            reaper.AZ_WriteFile(slackDataPath, "slackToken.txt", token, 0)
    
            reaper.AZ_WriteFile(slackDataPath, "slackUser.txt", userName, 0)
    
        else
    
            token = reaper.AZ_ReplaceSearchString(token, "\n", "")
    
            userName = reaper.AZ_ReplaceSearchString(userName, "\n", "")
    
        end
    
    
        return token, userName
    
    end
    
    
    function SendSlackMessage(token, userName, caption, body)
    
    
        slackMessage = reaper.AZ_Slack_PostDirectMessage(token, userName, caption, false)
    
    
        if slackMessage ~= nil then
    
    
          t0 = os.clock()
    
          while os.clock() - t0 <= 5 do end
    
    
          slackMessage = reaper.AZ_Slack_ReplayMessage(token, slackMessage["Channel"], slackMessage["TimeStamp"], body)
    
    
        end
    
    end
    
    
    function main()
    
    
        token, userName = GetSlackUserData()
    
    
        retval, inputList = reaper.AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")
    
    
        if retval == false then return end
    
    
        deptPath = inputList[1]
    
        excelPath = inputList[2]
    
    
        InsertAndSetLoudness(deptPath, excelPath)
    
    
        ImportToWwise(excelPath)
    
    
        Msg("Generate Bank...")
    
    
        generatedLog = GenerateSoundBank()
    
    
        if #generatedLog == 0 then
    
           body = "Success!"
    
    
        else
    
    
            for i, line in pairs(generatedLog) do
    
    
                body = body .. line .. "\n"
    
            end
    
    
        end
    
    
        Msg(body)
    
    
        SendSlackMessage(token, userName, "Wwise Generate Result", body)
    
    
    end
    
    
    main()

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. -------- ここから REAPDOCK InsertAndSetLoudnessを参照 --------
    3. p4URL = "********"
      
      p4UserName = "********"
      
      p4Password = "********"
      
      p4Workspace = "********"
    4. slackProfilePath = reaper.GetResourcePath() .. "\\AZData\\Slack"
    5. function InsertAndSetLoudness(depotPath, excelPath)
    6.     track, trackID = reaper.AZ_InsertTrackSearchUniqueOnly(0, "voice")
    7.     trackCount = reaper.CountTrackMediaItems(track)
    8.     endTime = reaper.AZ_GetTrackMediaEndTime(0, trackID, trackCount - 1)
    9.     startPos = endTime + 3
    10.     if reaper.AZ_P4_Connect(p4URL, p4UserName, p4Password)then
    11.          filePathList = reaper.AZ_P4_ExportAudioToProject(p4Workspace, depotPath, "", -1, "wav")
    12.          itemList = reaper.AZ_InsertMediaItems(track, filePathList, startPos, 1)
    13.          reaper.AZ_P4_Disconnect()
      
          end
    14.     reaper.AZ_SetMediaItemListHANDAUTOMER(itemList, 2)
    15.     excelDoc = reaper.AZ_Excel_OpenFile(excelPath)
    16.     sheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, "script")
    17.     color, _, _, _ = reaper.AZ_GetRandomColor()
    18.     for i, item in pairs(itemList) do
      
              itemName = reaper.AZ_GetMediaItemName(item)
      
              itemStartPos = reaper.AZ_GetMediaItemStartTimeSeconds(item)
      
              itemEndPos = reaper.AZ_GetMediaItemEndTime(item)
    19.         reaper.AZ_AddRegionMarker(0, itemStartPos, itemEndPos, itemName, -1, color)
    20.         result = reaper.AZ_Excel_SearchRowsInWorksheet(sheet, itemName, "A", "", false)
    21.         exists = false
      
              for j, row in pairs(result["Cells"]) do
      
                  exists = true
    22.             Msg("name: " .. row["A"])
      
                  Msg("Loudness: " .. row["C"])
      
                  Msg("")
    23.             loudness =  tonumber(row["C"])
      
              end
    24.         if exists == true then
      
                   reaper.AZ_SetMediaItemLoudnessMaxMomentary(item, loudness)
    25.         end
      
          end
    26.     reaper.AZ_Excel_CloseFile(excelDoc)
    27. end
    28. -------- ここまで REAPDOCK InsertAndSetLoudnessを参照 --------
    29. -------- ここから REAPDOCK InsertAndSetLoudnessを参照 --------
    30. function ImportToWwise(excelPath)
    31.     path = reaper.AZ_SetProjectPathFolder("Rec", 3)
      
          renderOptions = {
      
              OutputDir = path,
      
              Channels = 1,
      
              FileName = "$region",
      
              RenderingRangeType = 5,
      
          }
    32.     renderedFiles = reaper.AZ_RenderToAudioFile(0, renderOptions)
    33.     excelDoc = reaper.AZ_Excel_OpenFile(excelPath)
    34.     sheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, "script")
    35.     if reaper.AZ_Wwise_Connect("127.0.0.1",  8080)then
    36.         for i, filePath in pairs(renderedFiles) do
    37.             fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]
    38.             result = reaper.AZ_Excel_SearchRowsInWorksheet(sheet, fileName, "A", "", false)
    39.             exists = false
      
                  for j, row in pairs(result["Cells"]) do
      
                      if exists == false then
      
                          exists = true
    40.                     wSoundPath = row["D"]
      
                          wEventPath = row["E"]
      
                          wSubFolder = row["F"]
    41.                     sound = reaper.AZ_Wwise_CreateSoundSFX(wSoundPath, filePath, fileName, wSubFolder, true)
    42.                     reaper.AZ_Wwise_DeleteObject(wEventPath .. "\\" .. sound["Name"])
      
                          event = reaper.AZ_Wwise_CreateEvent(wEventPath, sound["Name"], -1)
    43.                     reaper.AZ_Wwise_AddActionToEvent(event["ID"], 2, sound["ID"])
      
                          reaper.AZ_Wwise_AddActionToEvent(event["ID"], 1, sound["ID"])
    44.                     Msg("SoundPath: " .. sound["Path"])
      
                          Msg("EventPath: " .. event["Path"])
      
                          Msg("")
    45.                 end
      
                  end
    46.         end
    47.         reaper.AZ_Wwise_SaveProject()
    48.         reaper.AZ_Wwise_Disconnect()
    49.     end
    50.     reaper.AZ_Excel_CloseFile(excelDoc)
    51.     return
    52. end
    53. -------- ここまで REAPDOCK InsertAndSetLoudness を参照 --------
    54. function GenerateSoundBank()
    55. ・サウンドバンクを生成する関数を定義
    56.     generatedLog = ""
    57. ・生成ログ用の変数を初期化
    58.     if reaper.AZ_Wwise_Connect("127.0.0.1",  8080)then
    59. ・Wwiseに接続
    60.         generatedLog = reaper.AZ_Wwise_GenerateSoundBank({"Voice"}, {"Windows"}, {"Japanese"})
    61. ・「Voice」サウンドバンクを「Windows」プラットフォーム、「Japanese」言語で生成し、ログを取得
    62.         reaper.AZ_Wwise_Disconnect()
    63. ・Wwiseから切断
    64.     end
    65.     return generatedLog
    66. ・生成ログを返す
    67. end
    68. function GetSlackUserData()
    69. ・Slackのユーザーデータを取得する関数を定義
    70.     slackDataPath = reaper.GetResourcePath() .. "\\AZData\\Slack"
    71. ・Slackデータの保存先パスを設定
    72.     token = reaper.AZ_ReadFile(slackDataPath, "slackToken.txt")
    73. ・Slackトークンをファイルから読み込み
    74.     userName =  reaper.AZ_ReadFile(slackDataPath, "slackUser.txt")
    75. ・通知先ユーザー名をファイルから読み込み
    76.     if userName == "" or token == "" then
    77. ・どちらかが空の場合、ユーザーに入力を促す
    78. retval, obj = reaper.AZ_GetUserInputList("SlackInfo", 2, "slackトークン,通知先ユーザー", token..","..userName ) token = obj[1] userName = obj[2] reaper.AZ_WriteFile(slackDataPath, "slackToken.txt", token, 0) reaper.AZ_WriteFile(slackDataPath, "slackUser.txt", userName, 0)
    79. ・入力された情報をファイルに保存
    80.     else
      
              token = reaper.AZ_ReplaceSearchString(token, "\n", "")
      
              userName = reaper.AZ_ReplaceSearchString(userName, "\n", "")
    81. ・読み込んだ情報から改行コードを削除
    82.     end
    83.     return token, userName
    84. ・トークンとユーザー名を返す
    85. end
    86. function SendSlackMessage(token, userName, caption, body)
    87. ・Slackにメッセージを送信する関数を定義
    88.     slackMessage = reaper.AZ_Slack_PostDirectMessage(token, userName, caption, false)
    89. ・指定したユーザーにダイレクトメッセージを送信し、メッセージ情報を取得
    90.     if slackMessage ~= nil then
    91. ・メッセージ情報が取得できた場合
    92.       t0 = os.clock()
      
            while os.clock() - t0 <= 5 do end
    93. ・5秒待機(Slackの仕様により、メッセージの編集が反映されるまで時間がかかるため)
    94.       slackMessage = reaper.AZ_Slack_ReplayMessage(token, slackMessage["Channel"], slackMessage["TimeStamp"], body)
    95. ・取得したメッセージに対して返信メッセージを送信
    96.     end
      
      end
    97. function main()
    98.     token, userName = GetSlackUserData()
    99.     retval, inputList = reaper.AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")
    100.     if retval == false then return end
    101.     deptPath = inputList[1]
      
          excelPath = inputList[2]
    102.     InsertAndSetLoudness(deptPath, excelPath)
    103.     ImportToWwise(excelPath)
    104.     Msg("Generate Bank...")
    105. ・サウンドバンク生成開始のメッセージを表示
    106.     generatedLog = GenerateSoundBank()
    107. ・サウンドバンクを生成し、ログを取得
    108.     if #generatedLog == 0 then
      
             body = "Success!"
    109. ・生成ログが存在しない場合、成功メッセージを設定
    110.     else
    111.         for i, line in pairs(generatedLog) do
    112.             body = body .. line .. "\n"
    113. ・生成ログが存在する場合、ログ内容をメッセージ本文に設定
    114.         end
    115.     end
    116.     Msg(body)
    117. ・コンソールに生成結果を表示
    118.     SendSlackMessage(token, userName, "Wwise Generate Result", body)
    119. ・Slackに生成結果を送信
    120. end
    121. main()

    実行画面

  • AZSTOKE_Excel_GetP4FilesPerforceで管理された音声ファイルをExcelに記録し、Wwise上に実装されているか確認①

    実行前の準備

    Excelファイルを用意する 音声ファイルを用意する

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    p4URL = "********"
    
    p4UserName = "********"
    
    p4Password = "********"
    
    p4Workspace = "********"
    
    
    function GetP4Files(depotPath, excelPath, sheetName)
    
    
        filePathList = {}
    
    
        if reaper.AZ_P4_Connect(p4URL, p4UserName, p4Password)then
    
    
             filePathList = reaper.AZ_P4_SyncFiles(p4Workspace, depotPath, -1, "wav")
    
    
             reaper.AZ_P4_Disconnect()
    
        end
    
    
        excelDoc = reaper.AZ_Excel_OpenFile(excelPath)
    
    
        worksheet = reaper.AZ_Excel_AddWorksheet(excelDoc, sheetName)
    
    
        row = 1
    
    
        reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, "Name")
    
    
        reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, "Local Path")
    
    
        for i, filePath in pairs(filePathList) do
    
    
             row = row + 1
    
    
             fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]
    
    
             reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, fileName)
    
    
             reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, filePath)
    
    
        end
    
    
        reaper.AZ_Excel_SaveDocument(excelDoc)
    
    
        reaper.AZ_Excel_CloseFile(excelDoc)
    
    
    end
    
    
    function main()
    
    
        retval, inputList = reaper.AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")
    
    
        if retval == false then return end
    
    
        deptPath = inputList[1]
    
        excelPath = inputList[2]
    
    
        sheetName = "voices_" ..os.date("%Y%m%d_%H%M%S", ts)
    
    
        GetP4Files(deptPath, excelPath, sheetName)
    
    
    end
    
    
    main()

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. ・RIGDOCKSをインポート
    3. p4URL = "********"
      
      p4UserName = "********"
      
      p4Password = "********"
      
      p4Workspace = "********"
    4. ・Perforce接続情報を設定
    5. function GetP4Files(depotPath, excelPath, sheetName)
    6. ・P4からファイルを取得してExcelに書き出す関数を定義
    7.     filePathList = {}
    8. ・ファイルパスリストの初期化
    9.     if reaper.AZ_P4_Connect(p4URL, p4UserName, p4Password)then
    10. ・Perforceに接続
    11.          filePathList = reaper.AZ_P4_SyncFiles(p4Workspace, depotPath, -1, "wav")
    12. ・WAVファイルを同期
    13.          reaper.AZ_P4_Disconnect()
    14. ・Perforceから切断 end
    15.     excelDoc = reaper.AZ_Excel_OpenFile(excelPath)
    16. ・Excelファイルを開く
    17.     worksheet = reaper.AZ_Excel_AddWorksheet(excelDoc, sheetName)
    18. ・新しいワークシートを追加
    19.     row = 1
    20.     reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, "Name")
    21.     reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, "Local Path")
    22. ・ヘッダー行を設定
    23.     for i, filePath in pairs(filePathList) do
    24. ・ファイルパスリストをループ
    25.          row = row + 1
    26.          fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]
    27. ・拡張子なしのファイル名を取得
    28.          reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, fileName)
    29. ・ファイル名をExcelに記載
    30.          reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, filePath)
    31. ・ローカルパスをExcelに記載
    32.     end
    33.     reaper.AZ_Excel_SaveDocument(excelDoc)
    34. ・Excelファイルを保存
    35.     reaper.AZ_Excel_CloseFile(excelDoc)
    36. ・Excelファイルを閉じる
    37. end
    38. function main()
    39. ・メイン関数を定義
    40.     retval, inputList = reaper.AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")
    41.     if retval == false then return end
    42.     deptPath = inputList[1]
      
          excelPath = inputList[2]
    43. ・ユーザー入力を取得
    44.     sheetName = "voices_" ..os.date("%Y%m%d_%H%M%S", ts)
    45. ・シート名を生成
    46.     GetP4Files(deptPath, excelPath, sheetName)
    47. ・P4からファイルを取得してExcelに書き出す関数を実行
    48. end
    49. main()
    50. ・メイン関数を実行

    実行画面

  • AZSTOKE_Excel_SearchVoicesInWwisePerforceで管理された音声ファイルをExcelに記録し、Wwise上に実装されているか確認②

    実行前の準備

    Excelファイルを用意する 音声ファイルを用意する

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    p4URL = "********"
    
    p4UserName = "********"
    
    p4Password = "********"
    
    p4Workspace = "********"
    
    
    function GetP4Files(depotPath, excelPath, sheetName)
    
    
        filePathList = {}
    
    
        if reaper.AZ_P4_Connect(p4URL, p4UserName, p4Password)then
    
    
             filePathList = reaper.AZ_P4_SyncFiles(p4Workspace, depotPath, -1, "wav")
    
    
             reaper.AZ_P4_Disconnect()
    
        end
    
    
        excelDoc = reaper.AZ_Excel_OpenFile(excelPath)
    
    
        worksheet = reaper.AZ_Excel_AddWorksheet(excelDoc, sheetName)
    
    
        row = 1
    
    
        reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, "Name")
    
    
        reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, "Local Path")
    
    
        for i, filePath in pairs(filePathList) do
    
    
             row = row + 1
    
    
             fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]
    
    
             reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, fileName)
    
    
             reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, filePath)
    
    
        end
    
    
        reaper.AZ_Excel_SaveDocument(excelDoc)
    
    
        reaper.AZ_Excel_CloseFile(excelDoc)
    
    
    end
    
    
    function SearchVoicesInWwise(excelPath, sheetName)
    
    
        voiceSoundPath = "\\Actor-Mixer Hierarchy\\VOICE"
    
        voiceEventPath = "\\Events\\VOICE"
    
    
        if reaper.AZ_Wwise_Connect("127.0.0.1", 8080) then
    
            soundTable = {}
    
            eventTable = {}
    
    
           soundItemList = reaper.AZ_Wwise_SearchSoundItemFromName(voiceSoundPath, "")
    
    
            for k, sound in pairs(soundItemList) do
    
    
                soundTable[sound["Name"]] = true
    
    
            end
    
    
            eventList = reaper.AZ_Wwise_GetChildrenList(voiceEventPath, true)
    
            for k, event in pairs(eventList) do
    
    
                eventTable[event["Name"]] = true
    
    
            end
    
    
            reaper.AZ_Wwise_Disconnect()
    
    
        end
    
    
        excelDoc = reaper.AZ_Excel_OpenFile(excelPath)
    
    
        worksheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, sheetName)
    
    
        rows = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, ".+", "A", "2:5000,A", true)
    
    
        unimportedSoundList = {}
    
        unimportedEventList = {}
    
    
        for i, row in pairs(rows["Cells"]) do
    
    
            if soundTable[row["A"]] ~= true then
    
    
                table.insert(unimportedSoundList, row["A"])
    
            end
    
            if eventTable[row["A"]] ~= true then
    
    
                table.insert(unimportedEventList, row["A"])
    
            end
    
    
        end
    
    
        reaper.AZ_Excel_CloseFile(excelDoc)
    
    
        Msg("以下のサウンドが実装されていません")
    
        ShowObject(unimportedSoundList)
    
        Msg("")
    
        Msg("以下のイベントが実装されていません")
    
        ShowObject(unimportedEventList)
    
    
        return unimportedSoundList
    
    
    end
    
    
    function main()
    
    
        retval, inputList = reaper.AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")
    
    
        if retval == false then return end
    
    
        deptPath = inputList[1]
    
        excelPath = inputList[2]
    
    
        sheetName = "voices_" ..os.date("%Y%m%d_%H%M%S", ts)
    
    
        GetP4Files(deptPath, excelPath, sheetName)
    
    
        unimportedSoundList = SearchVoicesInWwise(excelPath, sheetName)
    
    
        reaper.AZ_ShowMessageBox_Info("success!", "", reaper.AZ_WindowType_OK())
    
    end
    
    
    main()

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. ・RIGDOCKSをインポート
    3. -------- ここから REAPDOCK AZSTOKE_Excel_GetP4Filesを参照 --------
    4. p4URL = "********"
      
      p4UserName = "********"
      
      p4Password = "********"
      
      p4Workspace = "********"
    5. function GetP4Files(depotPath, excelPath, sheetName)
    6.     filePathList = {}
    7.     if reaper.AZ_P4_Connect(p4URL, p4UserName, p4Password)then
    8.          filePathList = reaper.AZ_P4_SyncFiles(p4Workspace, depotPath, -1, "wav")
    9.          reaper.AZ_P4_Disconnect()
      
          end
    10.     excelDoc = reaper.AZ_Excel_OpenFile(excelPath)
    11.     worksheet = reaper.AZ_Excel_AddWorksheet(excelDoc, sheetName)
    12.     row = 1
    13.     reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, "Name")
    14.     reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, "Local Path")
    15.     for i, filePath in pairs(filePathList) do
    16.          row = row + 1
    17.          fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]
    18.          reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, fileName)
    19.          reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, filePath)
    20.     end
    21.     reaper.AZ_Excel_SaveDocument(excelDoc)
    22.     reaper.AZ_Excel_CloseFile(excelDoc)
    23. end
    24. -------- ここまで REAPDOCK AZSTOKE_Excel_GetP4Filesを参照 --------
    25. function SearchVoicesInWwise(excelPath, sheetName)
    26. ・Wwise内のサウンドとイベントを検索し、Excelと照合する関数を定義
    27.     voiceSoundPath = "\\Actor-Mixer Hierarchy\\VOICE"
      
          voiceEventPath = "\\Events\\VOICE"
    28. ・Wwise内のサウンドとイベントの親パスを設定
    29.     if reaper.AZ_Wwise_Connect("127.0.0.1", 8080) then
    30. ・Wwiseに接続
    31.         soundTable = {}
      
              eventTable = {}
    32. ・サウンドとイベントのテーブルを初期化
    33.        soundItemList = reaper.AZ_Wwise_SearchSoundItemFromName(voiceSoundPath, "")
    34. ・親パス配下のサウンドオブジェクトを全て取得
    35.         for k, sound in pairs(soundItemList) do
    36.             soundTable[sound["Name"]] = true
    37.         end
    38. ・サウンドオブジェクト名をテーブルに格納
    39.         eventList = reaper.AZ_Wwise_GetChildrenList(voiceEventPath, true)
    40. ・親パス配下のイベントオブジェクトを全て取得
    41.         for k, event in pairs(eventList) do
    42.             eventTable[event["Name"]] = true
    43.         end
    44. ・イベントオブジェクト名をテーブルに格納
    45.         reaper.AZ_Wwise_Disconnect()
    46. ・Wwiseから切断
    47.     end
    48.     excelDoc = reaper.AZ_Excel_OpenFile(excelPath)
    49.     worksheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, sheetName)
    50. ・Excelファイルを開き、ワークシートを開く
    51.     rows = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, ".+", "A", "2:5000,A", true)
    52. ・ワークシートのA列からサウンド名リストを取得
    53.     unimportedSoundList = {}
      
          unimportedEventList = {}
    54. ・未実装サウンドリストと未実装イベントリストを初期化
    55.     for i, row in pairs(rows["Cells"]) do
    56. ・各行をループ
    57.         if soundTable[row["A"]] ~= true then
    58.             table.insert(unimportedSoundList, row["A"])
      
              end
    59. ・サウンドテーブルに存在しない場合、未実装サウンドリストに追加
    60.         if eventTable[row["A"]] ~= true then
    61.             table.insert(unimportedEventList, row["A"])
      
              end
    62. ・イベントテーブルに存在しない場合、未実装イベントリストに追加
    63.     end
    64.     reaper.AZ_Excel_CloseFile(excelDoc)
    65. ・Excelファイルを閉じる
    66. Msg("以下のサウンドが実装されていません") ShowObject(unimportedSoundList) Msg("") Msg("以下のイベントが実装されていません") ShowObject(unimportedEventList)
    67. ・未実装サウンドとイベントをログ出力
    68.     return unimportedSoundList
    69. ・未実装サウンドリストを返す
    70. end
    71. function main()
    72.     retval, inputList = reaper.AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")
    73.     if retval == false then return end
    74.     deptPath = inputList[1]
      
          excelPath = inputList[2]
    75.     sheetName = "voices_" ..os.date("%Y%m%d_%H%M%S", ts)
    76.     GetP4Files(deptPath, excelPath, sheetName)
    77.     unimportedSoundList = SearchVoicesInWwise(excelPath, sheetName)
    78. ・メイン関数を定義し、P4からファイルを取得してExcelに書き出し、Wwise内のサウンドとイベントを検索して照合する関数を実行
    79.     reaper.AZ_ShowMessageBox_Info("success!", "", reaper.AZ_WindowType_OK())
    80. ・完了メッセージを表示
    81. end
    82. main()

    実行画面

  • AZSTOKE_Excel_ImportunimportedFilesPerforceで管理された音声ファイルをExcelに記録し、Wwise上に実装されているか確認③

    実行前の準備

    Excelファイルを用意する 音声ファイルを用意する

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    p4URL = "********"
    
    p4UserName = "********"
    
    p4Password = "********"
    
    p4Workspace = "********"
    
    
    function GetP4Files(depotPath, excelPath, sheetName)
    
    
        filePathList = {}
    
    
        if reaper.AZ_P4_Connect(p4URL, p4UserName, p4Password)then
    
    
             filePathList = reaper.AZ_P4_SyncFiles(p4Workspace, depotPath, -1, "wav")
    
    
             reaper.AZ_P4_Disconnect()
    
        end
    
    
        excelDoc = reaper.AZ_Excel_OpenFile(excelPath)
    
    
        worksheet = reaper.AZ_Excel_AddWorksheet(excelDoc, sheetName)
    
    
        row = 1
    
    
        reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, "Name")
    
    
        reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, "Local Path")
    
    
        for i, filePath in pairs(filePathList) do
    
    
             row = row + 1
    
    
             fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]
    
    
             reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, fileName)
    
    
             reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, filePath)
    
    
        end
    
    
        reaper.AZ_Excel_SaveDocument(excelDoc)
    
    
        reaper.AZ_Excel_CloseFile(excelDoc)
    
    
    end
    
    
    function SearchVoicesInWwise(excelPath, sheetName)
    
    
        voiceSoundPath = "\\Actor-Mixer Hierarchy\\VOICE"
    
        voiceEventPath = "\\Events\\VOICE"
    
    
        if reaper.AZ_Wwise_Connect("127.0.0.1", 8080) then
    
            soundTable = {}
    
            eventTable = {}
    
    
           soundItemList = reaper.AZ_Wwise_SearchSoundItemFromName(voiceSoundPath, "")
    
    
            for k, sound in pairs(soundItemList) do
    
    
                soundTable[sound["Name"]] = true
    
    
            end
    
    
            eventList = reaper.AZ_Wwise_GetChildrenList(voiceEventPath, true)
    
            for k, event in pairs(eventList) do
    
    
                eventTable[event["Name"]] = true
    
    
            end
    
    
            reaper.AZ_Wwise_Disconnect()
    
    
        end
    
    
        excelDoc = reaper.AZ_Excel_OpenFile(excelPath)
    
    
        worksheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, sheetName)
    
    
        rows = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, ".+", "A", "2:5000,A", true)
    
    
        unimportedSoundList = {}
    
        unimportedEventList = {}
    
    
        for i, row in pairs(rows["Cells"]) do
    
    
            if soundTable[row["A"]] ~= true then
    
    
                table.insert(unimportedSoundList, row["A"])
    
            end
    
            if eventTable[row["A"]] ~= true then
    
    
                table.insert(unimportedEventList, row["A"])
    
            end
    
    
        end
    
    
        reaper.AZ_Excel_CloseFile(excelDoc)
    
    
        Msg("以下のサウンドが実装されていません")
    
        ShowObject(unimportedSoundList)
    
        Msg("")
    
        Msg("以下のイベントが実装されていません")
    
        ShowObject(unimportedEventList)
    
    
        return unimportedSoundList
    
    
    end
    
    
    LoudnessTable = {
    
      { Name = "AZ_vo", Loudness = -24 }
    
    }
    
    
    function ImportunimportedFiles(excelPath, sheetName, unimportedSoundList)
    
    
       track = reaper.AZ_InsertTrackId(0, reaper.CountTracks(0), "unimported")
    
    
       excelDoc = reaper.AZ_Excel_OpenFile(excelPath)
    
    
       worksheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, sheetName)
    
    
       filePathList = {}
    
    
       for i, sound in pairs(unimportedSoundList) do
    
    
           rows = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, sound, "A", ",A:B")
    
    
           for j, row in pairs(rows["Cells"]) do
    
              table.insert(filePathList, row["B"])
    
           end
    
       end
    
    
       reaper.AZ_Excel_CloseFile(excelDoc)
    
    
       mediaItems = reaper.AZ_InsertMediaItems(track, filePathList, 0, 1, 0)
    
    
       reaper.AZ_SetMediaItemListHANDAUTOMER(mediaItems, 2)
    
    
       middlewareInfo = reaper.AZ_MIDDLESCANNER_Wwise_GetVolumeForMediaItemList(mediaItems, "SFX", "")
    
    
       reaper.AZ_LOUDMATCHIFY_SetVolumeForMediaItemList(mediaItems, LoudnessTable, 0, middlewareInfo)
    
    
    end
    
    
    function main()
    
    
        retval, inputList = reaper.AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")
    
    
        if retval == false then return end
    
    
        deptPath = inputList[1]
    
        excelPath = inputList[2]
    
    
        sheetName = "voices_" ..os.date("%Y%m%d_%H%M%S", ts)
    
    
        GetP4Files(deptPath, excelPath, sheetName)
    
    
        unimportedSoundList = SearchVoicesInWwise(excelPath, sheetName)
    
    
        ImportunimportedFiles(excelPath, sheetName, unimportedSoundList)
    
    
        reaper.AZ_ShowMessageBox_Info("success!", "", reaper.AZ_WindowType_OK())
    
    
    end
    
    
    main()

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. ・RIGDOCKSをインポート
    3. -------- ここから REAPDOCK AZSTOKE_Excel_GetP4Filesを参照 --------
    4. p4URL = "********"
      
      p4UserName = "********"
      
      p4Password = "********"
      
      p4Workspace = "********"
    5. function GetP4Files(depotPath, excelPath, sheetName)
    6.     filePathList = {}
    7.     if reaper.AZ_P4_Connect(p4URL, p4UserName, p4Password)then
    8.          filePathList = reaper.AZ_P4_SyncFiles(p4Workspace, depotPath, -1, "wav")
    9.          reaper.AZ_P4_Disconnect()
      
          end
    10.     excelDoc = reaper.AZ_Excel_OpenFile(excelPath)
    11.     worksheet = reaper.AZ_Excel_AddWorksheet(excelDoc, sheetName)
    12.     row = 1
    13.     reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, "Name")
    14.     reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, "Local Path")
    15.     for i, filePath in pairs(filePathList) do
    16.          row = row + 1
    17.          fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]
    18.          reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, fileName)
    19.          reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, filePath)
    20.     end
    21.     reaper.AZ_Excel_SaveDocument(excelDoc)
    22.     reaper.AZ_Excel_CloseFile(excelDoc)
    23. end
    24. -------- ここまで REAPDOCK AZSTOKE_Excel_GetP4Filesを参照 --------
    25. -------- ここから REAPDOCK AZSTOKE_Excel_SearchVoicesInWwiseを参照 --------
    26. function SearchVoicesInWwise(excelPath, sheetName)
    27.     voiceSoundPath = "\\Actor-Mixer Hierarchy\\VOICE"
      
          voiceEventPath = "\\Events\\VOICE"
    28.     if reaper.AZ_Wwise_Connect("127.0.0.1", 8080) then
      
              soundTable = {}
      
              eventTable = {}
    29.        soundItemList = reaper.AZ_Wwise_SearchSoundItemFromName(voiceSoundPath, "")
    30.         for k, sound in pairs(soundItemList) do
    31.             soundTable[sound["Name"]] = true
    32.         end
    33.         eventList = reaper.AZ_Wwise_GetChildrenList(voiceEventPath, true)
      
              for k, event in pairs(eventList) do
    34.             eventTable[event["Name"]] = true
    35.         end
    36.         reaper.AZ_Wwise_Disconnect()
    37.     end
    38.     excelDoc = reaper.AZ_Excel_OpenFile(excelPath)
    39.     worksheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, sheetName)
    40.     rows = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, ".+", "A", "2:5000,A", true)
    41.     unimportedSoundList = {}
      
          unimportedEventList = {}
    42.     for i, row in pairs(rows["Cells"]) do
    43.         if soundTable[row["A"]] ~= true then
    44.             table.insert(unimportedSoundList, row["A"])
      
              end
      
              if eventTable[row["A"]] ~= true then
    45.             table.insert(unimportedEventList, row["A"])
      
              end
    46.     end
    47.     reaper.AZ_Excel_CloseFile(excelDoc)
    48. Msg("以下のサウンドが実装されていません") ShowObject(unimportedSoundList) Msg("") Msg("以下のイベントが実装されていません") ShowObject(unimportedEventList)
    49.     return unimportedSoundList
    50. end
    51. -------- ここまで REAPDOCK AZSTOKE_Excel_SearchVoicesInWwiseを参照 --------
    52. LoudnessTable = {
      
        { Name = "AZ_vo", Loudness = -24 }
      
      }
    53. ・ラウドネス設定テーブルを定義
    54. function ImportunimportedFiles(excelPath, sheetName, unimportedSoundList)
    55. ・未実装サウンドファイルをインポートする関数を定義
    56.    track = reaper.AZ_InsertTrackId(0, reaper.CountTracks(0), "unimported")
    57. ・新しいトラックを挿入
    58.    excelDoc = reaper.AZ_Excel_OpenFile(excelPath)
    59.    worksheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, sheetName)
    60. ・Excelファイルを開き、ワークシートを開く
    61.    filePathList = {}
    62. ・ファイルパスリストを初期化
    63.    for i, sound in pairs(unimportedSoundList) do
    64.        rows = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, sound, "A", ",A:B")
    65. ・未実装サウンド名で行を検索
    66.        for j, row in pairs(rows["Cells"]) do
      
                table.insert(filePathList, row["B"])
      
             end
    67. ・該当行のローカルパスをファイルパスリストに追加
    68.    end
    69.    reaper.AZ_Excel_CloseFile(excelDoc)
    70. ・Excelファイルを閉じる
    71.    mediaItems = reaper.AZ_InsertMediaItems(track, filePathList, 0, 1, 0)
    72. ・未実装ファイルをReaperにインポート
    73.    reaper.AZ_SetMediaItemListHANDAUTOMER(mediaItems, 2)
    74. ・HANDAUTOMERを実行
    75.    middlewareInfo = reaper.AZ_MIDDLESCANNER_Wwise_GetVolumeForMediaItemList(mediaItems, "SFX", "")
    76. ・MIDDLESCANNERでWwiseの音量設定情報を取得
    77.    reaper.AZ_LOUDMATCHIFY_SetVolumeForMediaItemList(mediaItems, LoudnessTable, 0, middlewareInfo)
    78. ・LOUDMATCHIFYで音量調整
    79. end
    80. function main()
    81.     retval, inputList = reaper.AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")
    82.     if retval == false then return end
    83.     deptPath = inputList[1]
      
          excelPath = inputList[2]
    84.     sheetName = "voices_" ..os.date("%Y%m%d_%H%M%S", ts)
    85.     GetP4Files(deptPath, excelPath, sheetName)
    86.     unimportedSoundList = SearchVoicesInWwise(excelPath, sheetName)
    87.     ImportunimportedFiles(excelPath, sheetName, unimportedSoundList)
    88. ・未実装サウンドファイルをインポートする関数を実行
    89.     reaper.AZ_ShowMessageBox_Info("success!", "", reaper.AZ_WindowType_OK())
    90. end
    91. main()

    実行画面

  • AZSTOKE_Recording_OutputMediasToExcel書き出したメディア情報をExcelに出力

    実行前の準備

    Excelファイルを用意する 収録に使用したプロジェクトを用意する

    スクリプト

    dofile(reaper.AZ_GetLuaInitPath())
    
    require("reaper_AZSTOKE_BRONZE")
    
    require("reaper_AZSTOKE_SILVER")
    
    require("reaper_AZSTOKE_GOLD")
    
    
    defaultExcelPath = "D:\\reapdock\\voice\\Recording.xlsx"
    
    
    function InsertTrackInfo(excelPath)
    
        excel = reaper.AZ_Excel_OpenFile(excelPath)
    
        worksheet = reaper.AZ_Excel_OpenWorksheet(excel, "収録内容")
    
    
        -- 開始行特定
    
        newRow = 4
    
        searchResult = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, ".+", "B", newRow..":1000,B", true)
    
    
        for k, v in pairs(searchResult["Cells"]) do newRow = newRow + 1 end
    
    
        trackList = reaper.AZ_GetTrackItemList(0)
    
    
        for i, track in pairs(trackList) do
    
    
            if reaper.AZ_GetTrackItemDepth(track) == 0 then
    
    
                trackName = reaper.AZ_GetTrackItemName(track)
    
    
                searchResult = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, trackName, "B")
    
    
                resultRow = ""
    
                for k, v in pairs(searchResult["Cells"]) do
    
                     resultRow = k
    
                end
    
    
                if resultRow == "" then
    
                    reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 2, trackName)
    
                    newRow = newRow + 1
    
    
                end
    
            end
    
    
        end
    
    
        reaper.AZ_Excel_SaveDocument(excel)
    
        reaper.AZ_Excel_CloseFile(excel)
    
    
    end
    
    
    function InsertFileInfo(excelPath)
    
        excel = reaper.AZ_Excel_OpenFile(excelPath)
    
        worksheet = reaper.AZ_Excel_OpenWorksheet(excel, "波形名")
    
    
        -- 開始行特定
    
        newRow = 4
    
        existRows = {}
    
        searchResult = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, ".+", "D", newRow..":5000,D", true)
    
        for i, line in pairs(searchResult["Cells"]) do
    
            newRow = newRow + 1
    
    
            table.insert(existRows, line["D"])
    
        end
    
    
        mediaItemList = reaper.AZ_GetMediaItemList(0)
    
    
        for i, media in pairs(mediaItemList) do
    
    
            fileName = reaper.AZ_GetMediaItemName(media)
    
    
            filenameComponent = reaper.AZ_GetStringSplitList(fileName, "_")
    
            if filenameComponent[#filenameComponent] ~= "ng" then
    
    
                exist = false
    
                for j, val in pairs(existRows) do
    
                    if val == fileName then
    
                        exist = true
    
                    end
    
                end
    
    
                if exist == false then
    
                    mikeTrack = reaper.GetMediaItemTrack(media)
    
                    mikeName = reaper.AZ_GetTrackItemName(mikeTrack)
    
    
                    soundTrack = reaper.GetParentTrack(mikeTrack)
    
                    soundName = reaper.AZ_GetTrackItemName(soundTrack)
    
    
                    reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 2, soundName)
    
                    reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 3, mikeName)
    
                    reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 4, fileName)
    
    
                    newRow = newRow + 1
    
    
                end
    
            end
    
        end
    
    
        reaper.AZ_Excel_SaveDocument(excel)
    
        reaper.AZ_Excel_CloseFile(excel)
    
    
    end
    
    
    function main()
    
    
        retval, inputList = reaper.AZ_GetUserInputList("", 1, "Excelパス", defaultExcelPath)
    
        if retval == false then return end
    
    
        retval, pushedButton = reaper.AZ_ShowMessageBox_Warn("出力先のExcelファイルを閉じていますか?", "", reaper.AZ_WindowType_OK_Cancel())
    
        if retval == false then return end
    
    
        excelPath = inputList[1]
    
    
        -- 収録内容
    
        InsertTrackInfo(excelPath)
    
    
        -- ファイル名
    
        InsertFileInfo(excelPath)
    
    
        reaper.AZ_ShowMessageBox_Info("Excelへの出力が完了しました。", "", reaper.AZ_WindowType_OK())
    
    
    end
    
    
    main()

    1 行ずつの解説

    1. dofile(reaper.AZ_GetLuaInitPath())
      
      require("reaper_AZSTOKE_BRONZE")
      
      require("reaper_AZSTOKE_SILVER")
      
      require("reaper_AZSTOKE_GOLD")
    2. ・RIGDOCKSをインポート
    3. defaultExcelPath = "D:\\reapdock\\voice\\Recording.xlsx"
    4. ・Excelファイルのパス(デフォルト)
    5. function InsertTrackInfo(excelPath)
    6. ・トラック情報を収録内容シートに出力する関数
    7. excel = reaper.AZ_Excel_OpenFile(excelPath) worksheet = reaper.AZ_Excel_OpenWorksheet(excel, "収録内容")
    8. ・Excelファイルを開き、収録内容シートを開く
    9. -- 開始行特定 newRow = 4
    10. ・トラック情報の出力を開始する行を指定
    11.     searchResult = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, ".+", "B", newRow..":1000,B", true)
    12.     for k, v in pairs(searchResult["Cells"]) do newRow = newRow + 1 end
    13. ・ 既にトラック情報が出力されている場合は、次の行から出力するように開始行を更新
    14.     trackList = reaper.AZ_GetTrackItemList(0)
    15. ・プロジェクト内の全トラックを取得
    16.     for i, track in pairs(trackList) do
    17. ・全トラックをループ
    18.         if reaper.AZ_GetTrackItemDepth(track) == 0 then
    19. ・トラックの深さが0の場合(サウンドトラックの場合)に処理を行う
    20.             trackName = reaper.AZ_GetTrackItemName(track)
    21. ・トラックの名前を取得
    22.             searchResult = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, trackName, "B")
    23. ・トラック名が既に収録内容シートに出力されているか検索
    24.             resultRow = ""
      
                  for k, v in pairs(searchResult["Cells"]) do
      
                       resultRow = k
      
                  end
    25. ・検索結果から行番号を取得
    26.             if resultRow == "" then
      
                      reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 2, trackName)
      
                      newRow = newRow + 1
    27. ・トラック名が収録内容シートに出力されていない場合は、次の行にトラック名を出力
    28.             end
      
              end
    29.     end
    30.     reaper.AZ_Excel_SaveDocument(excel)
      
          reaper.AZ_Excel_CloseFile(excel)
    31. ・Excelファイルを保存して閉じる
    32. end
    33. function InsertFileInfo(excelPath)
    34. ・ファイル名を波形名シートに出力する関数
    35. excel = reaper.AZ_Excel_OpenFile(excelPath) worksheet = reaper.AZ_Excel_OpenWorksheet(excel, "波形名")
    36. ・Excelファイルを開き、波形名シートを開く
    37. -- 開始行特定 newRow = 4
    38. ・ファイル名の出力を開始する行を指定
    39.     existRows = {}
      
          searchResult = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, ".+", "D", newRow..":5000,D", true)
      
          for i, line in pairs(searchResult["Cells"]) do
      
              newRow = newRow + 1
    40.         table.insert(existRows, line["D"])
      
          end
    41. ・既にファイル名が出力されている場合は、次の行から出力するように開始行を更新し、既に出力されているファイル名をリストに保存
    42.     mediaItemList = reaper.AZ_GetMediaItemList(0)
    43. ・プロジェクト内の全てのメディアアイテムを取得
    44.     for i, media in pairs(mediaItemList) do
    45. ・全てのメディアアイテムをループ
    46.         fileName = reaper.AZ_GetMediaItemName(media)
    47. ・メディアアイテムの名前を取得
    48.         filenameComponent = reaper.AZ_GetStringSplitList(fileName, "_")
    49. ・メディアアイテムの名前を"_"で分割してリストにする
    50.         if filenameComponent[#filenameComponent] ~= "ng" then
    51. ・ファイル名の最後の要素が"ng"でない場合に処理を行う
    52.             exist = false
      
                  for j, val in pairs(existRows) do
      
                      if val == fileName then
      
                          exist = true
      
                      end
      
                  end
    53. ・既にファイル名が出力されているかリストから検索
    54.             if exist == false then
    55. ・ファイル名が既に出力されていない場合に処理を行う
    56.                 mikeTrack = reaper.GetMediaItemTrack(media)
      
                      mikeName = reaper.AZ_GetTrackItemName(mikeTrack)
    57. ・メディアアイテムのトラックを取得し、トラックの名前(マイク名)を取得
    58.                 soundTrack = reaper.GetParentTrack(mikeTrack)
      
                      soundName = reaper.AZ_GetTrackItemName(soundTrack)
    59. ・マイクトラックの親トラックを取得し、トラックの名前(サウンド名)を取得
    60.                 reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 2, soundName)
      
                      reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 3, mikeName)
      
                      reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 4, fileName)
    61. ・次の行にサウンド名、マイク名、ファイル名を出力
    62.                 newRow = newRow + 1
    63. ・次の行に出力するために行番号を更新
    64.             end
      
              end
      
          end
    65.     reaper.AZ_Excel_SaveDocument(excel)
      
          reaper.AZ_Excel_CloseFile(excel)
    66. ・Excelファイルを保存して閉じる
    67. end
    68. function main()
    69. retval, inputList = reaper.AZ_GetUserInputList("", 1, "Excelパス", defaultExcelPath) if retval == false then return end
    70. ・ユーザーにExcelファイルのパスを入力してもらう。デフォルトでdefaultExcelPathが入力されている状態にする
    71. retval, pushedButton = reaper.AZ_ShowMessageBox_Warn("出力先のExcelファイルを閉じていますか?", "", reaper.AZ_WindowType_OK_Cancel()) if retval == false then return end
    72. ・ユーザーにExcelファイルを閉じているか確認する。OKが押された場合は処理を続行し、キャンセルが押された場合は処理を中止する
    73.     excelPath = inputList[1]
    74. ・ユーザーが入力したExcelファイルのパスを変数に保存
    75. -- 収録内容 InsertTrackInfo(excelPath)
    76. ・ 収録内容シートにトラック情報を出力する関数を呼び出す
    77. -- ファイル名 InsertFileInfo(excelPath)
    78. ・ 波形名シートにファイル名を出力する関数を呼び出す
    79. reaper.AZ_ShowMessageBox_Info("Excelへの出力が完了しました。", "", reaper.AZ_WindowType_OK())
    80. ・ユーザーに出力完了のメッセージを表示
    81. end
    82. main()
    83. ・main関数を呼び出す

    実行画面