RIGDOCKS / REASCRIPT SAMPLES
REAPDOCK
Scripts that actually run in Reaper’s ReaScript. Click a name to open its code, a line-by-line walkthrough and screenshots in place. Both Lua and Python are given.
The walkthrough and the screenshots are in Japanese only. The code runs as-is — the require / import line for the rank it needs is already at the top.
- Scripts
- 84
- Categories
- 16
- Screens and demos
- 622
No script matched. Try a different word.
BEGINNER17
AZ_ifConditional testing using ifBefore you run it
準備の必要はありません
Script
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) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath())- Lua版RIGDOCKSの初期設定読み込み
str = "AZSTOKE"- str変数に"AZSTOKE"文字列を追加
if str ~= nil then Msg("test1:"..str) end- if文 str変数の中身の有無を確認 Trueの場合、Msg関数でstrの中身をコンソール表示
if str == "AZSTOKE" then Msg("test2:"..str) end- if文 str変数と”AZSTOKE”が一致するか確認 Trueの場合、Msg関数でstrの中身をコンソール表示
if str == "azstoke" then Msg("test3:"..str) end- if文 str変数と”azstoke”が一致するか確認 Trueの場合、Msg関数でstrの中身をコンソール表示
Screens
Before you run it
準備の必要はありません
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * str1 = "AZSTOKE" if str1 is not None: Msg("test1:"+str1) if str1 == "AZSTOKE": Msg("test2:"+str1) if str1 == "azstoke": Msg("test3:"+str1)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import *- 共通関数をインポート
str1 = "AZSTOKE"- str1変数に文字列”AZSTOKE”を入力
if str1 is not None: Msg("test1:"+str1)- if文 str1変数の中が入っているのかを確認 入力が確認できたらMsg関数でコンソールにstr1を出力
if str1 == "AZSTOKE": Msg("test2:"+str1)- if文 str1変数と”AZSTOKE”という文字列が一致するのか確認 同じならMsg関数でコンソールにstr1を出力
if str1 == "azstoke": Msg("test3:"+str1)- if文 str1変数と”azstoke”という文字列が一致するのか確認 同じならMsg関数でコンソールにstr1を出力
Screens
AZ_if_2Conditional testing using elseifBefore you run it
準備の必要はありません
Script
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") endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath())- Lua版RIGDOCKSの初期設定読み込み
count = 35- [35]という整数を変数(count)に保存
if count < 5 then- 変数が5未満(5は入らない)の場合
Msg("5")- [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")
Screens
Before you run it
準備の必要はありません
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * count = 35 if count < 5: Msg("5") elif count < 40: Msg("40") else: Msg("50")Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import *- 共通関数をインポート
count = 35- count変数に35の整数を入力
if count < 5: Msg("5")- if文 countが5より小さいかを確認 確認できたらMsg関数で5を出力
elif count < 40: Msg("40")- elif で上記のif文に一致しなく且つcountが40より小さい場合 確認できたらMsg関数で40を出力
else: Msg("50")- elseで上記if/elifで一致しないすべてのものの場合 Msg関数で50を出力
Screens
AZ_for_loopExecutes a specified number of loopsBefore you run it
準備の必要はありません
Script
dofile(reaper.AZ_GetLuaInitPath()) count = 5 for i = 1,count do Msg(i) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath())- Lua版RIGDOCKSの初期設定読み込み
count = 5- カウント数を5と指定
for i = 1,count do- ForLoopを利用して1~5までループを設定
Msg(i)- カウントのIDをコンソールに出力
end- ForLoop処理終了
Screens
Before you run it
準備の必要はありません
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * Msg("test1") for i in range(3): Msg(i) Msg("test2") for i in range(3,6): Msg(i) Msg("test3") for i in range(1,6,2): Msg(i) Msg("test4") for i in range(5): Msg(i) if i == 3: break Msg("test5") for i in range(2,5): if i % 2 == 0: Msg(i) continue Msg(i+20)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import *- 共通関数をインポート
Msg("test1")- コンソールに”test1”と表示
for i in range(3): Msg(i)- For文 range3は「0,1,2」とループ
Msg("test2") for i in range(3,6): Msg(i)Msg("test3") for i in range(1,6,2): Msg(i)Msg("test4") for i in range(5): Msg(i) if i == 3: break Msg("test5") for i in range(2,5): if i % 2 == 0: Msg(i) continue Msg(i+20)
Screens
AZ_for_loop_2Run a loop over the number of arraysBefore you run it
準備の必要はありません
Script
dofile(reaper.AZ_GetLuaInitPath()) testList = {10,20,30,40,50} for i, value in pairs(testList) do Msg(i) Msg(value) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath())- Lua版RIGDOCKSの初期設定読み込み
testList = {10,20,30,40,50}- {}で囲うことによって配列となる10.20.30.40.50はinteger(整数)つまり5つの整数が配列(testlist)に保存
for i, value in pairs(testList) do- ForLoopを利用してtestlistに保存されている配列分ループを回す
Msg(i)- カウントのIDをコンソールに出力
Msg(value)- カウント数に紐づいたtestListをコンソールに出力
end- ForLoop処理終了
Screens
Before you run it
準備の必要はありません
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * testList = [10,20,30,40,50] for i, value in enumerate(testList, 1): Msg(i) Msg(value)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import *- 共通関数をインポート
testList = [10,20,30,40,50]- testListに整数の配列を登録
for i, value in enumerate(testList, 1): Msg(i) Msg(value)- enumrateを利用して配列の数ForLoopを回転 Msg関数でForのインデックスを表示 Msg関数でValueの配列の中を表示
Screens
AZ_listRegister the specified number in the arrayBefore you run it
準備の必要はありません
Script
dofile(reaper.AZ_GetLuaInitPath()) list = {} count = 5 for i = 1,count do list[i] = i Msg(list[i]) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath())- Lua版RIGDOCKSの初期設定読み込み
list = {} count = 5- listの配列を用意 count変数に整数5を追加
for i = 1,count do list[i] = i Msg(list[i]) end- ForLoopを1から5回ループを実行 listにiのインデックスを追加 Msg関数でLoop実行ごとにコンソールに出力
Screens
Before you run it
準備の必要はありません
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * count = 5 list = [None]*count for i in range(-5,5): list[i] = i Msg(list[i])Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import *- 共通関数をインポート
count = 5- count変数に整数5を入力
list = [None]*count- list配列にカウント分の枠を用意
for i in range(-5,5): list[i] = i Msg(list[i])- 枠の最大を表示 最大は-5~0~5の枠になる 0~6にするとエラーとなる
Screens
AZ_function_returnFunction return valueBefore you run it
準備の必要はありません
Script
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)Line by line日本語
dofile(reaper.AZ_GetLuaInitPath())- Lua版RIGDOCKSの初期設定読み込み
-- Input 2 / Output 2 function AddAndSubtract(num1, num2)- 任意の関数(今回は"AddAndSubtract")を作成する。 ()内は、作成したAddAndSubtractという関数の入力値(今回は"num1, num2")を指定
add = num1 + num2- 入力値2つをたし算して結果をaddに出力
subtract = num1 - num2- 入力値2つを引き算してsubtractに出力
return add, subtract end- 関数の処理結果を呼び出し元に返します
-- Input 0 / Output 1 function GetPI()- 任意の関数(今回は"GetPI")を作成する。 入力値が不要のため、()内は未記入
return 3.14 end- 関数の処理結果(今回は3.14)を呼び出し元に返します -- Input 1 / Output 0 function CheckNum(num) 任意の関数(今回は"CheckNum")を作成する。 ()内は、作成したCheckNumという関数の入力値(今回は"num")を指定
if(num < 0) then- num が0より小さい場合
Msg(tostring(num) .. " is " .. "< 0")- コンソールに「num is <0」と表示
return end- 関数の処理結果を呼び出し元に返します
if(num > 5) then- num が5より大きい場合
Msg(tostring(num) .. " is " .. "> 5")- コンソールに「num is >5」と表示
return end- 関数の処理結果を呼び出し元に返します
if(num > 3) then- num が3より大きい場合
Msg(tostring(num) .. " is " .. "> 3")- コンソールに「num is >3」と表示
return end- 関数の処理結果を呼び出し元に返します
Msg(tostring(num) .. " is " .. "0 <= , <= 3") end- コンソールに「num is 0 <= , <= 3」と表示
add, substract = AddAndSubtract(2, 4)Msg(add) Msg(substract) Msg(GetPI()) CheckNum(add) CheckNum(substract) CheckNum(GetPI()) CheckNum(2)
Screens
Before you run it
準備の必要はありません
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * # Input 2 / Output 2 def AddAndSubtract(num1, num2): add = num1 + num2 subtract = num1 - num2 return add, subtract # Input 0 / Output 1 def GetPI(): return 3.14 # Input 1 / Output 0 def CheckNum(num): if(num < 0): Msg(str(num) + " is " + "< 0") return if(num > 5): Msg(str(num) + " is " + "> 5") return if(num > 3): Msg(str(num) + " is " + "> 3") return Msg(str(num) + " is " + "0 <= , <= 3") add, substract = AddAndSubtract(2, 4) Msg(add) Msg(substract) Msg(GetPI()) CheckNum(add) CheckNum(substract) CheckNum(GetPI()) CheckNum(2)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * # Input 2 / Output 2 def AddAndSubtract(num1, num2): add = num1 + num2 subtract = num1 - num2 return add, subtract # Input 0 / Output 1 def GetPI(): return 3.14 # Input 1 / Output 0 def CheckNum(num): if(num < 0): Msg(str(num) + " is " + "< 0") return if(num > 5): Msg(str(num) + " is " + "> 5") return if(num > 3): Msg(str(num) + " is " + "> 3") return Msg(str(num) + " is " + "0 <= , <= 3") add, substract = AddAndSubtract(2, 4) Msg(add) Msg(substract) Msg(GetPI()) CheckNum(add) CheckNum(substract) CheckNum(GetPI()) CheckNum(2)
Screens
AZ_showConsoleMsgFunction to output string to console and executionBefore you run it
準備の必要はありません
Script
function Msg(param) reaper.ShowConsoleMsg(tostring(param).."\n") end str1 = "Hello World" Msg(str1)Line by line日本語
function Msg(param)- 任意の関数(今回は"Msg")を作成する。 ()内は、1で作成したMsgという関数の入力値(今回は"param")を指定
reaper.ShowConsoleMsg(tostring(param).."\n") end- コンソールに出力する -2で入力値(param)を文字列に変換(tostring)し、改行("\n")
str1 = "Hello World"- 出力したい文字列をitem変数に保存(= "")出力したい文字を記載、itemは文字列の変数として使用 日本語を入力したいときはメモ帳などで入力したものをコピー&ペーストであれば可能
Msg(item)- itemで保存されている文字列をコンソールへ出力
Screens
AZ_table_LengthGet array length (# / len)Before you run it
準備の必要はありません
Script
dofile(reaper.AZ_GetLuaInitPath()) a = {"a","b","c"} x = #(a) Msg(x) b = {1,2,3,4,5} y = #(b) Msg(y)Line by line日本語
dofile(reaper.AZ_GetLuaInitPath())- ・Lua版RIGDOCKSの初期設定読み込み
a = {"a","b","c"} x = #a- ・文字列でのテスト:配列を用意してその長さを#で出力
Msg(x)- ・Msg関数でコンソール出力
b = {1,2,3,4,5} y = #b- ・整数でのテスト:配列を用意してその長さをlenで出力
Msg(y)- ・Msg関数でコンソール出力
Screens
Before you run it
準備の必要はありません
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * a = {"a","b","c"} x = len(a) Msg(x) b = {1,2,3,4,5} y = len(b) Msg(y)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import *- 共通関数をインポート
a = {"a","b","c"} x = len(a) Msg(x)- 文字列でのテスト:配列を用意してその長さをlenで出力 Msg関数でコンソール出力
b = {1,2,3,4,5} y = len(b) Msg(y)- 整数でのテスト:配列を用意してその長さをlenで出力 Msg関数でコンソール出力
Screens
AZ_table_In_TableArray within an arrayBefore you run it
準備の必要はありません
Script
dofile(reaper.AZ_GetLuaInitPath()) i = {1,2,3} b = {4,5,6} e = {i,b} Msg(e[1]) Msg(e[1][2])Line by line日本語
dofile(reaper.AZ_GetLuaInitPath())- Lua版RIGDOCKSの初期設定読み込み
i = {1,2,3}- {}で囲うことによって配列となる配列(i)に保存
b = {4,5,6}- 配列(b)に保存
e = {i,b}- 配列(i)と配列(b)を配列(e)に保存
Msg(e[1])- 配列(e)の一つ目をコンソールに出力
Msg(e[1][2])- 配列(e)の2つ目eをコンソールに出力 今回は2が出力
Screens
Before you run it
準備の必要はありません
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * i = [1,2,3] b = [4,5,6] e = (i,b) Msg(e[0]) Msg(e[0][1])Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import *- 共通関数をインポート
i = [1,2,3]- []で囲うことによって配列となる配列(i)に保存
b = [4,5,6]- 配列(b)に保存
e = (i,b)- 配列(i)と配列(b)を配列(e)に保存
Msg(e[0])- 配列(e)の一つ目をコンソールに出力
Msg(e[0][1])- 配列(e)の2つ目eをコンソールに出力 今回は2が出力
Screens
AZ_table_InsertAdd a new value between the arraysBefore you run it
準備の必要はありません
Script
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]) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath())- Lua版RIGDOCKSの初期設定読み込み
t = {"A","C"}- 配列を定義する。
table.insert(t,2,"B")- 配列の2番目に「B」を挿入する。
for i = 1,3 do Msg(t[i]) end- 配列のインデックス(1~3)の値をコンソールへ出力する。
table.insert(t,"D")- 配列の末尾に「D」を挿入する。
for i = 1,4 do Msg(t[i]) end- 配列のインデックス(1~4)の値をコンソールへ出力する。
Screens
Before you run it
準備の必要はありません
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * t = ["A","C"] t.insert(1,"B") Msg(t) t.insert(0, "D") Msg(t) i = [1,2,3] b = [4,5,6] e =[] e.append(i) e.append(b) Msg(e[0]) Msg(e[0][1])Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import *- 共通関数をインポート
t = ["A","C"] t.insert(1,"B") Msg(t)- A.Cの文字列配列にBを間に挿入 Msg関数でコンソール出力
t.insert(0, "D") Msg(t)- Dを間を後ろに挿入 Msg関数でコンソール出力
i = [1,2,3] b = [4,5,6]- i/bの配列に整数を設定
e =[]- 親配列を作成
e.append(i) e.append(b)- appendを利用してeの親配列に子配列を登録
Msg(e[0]) Msg(e[0][1])- Msg関数で配列状況を確認
Screens
AZ_table_RemoveDelete a part of an arrayBefore you run it
準備の必要はありません
Script
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]) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath())- Lua版RIGDOCKSの初期設定読み込み
list = {"A","B","C","D","E","F"} for i = 1,6 do Msg(list[i]) end- 配列を定義する。 配列のインデックス(1~6)の値をコンソールへ出力する。
table.remove(list)- 配列の末尾を削除する。
for i = 1,6 do Msg(list[i]) end- 配列のインデックス(1~6)の値をコンソールへ出力する。
table.remove(list,2)- 配列のインデックス(2)の値を削除する。
for i = 1,6 do Msg(list[i]) end
Screens
Before you run it
準備の必要はありません
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * list1 = ["A","B","C","D","E","F"] Msg(list1) del list1[-1] Msg(list1) del list1[3] Msg(list1) list1.remove("B") Msg(list1)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import *- 共通関数をインポート
list1 = ["A","B","C","D","E","F"] Msg(list1)- アルファベットの文字列リストを用意 Msg関数で表示
del list1[-1] Msg(list1)- -1で配列の後ろから削除
del list1[3] Msg(list1)- 3は0.1.2.3のDが削除
list1.remove("B") Msg(list1)- removeは指定の値と一致したものを削除 ”B”を指定したのでBを削除
Screens
AZ_table_SortSort an array in ascending orderBefore you run it
準備の必要はありません
Script
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]) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath())- Lua版RIGDOCKSの初期設定読み込み
t = {"A","C","D","B"}- 配列を定義する。
table.sort(t)- 配列を並び替える。
for i = 1,4 do Msg(t[i]) end- 配列のインデックス(1~4)の値をコンソールへ出力する。
t = {"p10000","em2500","p11500","p11800"} table.sort(t)- 配列を定義し並び替える。
for i = 1,4 do Msg(t[i]) end- 配列のインデックス(1~4)の値をコンソールへ出力する。
Screens
Before you run it
準備の必要はありません
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * t = ["A","C","D","B"] t.sort() Msg(t) t.sort(reverse=True) Msg(t) t = [1,5,2,3,4] t.sort() Msg(t) t.sort(reverse=True) Msg(t)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import *- 共通関数をインポート
t = ["A","C","D","B"] t.sort() Msg(t)- 順列が崩れている配列を用意 配列の中をソート Msg関数で昇順されたか確認
t.sort(reverse=True) Msg(t)- reverseを利用してい降順に切り替える Msg関数で降順されたか確認
t = [1,5,2,3,4] t.sort() Msg(t)- 整数での配列を用意 ソートを行う 配列をコンソール出力
t.sort(reverse=True) Msg(t)- 整数での降順をテスト Msg関数でコンソール出力
Screens
AZ_table_Sort_NameSort by elements in an arrayBefore you run it
準備の必要はありません
Script
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]) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath())- Lua版RIGDOCKSの初期設定読み込み
t = {"test1","test3","test2"} x = {}- 配列を定義する
for index, value in pairs(t) do x[index]= {} x[index]["name"] = value x[index][2]= index end- 配列(t)の要素数だけ繰り返す。 配列(x)の、配列(t)と同値のインデックスにテーブルを作成し、 「name」と「2」にそれぞれ配列(t)の値とインデックスを格納する。
table.sort(x,function(a,b) return (a.name < b.name)end)- 配列(x)のnameを利用して配列内のソートを行う。
for index, value in pairs(x) do Msg(value.name) Msg(value[2]) end- 配列(x)をForLoopでコンソールに出力
Screens
Before you run it
準備の必要はありません
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * t = ["A","C","B","D"] x = [] for index, value in enumerate(t, 0): x.insert(index, {}) x[index]["name"] = value x[index]["index"] = index y = sorted(x, key=lambda t:t["name"]) Msg(y)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import *- 共通関数をインポート
t = ["A","C","B","D"] x = []- t : 名前配列を用意 x : 入力用の配列を用意
for index, value in enumerate(t, 0): x.insert(index, {}) x[index]["name"] = value x[index]["index"] = index- tの配列分Forを回転 for のインデックスに合わせてxに配列を設定 xに"name" にはValue "index" にはindex
y = sorted(x, key=lambda t:t["name"]) Msg(y)- xのkeyのnameでソートを行ってyに登録 Msg関数にyを出力
Screens
AZ_table_Text_ChangerSplit a comma-separated stringBefore you run it
準備の必要はありません
Script
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])Line by line日本語
dofile(reaper.AZ_GetLuaInitPath())- Lua版RIGDOCKSの初期設定読み込み
function textTableChanger(table,str,Number,Count)- カンマ区切り文字列を配列に格納する関数を定義する。
local a = table local a = {} local b = Count local c = Number local d = 0 local e = 0- 引数を変数に格納し、カウント用の変数を0で初期化する。
for word in str:gmatch("([^,]*)") do c = c +1- 引数(str)をカンマで分割し、分割後の文字列の数だけ以下5~6の処理を繰り返す。繰り返すたびに変数(c)を加算する。
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- 変数(b)(引数のCount)が1より大きい場合、変数(d)が0であれば変数(e)に1加算し配列の(e)番目に空の配列を格納する。 変数(d)に1加算し、配列の(e)番目に格納された配列の(d)番目に4で分割した文字列を格納する。 変数(d)が引数(Count)と同値になれば(d)を0に初期化する。
Screens
Before you run it
準備の必要はありません
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * s = "1,2,3,4,5,6#1,1,1,0,1,1#3,4,5,4,5,65,4,6" a = s.split("#") Msg(a[0]) Msg(a[1]) Msg(a[2]) b = a[0].split(",") Msg(b) c = a[1].split(",") Msg(c) d = a[2].split(",") Msg(d)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import *- 共通関数をインポート
s = "1,2,3,4,5,6#1,1,1,0,1,1#3,4,5,4,5,65,4,6"- 文字列に「#」「,」を区切りとして登録
a = s.split("#") Msg(a[0]) Msg(a[1]) Msg(a[2])- 「#」を区切りとして配列に分割
b = a[0].split(",") Msg(b) c = a[1].split(",") Msg(c) d = a[2].split(",") Msg(d)- 「,」を区切りとして配列に分割
Screens
AZ_text_Slice_Chenger[#] Split and get delimited stringBefore you run it
準備の必要はありません
Script
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])Line by line日本語
dofile(reaper.AZ_GetLuaInitPath())- Lua版RIGDOCKSの初期設定読み込み
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- 引数(str)を「#」で分割し、分割後の文字列の数だけ処理を繰り返す。 繰り返すたびに変数(c)を加算する。 配列の(c)番目に分割後の文字列を格納する。
return y end
Screens
Before you run it
準備の必要はありません
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * s = "1,2,3,4,5,6#1,1,1,0,1,1#3,4,5,4,5,65,4,6" a = s.split("#") Msg(a[0]) Msg(a[1]) Msg(a[2]) b = a[0].split(",") Msg(b) c = a[1].split(",") Msg(c) d = a[2].split(",") Msg(d)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import *- 共通関数をインポート
s = "1,2,3,4,5,6#1,1,1,0,1,1#3,4,5,4,5,65,4,6"- 文字列に「#」「,」を区切りとして登録
a = s.split("#") Msg(a[0]) Msg(a[1]) Msg(a[2])- 「#」を区切りとして配列に分割
b = a[0].split(",") Msg(b) c = a[1].split(",") Msg(c) d = a[2].split(",") Msg(d)- 「,」を区切りとして配列に分割
Screens
AZ_table_Same_File_NumGets the storage position of the specified file in the array.Before you run it
準備の必要はありません
Script
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)Line by line日本語
dofile(reaper.AZ_GetLuaInitPath())- Lua版RIGDOCKSの初期設定読み込み
function tableSameFileNum(table,file)- 配列内の文字列が格納されている位置を取得する関数を定義する。
local t = table local f = file local c = 1- 引数を変数に格納し、戻り値用の変数(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- 配列の要素数だけ処理を繰り返し、配列に格納されている値が変数(f)と一致すればその位置、しなければnilを変数(c)の値とする。
Screens
Before you run it
準備の必要はありません
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * t = [10,20,30,40,50] a = t.index(30) Msg(a)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import *- 共通関数をインポート
t = [10,20,30,40,50]- t配列を用意
a = t.index(30)- indexを利用して30がどの位置に入っているかを確認
Msg(a)- 出力した位置をMsg関数で表示
Screens
AZ_table_Same_File_BoolCheck if the specified file exists in the arrayBefore you run it
準備の必要はありません
Script
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)Line by line日本語
dofile(reaper.AZ_GetLuaInitPath())function tableSameFileBool(table,file)- 配列内に文字列が格納されているか確認する関数を定義する。
local tableL = table local fileL = file local BoolL = false- 引数を変数に格納し、戻り値用の変数(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- 配列の要素数だけ処理を繰り返し、変数BoolLの値を配列に格納されている値が 変数(fileL)と一致すればtrue、しなければfalseとする。 一致した場合繰り返し処理を抜ける。
Screens
Before you run it
準備の必要はありません
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * t = [10,20,30,40,50] a = 30 in t Msg(a)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import *- 共通関数をインポート
t = [10,20,30,40,50]- tの配列を用意
a = 30 in t- t配列に「30」整数が存在するか確認してboolで出力
Msg(a)- Msg関数でboolを出力
Screens
MEDIA14
AZSTOKE_SelectAllMediaStereoDownMixMonoChangerChange channel mode of all selected media to mono with stereo mixdownBefore you run it
プロジェクト内にメディアを複数設置 変更したいメディアを選択
Script
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) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER")allCount,_ = reaper.AZ_GetSelectedMediaTypeCount(0,"")- 選択メディアの全ての数(allCount)を取得
for i = 0,allCount-1 do reaper.AZ_SetSelectedMediaChannelMode(0,i,2) end- ForLoopを実行 0~5-1 選択数が5のため0-4で5になる 各IDごとのチャンネルモードセットを行う 2:DownMixMono
Screens
Before you run it
プロジェクト内にメディアを複数設置 変更したいメディアを選択
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * _,_,allCount,_ = AZ_GetSelectedMediaTypeCount(0,"",0,0) for i in range(allCount): AZ_SetSelectedMediaChannelMode(0,i,2)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import *- BronzeのAPIのインポートを行います。 インストールできていない方はこちらでダウンロードが必要
_,_,allCount,_ = AZ_GetSelectedMediaTypeCount(0,"",0,0)- 全ての選択メディアを取得します。
for i in range(allCount): AZ_SetSelectedMediaChannelMode(0,i,2)- *1 ForLoopでアイテムの数分回転 選択アイテムIDでのチャンネルモードのセットを行います。 ステレオのダウンミックスは「2」にセットします。
- =参考文献===
- *1:【AZ_for_loop:指定範囲のループを実行】
Screens
AZSTOKE_AllMediaNameAscendingOrderSetterSort all media in ascending orderBefore you run it
プロジェクト内にメディアを複数設置
Script
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 endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath())allCount = reaper.AZ_GetMediaTypeCount(0,"")- メディアの全ての数(allCount)を取得
mediaList = {}- 配列(medialist)を定義する
mediaInterval = 1- メディアの間隔値を変数として準備
setMediaTime = 0- メディアの開始位置を変数として準備
for i = 1,allCount do- *1 1から変数(allCount)分、ループさせる
mediaList[i] = {}- *2 配列(mediaList[i])の中に配列{}を定義
mediaList[i]["name"]= reaper.AZ_GetMediaName(0,i-1)- メディアの名前を取得し、mediaList[i]の["name"]に保存
mediaList[i]["media"]= reaper.AZ_GetMediaItemSelect(0,i-1,0)- MeidaItemを取得し、mediaList[i]の["media"]に保存
mediaList[i]["length"]= reaper.AZ_GetMediaLength(0,i-1)- メディアの長さを取得し、mediaList[i]の["length"]に保存
endtable.sort(mediaList,function(a,b) return (a.name < b.name)end)- *3 配列(mediaList)の["name"]を利用して配列内のソートを行う nameをソートすることで配列内の同IDに同封されている"media"、"length"も共に入れ替わる
for index, value in pairs(mediaList) do- 配列(mediaList)の要素数だけ繰り返す
if index == 1 then- *4 変数(index)が1の場合、下に続く
reaper.AZ_SetMediaItemStartTimeSeconds(mediaList[index].media,setMediaTime)- 配列(mediaList[index])のメディアをsetMediaTime(0秒の位置)にセットする
setMediaTime = setMediaTime+mediaList[index].length+mediaInterval- 2つ目の開始地点を出力 メディアの開始位置の変数(setMediaTime)+メディアの長さ+メディアの間隔値(1秒)
else- if文 変数(index)の中身を確認 1つ目以外の場合、下に続く
reaper.AZ_SetMediaItemStartTimeSeconds(mediaList[index].media,setMediaTime)- 配列mediaList[index]のメディアをsetMediaTime(2つ目以降の位置)にセットする
setMediaTime = setMediaTime+mediaList[index].length+mediaInterval- 3つ目以降の開始地点を出力 メディアの開始位置の変数(setMediaTime)+メディアの長さ+メディアの間隔値(1秒)
end- 配列(mediaList)分、繰り返す
end- プロジェクトに配置された全てのメディアを昇順に並べ替えられている
- =参考文献===
- *1:【AZ_for_loop:指定の数のループを実行】 *2:【AZ_{}:配列の中に配列】 *3:【AZ_tableSort(name):配列内の要素を基準に並び替える】 *4:【AZ_if:ifを利用した条件テスト】
Screens
Before you run it
プロジェクト内にメディアを複数設置
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * _,_,allCount,_ = AZ_GetMediaTypeCount(0,"",0,0) mediaList = [] sortList = [None]*allCount mediaInterval = 0.5 setMediaTime = 0 for i in range(allCount): mediaList.insert(i, {}) _,_,mediaList[i]["name"],_= AZ_GetMediaName(0,i,"",1024) sortList[i] = mediaList[i]["name"] mediaList[i]["media"]=AZ_GetMediaItemSelect(0,i,0) _,_,mediaList[i]["length"]= AZ_GetMediaLength(0,i,0) mediaList= sorted(mediaList, key=lambda sortList:sortList["name"]) for index, value in enumerate(mediaList,0): if index == 0: AZ_SetMediaItemStartTimeSeconds(mediaList[index]["media"],setMediaTime) else: setMediaTime = setMediaTime + mediaList[index-1]["length"]+mediaInterval AZ_SetMediaItemStartTimeSeconds(mediaList[index]["media"],setMediaTime)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import *- BronzeのAPIのインポートを行います。 インストールできていない方はこちらでダウンロードが必要
_,_,allCount,_ = AZ_GetMediaTypeCount(0,"",0,0)- 全てのメディアの数(allCount)を取得します。
mediaList = []- 配列(medialist)を定義する
sortList = [None]*allCount- *1 sortList配列にカウント分(allCount)の枠を用意
mediaInterval = 0.5- メディアの間隔値を変数として準備
setMediaTime = 0- メディアの開始位置を変数として準備
for i in range(allCount):- *2 変数(allCount)分、ループさせる
mediaList.insert(i, {})- リスト(mediaList)の指定した場所に要素を追加する i:挿入したい位置 {}:追加したい要素
_,_,mediaList[i]["name"],_= AZ_GetMediaName(0,i,"",1024)- メディアの名前を取得し、mediaList[i]の["name"]に保存
sortList[i] = mediaList[i]["name"]- 変数(sortList)に保存した["name"]を追加
mediaList[i]["media"]=AZ_GetMediaItemSelect(0,i,0)- MeidaItemを取得し、mediaList[i]の["media"]に保存
_,_,mediaList[i]["length"]= AZ_GetMediaLength(0,i,0)- メディアの長さを取得し、mediaList[i]の["length"]に保存
mediaList= sorted(mediaList, key=lambda sortList:sortList["name"])- *3 mediaListのkeyのnameでソートを行ってmediaListに登録 key=lambda:名前の無い関数を作るもの
for index, value in enumerate(mediaList,0):- mediaList enumerate()関数:格納されている値と順番を同時に取得できる
if index == 0:- *4 indexが0なら ==:等しい
AZ_SetMediaItemStartTimeSeconds(mediaList[index]["media"],setMediaTime)- 配列(mediaList[index])のメディアを変数(setMediaTime)にセットする 開始位置は0になる
else:- if文 変数(index)の中身を確認 1つ目以外の場合、下に続く
setMediaTime = setMediaTime + mediaList[index-1]["length"]+mediaInterval- 2つ目以降の開始地点を出力 メディアの開始位置の変数(setMediaTime)+メディアの長さ+メディアの間隔値(1秒)
AZ_SetMediaItemStartTimeSeconds(mediaList[index]["media"],setMediaTime)- 配列mediaList[index]のメディアをsetMediaTime(2つ目以降の位置)にセットする
- 配列(mediaList)分、繰り返す プロジェクトに配置された全てのメディアを昇順に並べ替えられている
- =参考文献===
- *1:【AZ_list:指定数を配列に登録】 *2:【AZ_for_loop:指定範囲のループを実行】 *3:【AZ_sorted:配列を配列内の要素を基準に並び替える】 *4:【AZ_if:ifを利用した条件テスト】
Screens
AZSTOKE_SelectAllMediaAddNGWordAdd "_ng" to the name of all selected mediaBefore you run it
プロジェクト内にメディアを複数設置
Script
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) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath())allCount,reaper.AZ_GetSelectedMediaTypeCount(0,"")- 選択しているメディアの数(allCount)を取得
for i = 0,allCount-1 do- 0から変数(allCount-1)分、ループさせる
name = reaper.AZ_GetSelectedMediaName(0,i)- 変数(name)に変数(i)に入った選択しているメディア名を保存する
name = name.."_ng"- 変数(name)に_ngを追記する
reaper.AZ_SetSelectedMediaName(0,i,name)- 選択しているメディアID(i)のメディア名に変数(name)を設定する
Msg(name)- コンソールにメディアIDを出力する allCount分回す
end
Screens
Before you run it
プロジェクト内にメディアを複数設置
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * _,_,allCount,_ = AZ_GetSelectedMediaTypeCount(0,"",0,0) for i in range(allCount): _,_,mediaName,_ = AZ_GetSelectedMediaName(0,i,"",1024) mediaName = mediaName + "_ng" Msg(mediaName) AZ_SetSelectedMediaName(0,i,mediaName)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import *- BronzeのAPIのインポートを行います。 インストールできていない方はこちらでダウンロードが必要
_,_,allCount,_ = AZ_GetSelectedMediaTypeCount(0,"",0,0)- 全ての選択メディアを取得します。
for i in range(allCount):- *1 変数(allCount)分、ループさせる
_,_,mediaName,_ = AZ_GetSelectedMediaName(0,i,"",1024)- 指定メディアID(i)からメディア名を取得
mediaName = mediaName + "_ng"- メディア名に"_ng"を追加
Msg(mediaName)- _ngを付けたメディア名をコンソール出力
AZ_SetSelectedMediaName(0,i,mediaName)- 指定メディアID(i)に変更したメディア名を設定
- *1:【AZ_for_loop:指定範囲のループを実行】
Screens
AZSTOKE_TrackAllMediaNameAndFrameConsolPrint all file names and frame numbers for the specified track to the consoleBefore you run it
プロジェクト内にメディアを複数設置
Script
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) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath())allCount,reaper.AZ_GetTrackMediaTypeCount(0,1,"")- 指定トラックの全てのメディアの数(allCount)を取得
for i = 0,allCount-1 do- 0から変数(allCount-1)分、ループさせる
name = reaper.AZ_GetTrackMediaName(0,1,i)- 変数(name)に変数(i)に入った指定トラック内の指定メディア名を保存
frame = reaper.AZ_GetTrackMediaStartTimeFrame(0,1,i)- 変数(frame)に変数(i)に入った指定トラック内にある指定メディアの開始フレームを保存
Msg(frame..":"..name)- コンソール画面にフレーム数(frame):メディア名(name)の順で出力
end
Screens
Before you run it
プロジェクト内にメディアを複数設置
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * _,_,_,allCount,_ = AZ_GetTrackMediaTypeCount(0,1,"",0,0) for i in range(allCount): _,_,_,mediaName,_ = AZ_GetTrackMediaName(0,1,i,"",1024) frame = AZ_GetTrackMediaStartTimeFrame(0,1,i) Msg(str(frame)+":"+mediaName)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import *- BronzeのAPIのインポートを行います。 インストールできていない方はこちらでダウンロードが必要
_,_,_,allCount,_ = AZ_GetTrackMediaTypeCount(0,1,"",0,0)- 指定トラックの全てのメディアの数(allCount)を取得
for i in range(allCount):- 0から変数(allCount)分、ループさせる
_,_,_,mediaName,_ = AZ_GetTrackMediaName(0,1,i,"",1024)- 変数(name)に変数(i)に入った指定トラック内の指定メディア名を保存
frame = AZ_GetTrackMediaStartTimeFrame(0,1,i)- 変数(frame)に変数(i)に入った指定トラック内にある指定メディアの開始フレームを保存
Msg(str(frame)+":"+mediaName)- コンソール画面にフレーム数(frame):メディア名(name)の順で出力
Screens
AZSTOKE_SelectAllMediaAddVolumeIncrease the volume of all selected media by +1dBBefore you run it
プロジェクト内にメディアを複数設置
Script
dofile(reaper.AZ_GetLuaInitPath()) allCount,_ = reaper.AZ_GetSelectedMediaTypeCount(0,"") for i = 0,allCount-1 do reaper.AZ_SetSelectedMediaAddVolume(0,i,1) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath())allCount,reaper.AZ_GetSelectedMediaTypeCount(0,"")- 選択しているメディアの数(allCount)を取得
for i = 0,allCount-1 do- 0から変数(allCount-1)分、ループさせる
reaper.AZ_SetSelectedMediaAddVolume(0,i,1)- 指定選択メディアの音量を指定値分だけ増減する 今回は+1db
end
Screens
Before you run it
プロジェクト内にメディアを複数設置
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * _,_,allCount,_ = AZ_GetSelectedMediaTypeCount(0,"",0,0) for i in range(allCount): AZ_SetSelectedMediaAddVolume(0,i,1)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import *- BronzeのAPIのインポートを行います。 インストールできていない方はこちらでダウンロードが必要
_,_,allCount,_ = AZ_GetSelectedMediaTypeCount(0,"",0,0)- 全ての選択メディアを取得します
for i in range(allCount):- 変数(allCount)分、ループさせる
AZ_SetSelectedMediaAddVolume(0,i,1)- 指定選択メディアの音量を指定値分だけ増減する 今回は+1db
Screens
AZSTOKE_TrackAllMediaSetRateMoveToSecAll media in the specified track will be re-arranged at 0.7x speed every secondBefore you run it
プロジェクト内にメディアを複数設置
Script
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 endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath())allCount,_ = reaper.AZ_GetTrackMediaTypeCount(0,1,"")- 指定トラックの全てのメディアの数(allCount)を取得
mediaList ={}- 配列(medialist)を定義する
mediaInterval = 1- メディアの間隔値を変数として準備
setMeidaRate = 0.7- メディアの再生速度を変数として準備
for i = 1,allCount do- 1から変数(allCount)分、ループさせる
mediaList[i] = {}- 配列(mediaList[i])の中に配列{}を定義
mediaList[i]["media"]= reaper.AZ_GetMediaTrackItemSelect(0,1,i-1,0)- MeidaItemを取得し、mediaList[i]の["media"]に保存
mediaList[i]["startPos"]= reaper.AZ_GetTrackMediaStartTimeSeconds(0,1,i-1)- メディアの開始位置を取得し、mediaList[i]の["start"]に保存
reaper.AZ_SetTrackMediaRate(0,1,i-1,setMeidaRate)- メディアの再生速度を変数(setMediaRate)に設定
mediaList[i]["length"]= reaper.AZ_GetTrackMediaLength(0,1,i-1)- メディアの長さを取得し、mediaList[i]の["length"]に保存
endfor index, value in pairs(mediaList) do- 配列(mediaList)の要素数だけ繰り返す
if index == 1 then- 変数(index)が1の場合、下に続く
startNextPos = mediaList[index].startPos+mediaList[index].length+mediaInterval- 配列mediaList[index]の開始位置+配列mediaList[index]のメディアの長さ+メディアの間隔値(1秒)を変数(startNextPos)にセット
else- if文 変数(index)の中身を確認 1つ目以外の場合、下に続く
reaper.AZ_SetMediaItemStartTimeSeconds(mediaList[index].media,startNextPos)- 配列mediaList[index]のメディアを変数(startNextPos)にセット
startNextPos = startNextPos+mediaList[index].length+mediaInterval- 変数(startNextPos)+配列mediaList[index]のメディアの長さ++メディアの間隔値(1秒)を変数(startNextPos)にセット
end- 配列(mediaList)分、繰り返す
end- 指定トラックの全てのメディアを0.7倍速になり、1秒間隔にならんでいる
Screens
Before you run it
プロジェクト内にメディアを複数設置
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * _,_,_,allCount,_ = AZ_GetTrackMediaTypeCount(0,1,"",0,0) mediaList = [] mediaInterval = 1 setMeidaRate = 0.7 for i in range(allCount): mediaList.insert(i, {}) mediaList[i]["media"] = AZ_GetMediaTrackItemSelect(0,1,i,0) _, _, _,mediaList[i]["startPos"] = AZ_GetTrackMediaStartTimeSeconds(0,1,i,0) AZ_SetTrackMediaRate(0,1,i,setMeidaRate) _,_,_,mediaList[i]["length"] = AZ_GetTrackMediaLength(0,1,i,0) startPos = 0 for index, value in enumerate(mediaList,0): if index == 0: startPos = mediaList[index]["startPos"] else: startPos = startPos + mediaList[index-1]["length"] + mediaInterval AZ_SetMediaItemStartTimeSeconds(mediaList[index]["media"],startPos)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import *- BronzeのAPIのインポートを行います。 インストールできていない方はこちらでダウンロードが必要
_,_,_,allCount,_ = AZ_GetTrackMediaTypeCount(0,1,"",0,0)- 指定トラックの全てのメディアの数(allCount)を取得
mediaList = []- 配列(medialist)を定義する
mediaInterval = 1- メディアの間隔値を変数として準備 今回は1秒
setMeidaRate = 0.7- メディアの再生速度を変数として準備 今回は0.7
for i in range(allCount):- 変数(allCount)分、ループさせる
mediaList.insert(i, {})- リスト(mediaList)の指定した場所に要素を追加する i:挿入したい位置 {}:追加したい要素
mediaList[i]["media"] = AZ_GetMediaTrackItemSelect(0,1,i,0)- MeidaItemを取得し、mediaList[i]の["media"]に保存
_, _, _,mediaList[i]["startPos"] = AZ_GetTrackMediaStartTimeSeconds(0,1,i,0)- メディアの開始位置を取得し、mediaList[i]の["start"]に保存
AZ_SetTrackMediaRate(0,1,i,setMeidaRate)- メディアの再生速度を変数(setMediaRate)に設定
_,_,_,mediaList[i]["length"] = AZ_GetTrackMediaLength(0,1,i,0)- メディアの長さを取得し、mediaList[i]の["length"]に保存
startPos = 0- 開始位置を設定
for index, value in enumerate(mediaList,0):- enumerate()関数:格納されている値と順番を同時に取得できる 配列(mediaList)の要素数だけ繰り返す
if index == 0:- indexが0なら ==:等しい
startPos = mediaList[index]["startPos"]- 配列mediaList[index]の開始位置を変数startPosにセット
else:- 1つ目以外の場合、下に続く
startPos = startPos + mediaList[index-1]["length"] + mediaInterval- 変数(startNextPos)+配列mediaList[index]のメディアの長さ+メディアの間隔値(1秒)を変数startPosにセット
AZ_SetMediaItemStartTimeSeconds(mediaList[index]["media"],startPos)- 配列mediaList[index]のメディアを変数(startNextPos)にセット
Screens
AZSTOKE_SelectAllMediaSetFadeFade in 0.2 seconds/fade out 1 second for all selected mediaBefore you run it
プロジェクト内にメディアを複数設置
Script
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) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) allCount,_ = reaper.AZ_GetSelectedMediaTypeCount(0,"")- 選択しているメディアの数(allCount)を取得
for i = 0,allCount-1 do- 0から変数(allCount-1)分、ループさせる
reaper.AZ_SetSelectedMediaFade(0,i,1,0.2,1,1)- 指定選択メディアの開始フェードを0.2秒、終了フェードを1秒に設定 今回のフェードタイプは1を使用
end
Screens
Before you run it
プロジェクト内にメディアを複数設置
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * _,_,allCount,_ = AZ_GetSelectedMediaTypeCount(0,"",0,0) for i in range(allCount): AZ_SetSelectedMediaFade(0,i,1,0.2,1,1)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import *- BronzeのAPIのインポートを行います。 インストールできていない方はこちらでダウンロードが必要
_,_,allCount,_ = AZ_GetSelectedMediaTypeCount(0,"",0,0)- 指定トラックの全てのメディアの数(allCount)を取得
for i in range(allCount):- 0から変数(allCount)分、ループさせる
AZ_SetSelectedMediaFade(0,i,1,0.2,1,1)- 指定選択メディアの開始フェードを0.2秒、終了フェードを1秒に設定 今回のフェードタイプは1を使用
Screens
AZSTOKE_SelectMovieMultiCopyCopy 10 videos of selected media at 0.2 second intervalsBefore you run it
プロジェクト内にメディアを複数設置
Script
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 endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath())endTime = reaper.AZ_GetSelectedMediaEndTime(0,0)- 選択しているメディアの終了位置を変数(endTime)にセット
length = reaper.AZ_GetSelectedMediaLength(0,0)- 選択しているメディアの長さを変数(length)にセット
mediaInterval = 0.2- メディアの間隔値を変数として準備
if retval then- 変数の結果がretval(true)の場合、下に続く
startPos = endTime+mediaInterval- 変数(endTime)+メディアの間隔値の変数(mediaInterval)を変数(startPos)にセット
for i =1,10 do- 10回分ループさせる
reaper.AZ_SetSelectedMediaActiveTakeCopy(0,0,0,startPos)- 選択メディア(今回は動画)を指定位置(startPos)に複製
startPos =length+mediaInterval+startPos- 変数(length)+メディアの間隔値の変数(mediaInterval)+変数(startPos)を変数(startPos)にセット
end end
Screens
Before you run it
プロジェクト内にメディアを複数設置
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * _,_,startPos = AZ_GetSelectedMediaStartTimeSeconds(0,0,0) if AZ_GetErrorCode() == 0 : _,_,length = AZ_GetSelectedMediaLength(0,0,0) for i in range(10): startPos = startPos + length + 0.2 AZ_SetSelectedMediaActiveTakeCopy(0,0,0,startPos)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import *- BronzeのAPIのインポートを行います。 インストールできていない方はこちらでダウンロードが必要
_,_,startPos = AZ_GetSelectedMediaStartTimeSeconds(0,0,0)- 選択している動画の開始時間(秒)を取得してStartPos変数に代入 選択動画の開始地点が取得できているかretvalで確認 retval : メディアを取得できていればTrue/メディアを取得できていなければFalse
if AZ_GetErrorCode() == 0 :- ifで動画を取得できているか確認してできていれば以下処理を実行
_,_,_,length = AZ_GetSelectedMediaLength(0,0,0)- 選択動画の長さを取得してLengthの変数に代入
for i in range(10):- 10動画コピーするのでForで10回ループを回す
startPos = startPos + length + 0.2- 動画の開始地点を設定 前動画の開始地点+前動画の長さ+0.2秒で次の開始地点になります。間の長さを調整したい場合は0.2を調整することで間隔を変更することができます。
AZ_SetSelectedMediaActiveTakeCopy(0,0,0,startPos)- 指定タイミング(startPos)に選択動画をコピー
Screens
AZSTOKE_AllDeleteMuteMediaDelete all muted mediaBefore you run it
プロジェクト内にメディアを複数設置 ミュートしているメディアを設置
Script
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 endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE")allCount = reaper.AZ_GetMediaTypeCount(0,"")- メディアの数を出力してallCount変数に代入
for i = allCount-1,0,-1 do- メディア数文Forで回す。 この際に-1 doを追加することでメディアの数からマイナスしていく形でForをループされていく。例:5.4.3.2.1.0のように最終値からiが減っていく形になる。
muteType = reaper.AZ_GetMediaMute(0,i)- iのIDメディアのミュートのタイプ(bool)を取得
if (muteType) then- ミュートしていればTrueで以下処理を実行
reaper.AZ_DeleteMedia(0,i)- iのメディアIDを削除する
end end
Screens
Before you run it
プロジェクト内にメディアを複数設置 ミュートしているメディアを設置
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * _,_,allCount,_ = AZ_GetMediaTypeCount(0,"",0,0) for i in reversed(range(allCount)): muteType = AZ_GetMediaMute(0,i) if muteType: AZ_DeleteMedia(0,i)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import *- BronzeのAPIのインポートを行います。 インストールできていない方はこちらでダウンロードが必要
_,_,allCount,_ = AZ_GetMediaTypeCount(0,"",0,0)- 全てのメディアの数(allCount)を取得します。
for i in reversed(range(allCount)):- メディア数文Forで回す。 この際にreversedを追記することでメディアの数からマイナスしていく形でForをループされていく。 例:5.4.3.2.1.0のように最終値からiが減っていく形になる。
muteType = AZ_GetMediaMute(0,i)- iのメディアIDのミュートのタイプ(bool)を取得
if muteType:- ミュートしていればTrueで以下処理を実行
AZ_DeleteMedia(0,i)- iのメディアIDを削除する
Screens
AZSTOKE_SelectAllMediaAddPitch-1 pitch for all selected mediaBefore you run it
プロジェクト内にメディアを複数設置
Script
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) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE")allCount,_ = reaper.AZ_GetSelectedMediaTypeCount(0,"")- 選択しているメディアの数(allCount)を取得
for i = 0,allCount-1 do- 0から変数(allCount-1)分、ループさせる
reaper.AZ_SetSelectedMediaAddPitch(0,i,-1)- 変数(i)に入った選択しているメディアのピッチを-1に設定
end
Screens
Before you run it
プロジェクト内にメディアを複数設置
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * _,_,allCount,_ = AZ_GetSelectedMediaTypeCount(0,"",0,0) for i in range(allCount): AZ_SetSelectedMediaPitch(0,i,-1)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import *- BronzeのAPIのインポートを行います。 インストールできていない方はこちらでダウンロードが必要
_,_,allCount,_ = AZ_GetSelectedMediaTypeCount(0,"",0,0)- 全ての選択メディアを取得します
for i in range(allCount):- 変数(allCount)分、ループさせる
AZ_SetSelectedMediaPitch(0,i,-1)- 指定選択メディアのピッチを指定値分だけ増減する 今回は-1
Screens
AZSTOKE_UserInputPathAutoInsertMediaInsert WAV files in the specified folder in parallel at 1 second intervalsBefore you run it
指定フォルダの中にwavファイルを用意
Script
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 endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER")- ・SilverAPIを利用可能にする
retval,inputList = reaper.AZ_GetUserInputList("AZWavList",1,"Path :","D:\\")- ・SimpleUIを表示して入力値をinputListに代入
fileList = reaper.AZ_GetFilePathList(inputList[1],"wav")- ・パス情報に対してファイルのフルパスを取得して配列に代入
startPos = 0- ・startPosの初期値として0を代入
for i, value in pairs(fileList) do- ・fileListの数分Forループ再生
reaper.AZ_SetPlayCursorPosition(0,0,startPos)- ・startPosの位置にカーソルを移動
item = reaper.AZ_InsertMediaOutItem(0,value)- ・メディアをインサートしてmediaItemを出力してitemに代入
endPos = reaper.AZ_GetMediaItemEndTime(item)- ・メディアアイテムの終了地点を取得してendPosに代入
startPos = endPos + 1- ・startPosにendPosの一秒後の開始地点を設定
end
Screens
Before you run it
指定フォルダの中にwavファイルを用意
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * retval,inputList = AZ_GetUserInputList("AZWavList",1,"Path :","D:\\") fileList = AZ_GetFilePathList(inputList[1],"wav") startPos = 0 for i, value in enumerate(fileList, 1): AZ_SetPlayCursorPosition(0,0,startPos,0) item = AZ_InsertMediaOutItem(0,value) _,endPos = AZ_GetMediaItemEndTime(item,0) startPos = endPos + 1Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import *- ・BRONZE/SILVERのAPIを利用可能にします。
retval,inputList = AZ_GetUserInputList("AZWavList",1,"Path :","D:\\")- ・SimpleUIを設定してユーザーにパス情報を入力してinputListに配列代入します。
fileList = AZ_GetFilePathList(inputList[1],"wav")- ・入力したパス情報に入っている「wav」ファイルを抜き出してfileListに配列代入します。
startPos = 0- ・startPosの初期化対応
for i, value in enumerate(fileList, 1):- ・fileList分Forループ対応
AZ_SetPlayCursorPosition(0,0,startPos,0)- ・カーソルの位置をstartPosの秒数に設定
item = AZ_InsertMediaOutItem(0,value)- ・メディアインサートして指定メディアをitemに代入
_,endPos = AZ_GetMediaItemEndTime(item,0)- ・itemの終了地点の秒を取得
startPos = endPos + 1- ・終了地点から1秒後の次のメディアの開始地点を設定
Screens
AZSTOKE_Media_OK_ResetRearrange the clipped OK soundScript
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)Line by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE")- ・Bronzeを利用できるように設定
itemList = reaper.AZ_GetSelectedMediaItemList(0)- ・選択メディアをリストで出力
nowPos = reaper.AZ_GetPlayCursorPosition(0)- ・現在のカーソル位置を取得
for i, value in pairs(itemList) do- ・メディアのリスト分Forループ
if i == 1 then- ・1つ目のメディアは下の処理を実行
interval = 2- ・間隔の値 2秒
elseinterval = 0.5- ・1つ目以外は 0.5秒 end reaper.CSurf_GoEnd()
- ・カーソルを全メディアの最後に設定
pos = reaper.AZ_GetPlayCursorPosition(0)- ・最終のカーソル秒を取得
pos = pos + interval- ・最終の秒に間隔の値を足す
reaper.AZ_SetMediaItemStartTimeSeconds(value,pos)- ・メディアをその位置に移動 end
Screens
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * itemList = AZ_GetSelectedMediaItemList(0) nowPos = AZ_GetPlayCursorPosition(0)[1] i = 0 for item in itemList: if i == 0: interval = 2 else: interval = 0.5 RPR_CSurf_GoEnd() pos = AZ_GetPlayCursorPosition(0)[1] pos = pos + interval AZ_SetMediaItemStartTimeSeconds(item, pos) i += 1 AZ_SetPlayCursorPosition(0,0,nowPos)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import *- ・Bronzeを利用できるように設定
itemList = AZ_GetSelectedMediaItemList(0)- ・選択メディアをリストで出力
nowPos = AZ_GetPlayCursorPosition(0)[1]- ・現在のカーソル位置を取得
i = 0 for item in itemList:- ・メディアのリスト分Forループ
if i == 0:- ・1つ目のメディアは下の処理を実行
interval = 2- ・間隔の値 2秒
else:interval = 0.5- ・1つ目以外は 0.5秒 RPR_CSurf_GoEnd()
- ・カーソルを全メディアの最後に設定
pos = AZ_GetPlayCursorPosition(0)[1]- ・最終のカーソル秒を取得
pos = pos + interval- ・最終の秒に間隔の値を足す
AZ_SetMediaItemStartTimeSeconds(item, pos)- ・繰り返した回数をカウントする
i += 1- ・メディアをその位置に移動
AZ_SetPlayCursorPosition(0,0,nowPos)
Screens
AZSTOKE_Media_OK_Reset_2Rearrange the clipped OK sound "Improved version 1"Script
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)Line by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER")- ・APIを利用可能にする
itemList = reaper.AZ_GetSelectedMediaItemList(0)- ・選択メディアのリスト出力
nowPos = reaper.AZ_GetPlayCursorPosition(0)- ・現在のカーソル位置を取得
if #(itemList) > 0 then- ・選択メディアが一つでもある場合は以下を実行
setName = "select"- ・トラック名を用意
nameCheck = false- ・チェック用のBoolをFalseで用意
selectTrack = reaper.AZ_GetTrackItemSelect(0,0,1)- ・選択トラックを取得
trList = reaper.AZ_GetTrackItemChildList(selectTrack)- ・選択トラックの子をリストで取得
if #(trList) > 0 then- ・子トラックが一つでもある場合は以下を実行
for i, value in pairs(trList) do- ・トラックリスト分Forをループ実行
trName = reaper.AZ_GetTrackItemName(value)- ・トラックの名前を取得
if trName == setName then- ・トラックの名前と設定名前が一致した場合以下を実行
nameCheck = true- ・selectの名前が一致するトラックがあるためtrueを設定
childTrack = value- ・childTrackに一致したトラックを設定
childTrackId = reaper.AZ_GetTrackItemIndex(childTrack)- ・childTrackからIdを取得
end end endif nameCheck == false then- ・nameCheckの判定がFalseになっている場合以下を実行
childTrack = reaper.AZ_InsertChildTrack(selectTrack)- ・選択トラックの子にトラックを生成
reaper.AZ_SetTrackItemName(childTrack,setName)- ・生成したトラックに"select"の名前を設定
childTrackId = reaper.AZ_GetTrackItemIndex(childTrack)- ・生成したトラックのIdを取得
endfor i, value in pairs(itemList) do- ・メディアリスト分Forループ再生
if i == 1 then interval = 2- ・最初の設定位置に2秒を設定
else interval = 0.5- ・以降は設定位置に0.5秒を設定
end reaper.CSurf_GoEnd()- ・カーソルを最後に設定
pos = reaper.AZ_GetPlayCursorPosition(0)- ・最後に設定したカーソルの位置を取得
pos = pos + interval- ・設定したインターバルの秒数を足してposに設定
reaper.AZ_SetMediaItemMoveToTrack(value,childTrackId)- ・子トラックにメディアを移動
reaper.AZ_SetMediaItemStartTimeSeconds(value,pos)- ・そのメディアをposの位置に移動 end end
reaper.AZ_SetPlayCursorPosition(0,0,nowPos)- ・最後に移動していたカーソルをもとに戻す
Screens
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * itemList = AZ_GetSelectedMediaItemList(0) nowPos = AZ_GetPlayCursorPosition(0)[1] if len(itemList) > 0: setName = "select" nameCheck = False selectTrack = AZ_GetTrackItemSelect(0, 0, 1) trList = AZ_GetTrackItemChildList(selectTrack)[1] if len(trList) > 0: for track in trList: trName = AZ_GetTrackItemName(track)[1] if trName == setName: nameCheck = True childTrack = track childTrackId = AZ_GetTrackItemIndex(childTrack) if nameCheck == False: childTrack = AZ_InsertChildTrack(selectTrack)[0] AZ_SetTrackItemName(childTrack, setName) childTrackId = AZ_GetTrackItemIndex(childTrack) isFirst = False for item in itemList: if isFirst == False: interval = 2 isFirst = True else: interval = 0.5 RPR_CSurf_GoEnd() pos = AZ_GetPlayCursorPosition(0)[1] pos = pos + interval AZ_SetMediaItemMoveToTrack(item, childTrackId) AZ_SetMediaItemStartTimeSeconds(item, pos) AZ_SetPlayCursorPosition(0, 0, nowPos)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import *- ・APIを利用可能にする
itemList = AZ_GetSelectedMediaItemList(0)- ・選択メディアのリスト出力
nowPos = AZ_GetPlayCursorPosition(0)[1]- ・現在のカーソル位置を取得
if len(itemList) > 0:- ・選択メディアが一つでもある場合は以下を実行
setName = "select"- ・トラック名を用意
nameCheck = False- ・チェック用のBoolをFalseで用意
selectTrack = AZ_GetTrackItemSelect(0, 0, 1)- ・選択トラックを取得
trList = AZ_GetTrackItemChildList(selectTrack)[1]- ・選択トラックの子をリストで取得
if len(trList) > 0:- ・子トラックが一つでもある場合は以下を実行
for track in trList:- ・トラックリスト分Forをループ実行
trName = AZ_GetTrackItemName(track)[1]- ・トラックの名前を取得
if trName == setName:- ・トラックの名前と設定名前が一致した場合以下を実行
nameCheck = True- ・selectの名前が一致するトラックがあるためtrueを設定
childTrack = track- ・childTrackに一致したトラックを設定
childTrackId = AZ_GetTrackItemIndex(childTrack)- ・childTrackからIdを取得
if nameCheck == False:- ・nameCheckの判定がFalseになっている場合以下を実行
childTrack = AZ_InsertChildTrack(selectTrack)[0]- ・選択トラックの子にトラックを生成
AZ_SetTrackItemName(childTrack, setName)- ・生成したトラックに"select"の名前を設定
childTrackId = AZ_GetTrackItemIndex(childTrack)- ・生成したトラックのIdを取得
isFirst = False- ・最初かどうか判定するフラグを設定する
for item in itemList:- ・メディアリスト分Forループ再生
if isFirst == False: interval = 2 isFirst = True- ・最初の設定位置に2秒を設定
else:- ・以降は設定位置に0.5秒を設定
interval = 0.5RPR_CSurf_GoEnd()- ・カーソルを最後に設定
pos = AZ_GetPlayCursorPosition(0)[1]- ・最後に設定したカーソルの位置を取得
pos = pos + interval- ・設定したインターバルの秒数を足してposに設定
AZ_SetMediaItemMoveToTrack(item, childTrackId)- ・子トラックにメディアを移動
AZ_SetMediaItemStartTimeSeconds(item, pos)- ・そのメディアをposの位置に移動
AZ_SetPlayCursorPosition(0, 0, nowPos)- ・最後に移動していたカーソルをもとに戻す
Screens
AZSTOKE_Recording_SeparateTakesToNGSort recorded takes into OK and NGBefore you run it
プロジェクト内にメディアを複数設置
Script
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()Line by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER")- ・RIGDOCKSをインポート
-- NG function OKtoNG()- ・メディアをNGにする関数
allCount,_ = reaper.AZ_GetSelectedMediaTypeCount(0,"")- ・ 選択されたメディアの数を取得
mutedMedia = {}for i = 0,allCount-1 do name = reaper.AZ_GetSelectedMediaName(0,i)- ・ メディアの名前を取得
name = name.."_ng"- ・ 名前の末尾に"_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()- ・NGのメディアをOKにする関数
allCount,_ = reaper.AZ_GetSelectedMediaTypeCount(0,"")- ・ 選択されたメディアの数を取得
okMedia = {}for i = 0, allCount-1 do name = reaper.AZ_GetSelectedMediaName(0,i)- ・ メディアの名前を取得
name = reaper.AZ_ReplaceSearchString(name, "_ng", "")- ・ 名前から"_ng"を削除
reaper.AZ_SetSelectedMediaName(0,i,name)- ・ メディアの名前を設定
table.insert(okMedia, name)- ・ OKにしたメディアの名前をリストに追加
reaper.AZ_SetSelectedMediaMute(0, i, false)- ・ メディアをミュート解除に設定 end
- Msg("以下のメディアをOKにしました") ShowObject(okMedia)
- ・ ミュート解除したメディアのリストを表示 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()- ・ 1ならOKにする処理を実行
else OKtoNG()- ・ それ以外ならNGにする処理を実行
end endSeparateTakesToNG()- ・メイン処理の実行
Screens
Before you run it
プロジェクト内にメディアを複数設置
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * # NG def OKtoNG(): _,_,allCount,_ = AZ_GetSelectedMediaTypeCount(0, "", 0, 0) mutedMedia = [] for i in range(allCount): name = AZ_GetSelectedMediaName(0, i)[2] name = name + "_ng" AZ_SetSelectedMediaName(0, i, name) mutedMedia.append(name) AZ_SetSelectedMediaMute(0, i, True) Msg("The following media has been set to NG") ShowObject(mutedMedia) # OK def NGtoOK(): _,_,allCount,_ = AZ_GetSelectedMediaTypeCount(0, "", 0, 0) mutedMedia = [] for i in range(allCount): name = AZ_GetSelectedMediaName(0, i)[2] name = AZ_ReplaceSearchString(name, "_ng", "")[3] AZ_SetSelectedMediaName(0, i, name) mutedMedia.append(name) AZ_SetSelectedMediaMute(0, i, False) Msg("The following media has been set to OK") ShowObject(mutedMedia) def SeparateTakesToNG(): retval, inputList = AZ_GetUserInputList("Select processing mode", 1, "OK to NG: 0 / NG to OK: 1", "0") if not retval: return if inputList[0] == "1": NGtoOK() else: OKtoNG() SeparateTakesToNG()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import *- ・RIGDOCKSをインポート
# NG def OKtoNG():- ・メディアをNGにする関数
_,_,allCount,_ = AZ_GetSelectedMediaTypeCount(0, "", 0, 0)- ・ 選択されたメディアの数を取得
mutedMedia = []for i in range(allCount): name = AZ_GetSelectedMediaName(0, i)[2]- ・ メディアの名前を取得
name = name + "_ng"- ・ 名前の末尾に"_ng"を追加
AZ_SetSelectedMediaName(0, i, name)- ・ メディアの名前を設定
mutedMedia.append(name)- ・ ミュートしたメディアの名前をリストに追加
AZ_SetSelectedMediaMute(0, i, True)- ・ メディアをミュートに設定
Msg("The following media has been set to NG") ShowObject(mutedMedia)- ・ ミュートしたメディアのリストを表示
# OK def NGtoOK():- ・NGのメディアをOKにする関数
_,_,allCount,_ = AZ_GetSelectedMediaTypeCount(0, "", 0, 0)- ・ 選択されたメディアの数を取得
mutedMedia = []for i in range(allCount): name = AZ_GetSelectedMediaName(0, i)[2]- ・ メディアの名前を取得
name = AZ_ReplaceSearchString(name, "_ng", "")[3]- ・ 名前から"_ng"を削除
AZ_SetSelectedMediaName(0, i, name)- ・ メディアの名前を設定
mutedMedia.append(name)- ・ OKにしたメディアの名前をリストに追加
AZ_SetSelectedMediaMute(0, i, False)- ・ メディアをミュート解除に設定
Msg("The following media has been set to OK") ShowObject(mutedMedia)- ・ ミュート解除したメディアのリストを表示
def SeparateTakesToNG():retval, inputList = AZ_GetUserInputList("Select processing mode", 1, "OK to NG: 0 / NG to OK: 1", "0")if not retval: return- ・ ユーザーに処理モードの選択を促す
if inputList[0] == "1": NGtoOK()- ・ 1ならOKにする処理を実行
else: OKtoNG()- ・ それ以外ならNGにする処理を実行
SeparateTakesToNG()- ・メイン処理の実行
Screens
Movie1
AZSTOKE_Movie_Copy_1Copy specified number of selected videos in parallelBefore you run it
動画を用意
Script
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 endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER")- ・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)- ・トラックからトラックIndexを取得
cancelType,inputList = reaper.AZ_GetUserInputList("MovieCope",2,"CopyNum,Interval","9,0.4")- ・テキストボックスを2つ用意してコピー数と間隔を設定
if cancelType then- ・OKを押した場合以下を実行
startPos = endTime+inputList[2]- ・終了時間から間隔時間を足すことで次の動画の位置startPosを設定
for i =1,inputList[1] do- ・指定コピー数をForでループ設定
reaper.AZ_SetSelectedMediaActiveTakeCopy(0,0,trIndex,startPos)- ・選択メディア(動画)をstartPos位置にコピー
startPos =length+inputList[2]+startPos- ・次の動画の開始位置を設定
end end
Screens
Before you run it
動画を用意
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * mediaLength = AZ_GetSelectedMediaLength(0,0)[2] track = AZ_GetTrackItemSelect(0,0,1) trIndex = AZ_GetTrackItemIndex(track) result, inputList = AZ_GetUserInputList("MovieCope",2,"CopyNum,Interval","9,0.4") if result: copyNum = int(inputList[0]) interval = float(inputList[1]) endTime = AZ_GetSelectedMediaEndTime(0, 0)[2] startPos = endTime + interval for i in range(copyNum): AZ_SetSelectedMediaActiveTakeCopy(0, 0, trIndex, startPos) startPos += mediaLength + intervalLine by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import *- ・Bronze、Silverを利用可能にする
mediaLength = AZ_GetSelectedMediaLength(0,0)[2]- ・選択メディア(動画)の長さを取得
track = AZ_GetTrackItemSelect(0,0,1)- ・選択トラックを取得
trIndex = AZ_GetTrackItemIndex(track)- ・トラックからトラックIndexを取得
result, inputList = AZ_GetUserInputList("MovieCope",2,"CopyNum,Interval","9,0.4")- ・テキストボックスを2つ用意してコピー数と間隔を設定
if result:- ・OKを押した場合以下を実行
copyNum = int(inputList[0]) interval = float(inputList[1])- ・テキストボックスに入力したコピー数と間隔を取得
endTime = AZ_GetSelectedMediaEndTime(0, 0)[2]- ・選択メディア(動画)の終了時間を取得
startPos = endTime + interval- ・終了時間から間隔時間を足すことで次の動画の位置startPosを設定
for i in range(copyNum):- ・指定コピー数をForでループ設定
AZ_SetSelectedMediaActiveTakeCopy(0, 0, trIndex, startPos)- ・選択メディア(動画)をstartPos位置にコピー
startPos += mediaLength + interval- ・次の動画の開始位置を設定
Screens
TRACK9
AZSTOKE_SelectTrackChildAutoNameAndColorAutomatically increment names and automatically color children of selected tracksBefore you run it
親子関係のトラックを生成 親のトラックには名前を設定 親トラックを選択
Script
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 endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER")- SILVERAPIを利用可能にする準備
count = reaper.AZ_GetTrackCountSelect(0,1)- 開いているプロジェクトのトラックの数を取得してcount変数に代入
for i = 0,count-1 do- countの数分forをループ
masterName = reaper.AZ_GetSelectedTrackIdName(0,i)- 選択している親のトラックの名前を取得
color = reaper.AZ_GetRandomColor()- カラーのランダム値をcolor変数に代入
reaper.AZ_SetSelectedTrackIdColor(0,i,color)- 各親トラックに色を設定
trackList = reaper.AZ_GetSelectedTrackIdChildList(0,i)- ・各親の子トラックを配列出力してtrackList配列に代入
for e, value in pairs(trackList) do- trackListの数分forをループ
reaper.AZ_SetTrackItemColor(trackList[e],color)- 親のトラック色をそのまま子トラックにも反映
num = reaper.AZ_FormatNumDigit(e,2)- 子トラックのID順に2桁で数値を出力 例:01/02/03/04
setName = masterName.."_"..num- 親トラックの名前と2桁にした数値を_で結んでsetNameに代入
reaper.AZ_SetTrackItemName(trackList[e],setName)- 各子トラックに名前を付与
end end
Screens
Before you run it
親子関係のトラックを生成 親のトラックには名前を設定 親トラックを選択
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import * count = AZ_GetTrackCountSelect(0,1) for i in range(count): _,_,masterName,_ = AZ_GetSelectedTrackIdName(0,i,"",1024) color,_,_,_ = AZ_GetRandomColor(0,0,0,0) AZ_SetSelectedTrackIdColor(0,i,color) _,_,trackList,_ = AZ_GetSelectedTrackIdChildList(0,i) for e, track in enumerate(trackList, 1): AZ_SetTrackItemColor(track,color) _,_,digitNum,_ = AZ_FormatNumDigit(e,2,"",1024) setName = masterName + "_" + digitNum AZ_SetTrackItemName(track,setName)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import *- ・SilverのAPIをインポート
count = AZ_GetTrackCountSelect(0,1)- ・選択トラックの数を出力
for i in range(count):- ・選択トラック数分ループ
_,_,masterName,_ = AZ_GetSelectedTrackIdName(0,i,"",1024)- ・選択トラックの名前を取得してmaseterNameに代入
color,_,_,_ = AZ_GetRandomColor(0,0,0,0)- ・ランダムのカラー値を出力
AZ_SetSelectedTrackIdColor(0,i,color)- ・選択トラックの色を設定
_,_,trackList,_ = AZ_GetSelectedTrackIdChildList(0,i)- ・選択トラックの子トラックを配列で出力してtrackListに代入
for e, track in enumerate(trackList, 1):- ・trackList配列内の数分ループ
AZ_SetTrackItemColor(track,color)- ・trackListから出力されたtrackに選択トラックと同じ色を設定
_,_,digitNum,_ = AZ_FormatNumDigit(e,2,"",1024)- ・ループで出力されるIDに2桁で出力 01/02/03/04という形で
setName = masterName + "_" + digitNum- ・選択トラック名(maseterName)に「_」と「digitNum」を合わせて名前を作ってsetNameに代入
AZ_SetTrackItemName(track,setName)- ・setNameをtrack名に設定
Screens
AZSTOKE_AllDeleteTopSelectTrackSearchNotUseMediaAndTrackDelete Mute and Unused Tracks Starting with Selected TracksBefore you run it
削除を開始したい先頭トラックを選択
Script
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 endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER")- SILVERのAPIを利用可能にする
allCount = reaper.AZ_GetMediaTypeCount(0,"")- 全てのメディアの数を出力してallCountに代入
--Mute Media Delete for i = allCount-1,0,-1 do- allCountから0に向かって逆にループ再生
mute = reaper.AZ_GetMediaMute(0,i)- 各メディアのミュート情報を取得
if mute then- ミュートがTrue(ミュート状態)だった場合以下に続く
reaper.AZ_DeleteMedia(0,i)- [i]のIndexメディアを削除
end enddepthList = reaper.AZ_GetTrackDepthList(0)- 全トラックの階層情報をリストで取得してdepthListに代入
count = reaper.AZ_GetTrackCountSelect(0,0)- 全トラックの数を取得してcountに代入
track,trackId = reaper.AZ_GetSelectedTrackFirstInfo(0)- すべての選択トラックの先頭トラックとトラックIDを取得してtrack/trackIdに代入
for a = 0,1 do- 階層が変わって削除できていない場合を防ぐために2回ループ
for i = count-1,trackId,-1 do- トラックの数から選択先頭トラックまでをループ
allCount = reaper.AZ_GetTrackMediaTypeCount(0,i,"")- 指定トラックIDのメディアの数を取得してallCountに代入
trackList = reaper.AZ_GetTrackIdChildList(0,i)- ・指定トラックIDの子のトラックを取得してtrackListに代入 ・子トラックがない場合はretvalにfalseを返す。
if allCount == 0 and retval == false then- もしトラックにメディアが一つもなく子トラックがない場合
reaper.AZ_DeleteTrackIdSelect(0,i,0)- 指定トラックを削除する
end endcount = reaper.AZ_GetTrackCountSelect(0,0)- 削除したので再度残りのトラックの数を出力
for i = 0,count-1 do- トラックの数ループ再生
track = reaper.AZ_GetTrackItemSelect(0,i,0)- 指定IDのトラックを取得してtrackに代入
for e, value in pairs(depthList) do- 階層リストの数分ループ
if track == depthList[e].Track then- もしtrackと階層配列内のtrackが一致したら
reaper.AZ_SetTrackItemDepth(track,depthList[e].Depth)- そのトラックの階層を前の状態に戻す
end end end end
Screens
Before you run it
削除を開始したい先頭トラックを選択
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * _,_,allCount,_ = AZ_GetMediaTypeCount(0,"",0,0) for i in reversed(range(allCount)): mute = AZ_GetMediaMute(0,i) if mute: AZ_DeleteMedia(0,i) depthList = AZ_GetTrackDepthList(0) count = AZ_GetTrackCountSelect(0,0) _,_,trackID = AZ_GetSelectedTrackFirstInfo(0,0) for a in range(2): for i in reversed(range(count)): _,_,_,allCount,_ = AZ_GetTrackMediaTypeCount(0,i,"",0,0) _, _, trackList,trackCount = AZ_GetTrackIdChildList(0,i) if allCount == 0 and trackCount == 0 : AZ_DeleteTrackIdSelect(0,i,0) count = AZ_GetTrackCountSelect(0,0) for i in range(count): track = AZ_GetTrackItemSelect(0,i,0) for e, value in enumerate(depthList, 0): if track == depthList[e]["Track"]: AZ_SetTrackItemDepth(track,depthList[e]["Depth"])Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import *- ・BronzeAPIを利用可能にする
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from AZSTOKE_SILVER_python import *- ・SilverAPIを利用可能にする
_,_,allCount,_ = AZ_GetMediaTypeCount(0,"",0,0)- ・全メディア数を取得してallCountに代入
for i in reversed(range(allCount)):- ・allCountを逆からForループ
mute = AZ_GetMediaMute(0,i)- ・各メディアごとにミュート状態を確認
if mute:- ・もしミュートしていたらを確認
AZ_DeleteMedia(0,i)- ・ミュートしているメディアを削除
depthList = AZ_GetTrackDepthList(0)- ・トラックの階層を取得して配列のdepthListに代入
count = AZ_GetTrackCountSelect(0,0)- ・全トラック数を取得してcountに代入
_,_,trackID = AZ_GetSelectedTrackFirstInfo(0,0)- ・選択トラックの先頭トラックのトラックIDを取得してtrackIDに代入
for a in range(2):- ・以下処理を2回実行する
- for i in reversed(range(count)): ・countの数を逆にループ
_,_,_,allCount,_ = AZ_GetTrackMediaTypeCount(0,i,"",0,0)- ・指定トラックに入っているメディアの数を出力してallCountに代入
_, _, trackList,trackCount = AZ_GetTrackIdChildList(0,i)- ・指定トラックIDの子トラックを取得してtrackListに配列出力とtrackCountに数を代入
if allCount == 0 and trackCount == 0 :- ・トラックにメディアがないと子のトラックがないトラックを判定
AZ_DeleteTrackIdSelect(0,i,0)- ・トラックを削除
count = AZ_GetTrackCountSelect(0,0)- ・削除後再度トラックの数を出力してcountに代入
for i in range(count):- ・count分ループ対応
track = AZ_GetTrackItemSelect(0,i,0)- ・指定のIDのトラックを取得してtrackに代入
for e, value in enumerate(depthList, 0):- ・depthList分Forをループ
if track == depthList[e]["Track"]:- ・depthListのトラックとtrackが同じものを検知する
AZ_SetTrackItemDepth(track,depthList[e]["Depth"])- ・同じものは前の階層に戻す対応
Screens
AZSTOKE_AllTrackOrganizeDelete/naming/coloring selected tracks at the beginningBefore you run it
変更したい親トラックを選択
Script
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 endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER")- ・SILVERAPIを利用可能にする
allCount = reaper.AZ_GetMediaTypeCount(0,"")- ・プロジェクト内のメディアの数を出力してallCountに代入
--Mute Media Delete for i = allCount-1,0,-1 do- ・allCountから0に向けてForループ
mute = reaper.AZ_GetMediaMute(0,i)- ・各メディアのミュートを検知
if mute then- ・ミュートだった場合
reaper.AZ_DeleteMedia(0,i)- ・メディアを削除対応
end enddepthList = reaper.AZ_GetTrackDepthList(0)- ・全トラックの階層を取得してdepthList配列に代入
count = reaper.AZ_GetTrackCountSelect(0,0)- ・全トラック数を取得してcountに代入
track,trackId = reaper.AZ_GetSelectedTrackFirstInfo(0)- ・選択トラックの先頭トラックを取得してtrackとtrackIdに代入
for a = 0,1 do- ・以下処理を2回ループさせる
for i = count-1,trackId,-1 do- ・トラックの数分0に向かってループ
allCount = reaper.AZ_GetTrackMediaTypeCount(0,i,"")- ・トラック内のメディア数を取得してallCountに代入
trackList,trackCount = reaper.AZ_GetTrackIdChildList(0,i)- ・トラックの子トラックをtrackListに代入 子トラックの数をtrackCountに代入
if allCount == 0 and trackCount == 0 then- ・メディアもなく、子トラックもない場合
reaper.AZ_DeleteTrackIdSelect(0,i,0)- ・トラックを削除
end end count = reaper.AZ_GetTrackCountSelect(0,0)- ・トラック削除後に再度トラック数を取得 countに代入
for i = 0,count-1 do- ・count分Forループ
track = reaper.AZ_GetTrackItemSelect(0,i,0)- ・各IDのトラックアイテムを取得
for e, value in pairs(depthList) do- ・階層リスト分Forループ
if track == depthList[e].Track then- ・階層に入っているトラックと各IDのトラックを検知
reaper.AZ_SetTrackItemDepth(track,depthList[e].Depth)- ・指定トラックの階層を設定
end end end endcount = reaper.AZ_GetTrackCountSelect(0,1)- ・トラックの数を出力してcountに代入
for i = 0,count-1 do- ・count分Forループ
masterName = reaper.AZ_GetSelectedTrackIdName(0,i)- ・選択トラックの名前を取得
color = reaper.AZ_GetRandomColor()- ・ランダムのカラー値を取得
reaper.AZ_SetSelectedTrackIdColor(0,i,color)- ・選択トラックにカラーを設定
trackList = reaper.AZ_GetSelectedTrackIdChildList(0,i)- ・選択トラックの子の配列を取得してtrackListに代入
for e, value in pairs(trackList) do- ・trackList分Forループ
reaper.AZ_SetTrackItemColor(trackList[e],color)- ・子のトラックアイテムにカラーを設定
num = reaper.AZ_FormatNumDigit(e,2)- ・順列番号に桁の文字列を出力 01/02/03/04
setName = masterName.."_"..num- ・選択トラックの名前に桁番号を付与してsetNameに代入
reaper.AZ_SetTrackItemName(trackList[e],setName)- ・各子トラックに名前を設定
endend
Screens
APIs used
- AZ_GetMediaTypeCount
- AZ_GetMediaMute
- AZ_DeleteMedia
- AZ_GetTrackDepthList
- AZ_GetTrackCountSelect
- AZ_GetSelectedTrackFirstInfo
- AZ_GetTrackMediaTypeCount
- AZ_GetTrackIdChildList
- AZ_DeleteTrackIdSelect
- AZ_GetTrackItemSelect
- AZ_SetTrackItemDepth
- AZ_GetSelectedTrackIdName
- AZ_GetRandomColor
- AZ_SetSelectedTrackIdColor
- AZ_GetSelectedTrackIdChildList
- AZ_SetTrackItemColor
- AZ_FormatNumDigit
- AZ_SetTrackItemName
Before you run it
変更したい親トラックを選択
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * _,_,allCount,_ = AZ_GetMediaTypeCount(0,"",0,0) for i in reversed(range(allCount)): mute = AZ_GetMediaMute(0,i) if mute: AZ_DeleteMedia(0,i) depthList = AZ_GetTrackDepthList(0) count = AZ_GetTrackCountSelect(0,0) _, _,trackID = AZ_GetSelectedTrackFirstInfo(0,0) for a in range(2): for i in reversed(range(count)): _,_,_,allCount,_ = AZ_GetTrackMediaTypeCount(0,i,"",0,0) _, _, trackList,trackCount = AZ_GetTrackIdChildList(0,i) if allCount == 0 and trackCount == 0 : AZ_DeleteTrackIdSelect(0,i,0) count = AZ_GetTrackCountSelect(0,0) for i in range(count): track = AZ_GetTrackItemSelect(0,i,0) for e, value in enumerate(depthList, 0): if track == depthList[e]["Track"]: AZ_SetTrackItemDepth(track,depthList[e]["Depth"]) count = AZ_GetTrackCountSelect(0,1) for i in range(count): _,_,masterName,_ = AZ_GetSelectedTrackIdName(0,i,"",1024) color,_,_,_ = AZ_GetRandomColor(0,0,0,0) AZ_SetSelectedTrackIdColor(0,i,color) _, _, trackList, _ = AZ_GetSelectedTrackIdChildList(0,i) for e, track in enumerate(trackList, 1): AZ_SetTrackItemColor(track,color) _,_,digitNum,_ = AZ_FormatNumDigit(e,2,"",1024) setName = masterName + "_" + digitNum AZ_SetTrackItemName(track,setName)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import *- ・BRONZE-API-を利用できるように設定
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from AZSTOKE_SILVER_python import *- ・SILVER-API-を利用できるように設定
_,_,allCount,_ = AZ_GetMediaTypeCount(0,"",0,0)- ・メディアの数を出力してallCountに代入
for i in reversed(range(allCount)):- ・メディアの数分ループ 逆再生
mute = AZ_GetMediaMute(0,i)- ・各メディアのミュート情報を取得
if mute:- ・もしミュートだったらを検知
AZ_DeleteMedia(0,i)- ・メディアを削除
depthList = AZ_GetTrackDepthList(0)- ・全トラックの階層数の配列を取得してdepthListに代入
count = AZ_GetTrackCountSelect(0,0)- ・トラックの数を取得してcountに代入
_, _,trackID = AZ_GetSelectedTrackFirstInfo(0,0)- ・選択トラックの先頭トラックのトラックIDを取得してtrackIDに代入
for a in range(2):- ・以下処理を2回実行
for i in reversed(range(count)):- ・count分ループ 逆再生
_,_,_,allCount,_ = AZ_GetTrackMediaTypeCount(0,i,"",0,0)- ・指定トラック内のメディアの数を出力
_, _, trackList,trackCount = AZ_GetTrackIdChildList(0,i)- ・指定トラックに子トラックを取得してtrackListに代入 ・子トラックの数を取得してtrackCountに代入
if allCount == 0 and trackCount == 0 :- ・メディアの数と子トラックがない場合
AZ_DeleteTrackIdSelect(0,i,0)- ・指定トラックを削除する。
count = AZ_GetTrackCountSelect(0,0)- ・削除した後にトラックの数を取得してcountに代入
for i in range(count):- ・countの数 Forループ
track = AZ_GetTrackItemSelect(0,i,0)- ・IDごとにトラックアイテムを取得してtrackに代入
for e, value in enumerate(depthList, 0):- ・階層リスト数分ループ
if track == depthList[e]["Track"]:- ・trackと階層のトラックアイテムが一致する場合
AZ_SetTrackItemDepth(track,depthList[e]["Depth"])- ・階層リストの階層にトラックを設定
count = AZ_GetTrackCountSelect(0,1)- ・選択トラックの数を取得してcountに代入
for i in range(count):- ・count分Forループ対応
_,_,masterName,_ = AZ_GetSelectedTrackIdName(0,i,"",1024)- ・選択トラックの名前を取得してmasterNameに代入
color,_,_,_ = AZ_GetRandomColor(0,0,0,0)- ・ランダムカラーを取得してcolorを設定
AZ_SetSelectedTrackIdColor(0,i,color)- ・指定選択トラックにカラーを設定
_, _, trackList, _ = AZ_GetSelectedTrackIdChildList(0,i)- ・指定選択トラックの子トラックを出力して配列を作成
for e, track in enumerate(trackList, 1):- ・トラックリスト分ループ
AZ_SetTrackItemColor(track,color)- ・トラックアイテムごとにカラーを設定
_,_,digitNum,_ = AZ_FormatNumDigit(e,2,"",1024)- ・順列IDごとに2桁の文字列を出力してdigitNumに代入
setName = masterName + "_" + digitNum- ・maseterNameの末尾にdigitNumを設定してsetNameに代入
AZ_SetTrackItemName(track,setName)- ・指定トラックアイテムに名前を設定
Screens
APIs used
- AZ_GetMediaTypeCount
- AZ_GetMediaMute
- AZ_DeleteMedia
- AZ_GetTrackDepthList
- AZ_GetTrackCountSelect
- AZ_GetSelectedTrackFirstInfo
- AZ_GetTrackMediaTypeCount
- AZ_GetTrackIdChildList
- AZ_DeleteTrackIdSelect
- AZ_GetTrackItemSelect
- AZ_SetTrackItemDepth
- AZ_GetSelectedTrackIdName
- AZ_GetRandomColor
- AZ_SetSelectedTrackIdColor
- AZ_GetSelectedTrackIdChildList
- AZ_SetTrackItemColor
- AZ_FormatNumDigit
- AZ_SetTrackItemName
AZSTOKE_TrackNameIncludeStringsSoloSettingSet track name to Solo when partial match is detectedBefore you run it
トラックの命名をしておく ※部分一致の範囲を理解して命名してください
Script
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 endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER")- ・SilverのAPIを利用可能にする
soloIncludeString = "_en"- ・soloにする部分一致の文字列を設定してsoloIncludeStringに代入
trackList = reaper.AZ_GetTrackItemList(0)- ・指定プロジェクトの全てのトラックを配列のtrackListに代入
reaper.AZ_SetTrackAllSoloOFF(0)- ・すべてのsoloをOFFに設定
for i, value in pairs(trackList) do- ・trackListの配列分をForループ
name = reaper.AZ_GetTrackItemName(value)- ・各トラックの名前を取得してnameに代入
check = reaper.AZ_CheckIncludeString(name,soloIncludeString)- ・nameにsoloIncludeStringが入っているかをチェックしてcheckにboolを代入
if check then- ・checkがtrueなら以下に実行
reaper.AZ_SetTrackItemSolo(value,true)- ・checkを通ったトラックにsoloを設定
end end
Screens
Before you run it
トラックの命名をしておく ※部分一致の範囲を理解して命名してください
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import * soloIncludeString = "_jp" trackList = AZ_GetTrackItemList(0) AZ_SetTrackAllSoloOFF(0) for i, value in enumerate(trackList, 1): _,name,_ = AZ_GetTrackItemName(value,"",1024) check = AZ_CheckIncludeString(name,soloIncludeString) if check : AZ_SetTrackItemSolo(value,True)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import *- ・SilverAPIを利用可能にする
soloIncludeString = "_jp"- ・ソロの対象とする文字列を用意してsoloIncludeStringに代入
trackList = AZ_GetTrackItemList(0)- ・開いているプロジェクトのトラックを配列で出力してtrackListに代入
AZ_SetTrackAllSoloOFF(0)- ・現在設定しているすべてのソロをオフに設定
for i, value in enumerate(trackList, 1):- ・trackList分Forループ
_,name,_ = AZ_GetTrackItemName(value,"",1024)- ・各トラックごとの名前を取得してnameに代入
check = AZ_CheckIncludeString(name,soloIncludeString)- ・nameに対してsoloIncludeStringの文字列があるかチェックしてcheckにboolを代入
if check :- ・文字列が入っていることを確認
AZ_SetTrackItemSolo(value,True)- ・指定トラックにソロを設定
Screens
AZSTOKE_TrackSetSameAutoSetterAutomatically create multiple sets of tracksBefore you run it
ベースのトラック/子トラックを作成しておく
Script
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 endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER")- ・SilverのAPIを可能にする
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)- ・ベーストラックを取得してmasterTrackに代入
masterName = reaper.AZ_GetTrackItemName(masterTrack)- ・トラックの名前を取得してmasterNameに代入
masterDepth = reaper.AZ_GetTrackItemDepth(masterTrack)- ・トラックの階層を取得してmasterDepthに代入
for i, value in pairs(trackNameList) do- ・trackNameList分Forループ
if masterName == trackNameList[i] then- ・masterNameと一致する場合以下を実行
reaper.AZ_SetTrackItemColor(masterTrack,trackColorList[i])- ・トラックの色を設定
masterColor = trackColorList[i]- ・masterColorにカラーを設定
end end--Get Master Track Children childList,masterChildCount = reaper.AZ_GetTrackItemChildList(masterTrack)- ・masterTrackの子トラックを出力してchildListに配列代入
childInfoList = {}- ・子トラックの各情報を登録する配列を用意
for i, value in pairs(childList) do- ・childList分Forループ
childInfoList[i] = {}- ・子トラックのさらに情報分岐用に配列に配列の枠を用意
childInfoList[i]["TrackName"]= reaper.AZ_GetTrackItemName(value)- ・トラックの名前をchildInfoListに代入
reaper.AZ_SetTrackItemColor(value,masterColor)- ・masterColorを子トラックに同色設定
end--delet trackNameList & trackBaseList create trCount = reaper.AZ_GetTrackCountSelect(0,0)- ・トラックの数を取得
deletIDList = {} idCount = 0for i = 0,trCount-1 do name = reaper.AZ_GetTrackIdName(0,i)- ・トラックIDごとに名前を取得
for i, value in pairs(trackNameList) do- ・trackNameListごとにForルー@う
if name == value then- ・nameとtrackNameListを検索して一致するか確認
idCount = idCount + 1 deletIDList[idCount] = i- ・一致する場合、すでにあると判断されて削除リストにIDを入れる
end end endtable.sort(deletIDList,function(a,b) return (a>b)end)- deletIDListを降順ソート化する
for i = 1,idCount do table.remove(trackNameList,deletIDList[i]) table.remove(trackColorList,deletIDList[i]) end- ・後ろから順番に消す
--InsertTrack for i, value in pairs(trackNameList) do- ・trackNameList分Forループ
count = reaper.AZ_GetTrackCountSelect(0,0)- ・トラックの数を取得
track = reaper.AZ_InsertTrackId(0,count)- ・一番最後にトラックを挿入してtrackのアイテムを出力
reaper.AZ_SetTrackItemName(track,value)- ・インサートしたトラックに名前を設定
reaper.AZ_SetTrackItemDepth(track,masterDepth)- ・インサートしたトラックにmasterの階層と同様にする
reaper.AZ_SetTrackItemColor(track,trackColorList[i])- ・色をtrackColorListに沿って設定する
for e = 1,masterChildCount do- ・masterChildCountの数分forを実行
childTrack = reaper.AZ_InsertChildTrack(track)- ・インサートしたトラックの子トラックをインサートしてchildTrackにアイテムを出力
reaper.AZ_SetTrackItemName(childTrack,childInfoList[e].TrackName)- ・子トラックに名前を設定
reaper.AZ_SetTrackItemColor(childTrack,trackColorList[i])- ・子トラックに色を設定
end end
Screens
Before you run it
ベースのトラック/子トラックを作成しておく
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import * trackNameList = ["pl0000","pl1000","pl2000","pl3000","pl4000","pl5000"] trackColorList = [33554304,33521664,25165824,16777471,21004543,20988032] masterTrack = AZ_GetTrackItemSelect(0,0,1) _,masterName,_ = AZ_GetTrackItemName(masterTrack,0,1024) masterDepth = AZ_GetTrackItemDepth(masterTrack) masterColor = 0 for i, value in enumerate(trackNameList, 0): if masterName == trackNameList[i]: AZ_SetTrackItemColor(masterTrack,trackColorList[i]) masterColor = trackColorList[i] _,childList,masterChildCount = AZ_GetTrackItemChildList(masterTrack) childInfoList = [] for i, value in enumerate(childList, 0): childInfoList.insert(i,{}) _,childInfoList[i]["TrackName"],_ = AZ_GetTrackItemName(value,"",1024) AZ_SetTrackItemColor(value,masterColor) trCount = AZ_GetTrackCountSelect(0,0) deletIDList = [] idCount = 0 for i in range(trCount): _,_,name,_ = AZ_GetTrackIdName(0,i,"",1024) for e, value in enumerate(trackNameList, 0): if name == value: idCount = idCount + 1 deletIDList.append(e) deletIDList = sorted(deletIDList,reverse = True) for i in range(idCount): trackNameList.pop(deletIDList[i]) trackColorList.pop(deletIDList[i]) for i, value in enumerate(trackNameList, 0): count = AZ_GetTrackCountSelect(0,0) track = AZ_InsertTrackId(0,count) AZ_SetTrackItemName(track,value) AZ_SetTrackItemDepth(track,masterDepth) AZ_SetTrackItemColor(track,trackColorList[i]) for e in range(masterChildCount): childTrack,_,_ = AZ_InsertChildTrack(track,0) AZ_SetTrackItemName(childTrack,childInfoList[e]["TrackName"]) AZ_SetTrackItemColor(childTrack,trackColorList[i])Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import *- ・SilverAPI利用可能にする
trackNameList = ["pl0000","pl1000","pl2000","pl3000","pl4000","pl5000"] trackColorList = [33554304,33521664,25165824,16777471,21004543,20988032]- ・指定の名前と色を設定
masterTrack = AZ_GetTrackItemSelect(0,0,1)- ・選択トラックの先頭を取得してmasterTrackに代入
_,masterName,_ = AZ_GetTrackItemName(masterTrack,0,1024)- ・masterTrackの名前を取得してmasterNameに代入
masterDepth = AZ_GetTrackItemDepth(masterTrack)- ・masterTrackの階層を取得してmasterDepthに代入
masterColor = 0- ・masterColorの初期値を設定
for i, value in enumerate(trackNameList, 0):- ・trackNameList分Forループ
if masterName == trackNameList[i]:- ・masterNameと各trackNameListが一致したら以下を実行
AZ_SetTrackItemColor(masterTrack,trackColorList[i])- ・masterTrackに色を設定
masterColor = trackColorList[i]- ・設定した色をmasterColorに代入
_,childList,masterChildCount = AZ_GetTrackItemChildList(masterTrack)- ・masterTrackの子トラックリストと数を取得してchildListとmasterChildCountに代入
childInfoList = []- ・childInfoListの配列初期化
for i, value in enumerate(childList, 0):- ・childList分Forループ
childInfoList.insert(i,{})- ・childInfoListに枠を追加
_,childInfoList[i]["TrackName"],_ = AZ_GetTrackItemName(value,"",1024)- ・childInfoListにTrackNameのキーに名前を代入
AZ_SetTrackItemColor(value,masterColor)- ・子トラックにmasterColorの色設定
trCount = AZ_GetTrackCountSelect(0,0)- ・現在のトラックの数を取得
deletIDList = []- ・deletIDListの初期化
idCount = 0- ・idCountの初期化
for i in range(trCount):- ・trCount分Forループ
_,_,name,_ = AZ_GetTrackIdName(0,i,"",1024)- ・各トラックの名前を取得してnameに代入
for e, value in enumerate(trackNameList, 0):- ・trackNameList分Forループ
if name == value:- ・nameにtrackNameListを確認して一致すれば以下を実行
idCount = idCount + 1- ・一致したらidCountを+1
deletIDList.append(e)- ・deletIDListにindexを追加
deletIDList = sorted(deletIDList,reverse = True)- ・deletIDListを降順に設定
for i in range(idCount):- ・idCount分Forループ
trackNameList.pop(deletIDList[i]) trackColorList.pop(deletIDList[i])- ・deletIDListのindexに沿って後ろから削除
for i, value in enumerate(trackNameList, 0):- ・trackNameList分Forループ
count = AZ_GetTrackCountSelect(0,0)- ・トラックの数を取得してcountに代入
track = AZ_InsertTrackId(0,count)- ・トラックの数にすることでトラックの最後にトラックをインサートする
AZ_SetTrackItemName(track,value)- ・トラックに名前を設定
AZ_SetTrackItemDepth(track,masterDepth)- ・トラックの階層を設定
AZ_SetTrackItemColor(track,trackColorList[i])- ・トラックに色を設定
for e in range(masterChildCount):- ・子トラックの数分Forループ
childTrack,_ _ = AZ_InsertChildTrack(track,0)- ・子トラックを追加
AZ_SetTrackItemName(childTrack,childInfoList[e]["TrackName"])- ・子トラックに名前を設定
AZ_SetTrackItemColor(childTrack,trackColorList[i])- ・子トラックに色を設定
Screens
AZSTOKE_AllTrackMediaSetSameAutoSetterTrack/media detection and auto-duplicate same setBefore you run it
ベースのトラック/子トラックを作成しておく 使用しているベースのpl0000のメディアとベース名以外を一致した状態ですべて用意しておく
Script
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 endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER")- ・SilverAPIを利用可能にする
trackNameList = {"pl0000","pl1000","pl2000","pl3000","pl4000"} trackColorList = {33554304,33521664,25165824,16777471,21004543}- ・ベース名と色を配列に設定
retval,inputList = reaper.AZ_GetUserInputList("SourceImportPath",1,"Path :","D:/")- ・テキスト入力を設定(フォルダ階層をユーザーに指定させる)
if retval then- ・テキスト入力が有効の場合以下を実行
--Get Master Select Track masterTrack = reaper.AZ_GetTrackItemSelect(0,0,1) masterName = reaper.AZ_GetTrackItemName(masterTrack) masterDepth = reaper.AZ_GetTrackItemDepth(masterTrack)- ・選択しているマスタートラック/名前/階層を取得して各変数に代入
for i, value in pairs(trackNameList) do if masterName == trackNameList[i] then reaper.AZ_SetTrackItemColor(masterTrack,trackColorList[i]) masterColor = trackColorList[i] end end- ・マスタートラックの一致する配列の中身を確認して色を探して変数に代入
--Get FileList fileAllList = {} fileList = reaper.AZ_GetFilePathList(inputList[1],"Wav")- ・指定されたフォルダパスに含まれているwavを配列出力してfileListに代入
for i, value in pairs(fileList) do splitList = reaper.AZ_GetStringSplitList(value,"\\") splitCount = 0 for e, sp in pairs(splitList) do splitCount = splitCount + 1 end fileAllList[i] = {} fileAllList[i]["Path"] = value fileAllList[i]["SourceName"] = reaper.AZ_ReplaceSearchString(splitList[splitCount],".wav","") end- ・filePathからsource名を出力してfillAllList配列に代入
--Get Master Track Children childList,masterChildCount = reaper.AZ_GetTrackItemChildList(masterTrack)- ・マスタートラックの子トラックを出力してchildListに代入と子トラックの数をmasterChildCountに代入
childInfoList = {} for i, value in pairs(childList) do childInfoList[i] = {} childInfoList[i]["TrackName"]= reaper.AZ_GetTrackItemName(value)- ・各子トラックの名前をchildInfoListに代入
reaper.AZ_SetTrackItemColor(value,masterColor)- ・マスターの子トラックにはマスターと同じ色を設定
childInfoList[i]["TrackMediaCount"] = reaper.AZ_GetTrackItemMediaTypeCount(value,"")- ・各子トラックに入っているメディア数を取得
childId = reaper.AZ_GetTrackItemIndex(value)- ・各子トラックアイテムからidを取得してchildIdに代入
for e = 1,childInfoList[i].TrackMediaCount do- ・各子トラックのメディア数でループ再生
childInfoList[i][e] = {} childInfoList[i][e]["MediaName"] = reaper.AZ_GetTrackMediaName(0,childId,e-1) childInfoList[i][e]["MediaPos"]= reaper.AZ_GetTrackMediaStartTimeSeconds(0,childId,e-1)- ・メディアの名前と位置を取得して各変数に代入
end end--delet trackNameList & trackBaseList create trCount = reaper.AZ_GetTrackCountSelect(0,0) deletIDList = {} idCount = 0for i = 0,trCount-1 do name = reaper.AZ_GetTrackIdName(0,i)- ・全トラックの名前を取得してnameに代入
for i, value in pairs(trackNameList) do- ・ベース名の配列分ループ再生
if name == value then- ・全トラック名とベース名が一致した場合以下を実行
idCount = idCount + 1 deletIDList[idCount] = i- ・ベース名と一致したのであればベースから削除対象 ※すでに作られたものと認識する
end end endtable.sort(deletIDList,function(a,b) return (a>b)end)- ・deletIDListを降順に並び替える
for i = 1,idCount do table.remove(trackNameList,deletIDList[i]) table.remove(trackColorList,deletIDList[i])- ・ベース配列から削除を行う
end--InsertTrack for i, value in pairs(trackNameList) do- ・ベース名分ループ再生
count = reaper.AZ_GetTrackCountSelect(0,0)- ・全トラックの数を取得してcountに代入
track = reaper.AZ_InsertTrackId(0,count)- ・トラックの最後にトラックをインサート
reaper.AZ_SetTrackItemName(track,value) reaper.AZ_SetTrackItemDepth(track,masterDepth) reaper.AZ_SetTrackItemColor(track,trackColorList[i])- ・インサートトラックに名前、階層、色を設定
for e = 1,masterChildCount do- ・子トラックの数分forループ対応
childTrack = reaper.AZ_InsertChildTrack(track)- ・各追加したベーストラックに子トラックをインサート
reaper.AZ_SetTrackItemName(childTrack,childInfoList[e].TrackName) reaper.AZ_SetTrackItemColor(childTrack,trackColorList[i])- ・子トラックに名前と色を設定
for x = 1,childInfoList[e].TrackMediaCount do- ・子トラックにメディアの数分forループ
newMediaName = reaper.AZ_ReplaceSearchString(childInfoList[e][x].MediaName,string.lower(masterName),string.lower(value))- ・メディア名に対してベース名を入れ替えてnewMediaNameに代入
- for z, value in pairs(fileAllList) do ・全ファイル分ループ再生
if newMediaName == fileAllList[z].SourceName then- ・sourceNameにnewMediaNameが一致したら以下を実行
reaper.AZ_InsertMediaTrackItemSecond(childTrack,fileAllList[z].Path,0,childInfoList[e][x].MediaPos)- ・一致したメディアを指定トラックと指定秒数に並べる
end endend end end end
Screens
APIs used
- AZ_GetUserInputList
- AZ_GetTrackItemSelect
- AZ_GetTrackItemName
- AZ_GetTrackItemDepth
- AZ_SetTrackItemColor
- AZ_GetFilePathList
- AZ_GetStringSplitList
- AZ_ReplaceSearchString
- AZ_GetTrackItemChildList
- AZ_GetTrackItemMediaTypeCount
- AZ_GetTrackItemIndex
- AZ_GetTrackMediaName
- AZ_GetTrackMediaStartTimeSeconds
- AZ_GetTrackCountSelect
- AZ_GetTrackIdName
- AZ_InsertTrackId
- AZ_SetTrackItemName
- AZ_SetTrackItemDepth
- AZ_InsertChildTrack
- AZ_InsertMediaTrackItemSecond
Before you run it
ベースのトラック/子トラックを作成しておく 使用しているベースのpl0000のメディアとベース名以外を一致した状態ですべて用意しておく
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * trackNameList = ["pl0000", "pl1000", "pl2000", "pl3000", "pl4000"] trackColorList = [33554304, 33521664, 25165824, 16777471, 21004543] retval,inputList = AZ_GetUserInputList("SourceImportPath", 1, "Path :", "D:/") if retval: #Get Master Select Track masterColor = 0 masterTrack = AZ_GetTrackItemSelect(0,0,1) _, masterName, _ = AZ_GetTrackItemName(masterTrack, "", 1024) masterDepth = AZ_GetTrackItemDepth(masterTrack) for i, trackName in enumerate(trackNameList): if masterName == trackName: AZ_SetTrackItemColor(masterTrack, trackColorList[i]) masterColor = trackColorList[i] #Get FileList fileAllList = [] fileList = AZ_GetFilePathList(inputList[0], "Wav") for filePth in fileList: splitList = AZ_GetStringSplitList(filePth,"\\") fileInfo = {} fileInfo["Path"] = filePth _, _, _, fileInfo["SourceName"], _ = AZ_ReplaceSearchString(splitList[-1], ".wav", "", "", 1024) fileAllList.append(fileInfo) #Get Master Track Children _, childList, masterChildCount = AZ_GetTrackItemChildList(masterTrack) childInfoList = [] for child in childList: childInfo = {} _, childInfo["TrackName"], _ = AZ_GetTrackItemName(child, "", 1024) AZ_SetTrackItemColor(child, masterColor) _, _, childInfo["TrackMediaCount"], _ = AZ_GetTrackItemMediaTypeCount(child, "", 0, 0) childTrack = AZ_GetTrackItemIndex(child) for i in range(childInfo["TrackMediaCount"]): childInfo[i] = {} _, _, _, childInfo[i]["MediaName"], _ = AZ_GetTrackMediaName(0, childTrack, i, "", 1024) _, _, _, childInfo[i]["MediaPos"] = AZ_GetTrackMediaStartTimeSeconds(0, childTrack, i, 0) childInfoList.append(childInfo) #delet trackNameList & trackBaseList create trCount = AZ_GetTrackCountSelect(0, 0) deletIDList = [] for i in range(trCount): _, _, name, _ = AZ_GetTrackIdName(0, i, "", 1024) for j, trackName in enumerate(trackNameList): if name == trackName: deletIDList.append(j) for id in reversed(deletIDList): del trackNameList[id] del trackColorList[id] #InsertTrack for i, trackName in enumerate(trackNameList): count = AZ_GetTrackCountSelect(0, 0) track = AZ_InsertTrackId(0, count) AZ_SetTrackItemName(track, trackName) AZ_SetTrackItemDepth(track, masterDepth) AZ_SetTrackItemColor(track, trackColorList[i]) for e in range(masterChildCount): childTrack,_, _ = AZ_InsertChildTrack(track, 0) AZ_SetTrackItemName(childTrack, childInfoList[e]["TrackName"]) AZ_SetTrackItemColor(childTrack, trackColorList[i]) for x in range(childInfoList[e]["TrackMediaCount"]): _, _, _, newMediaName, _ = AZ_ReplaceSearchString(childInfoList[e][x]["MediaName"], masterName.lower(), trackName.lower(), "", 1024) for z in range(len(fileAllList)): if newMediaName == fileAllList[z]["SourceName"]: AZ_InsertMediaTrackItemSecond(childTrack, fileAllList[z]["Path"], 0, childInfoList[e][x]["MediaPos"])Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import *- ・SilverAPIを利用可能にする
trackNameList = ["pl0000", "pl1000", "pl2000", "pl3000", "pl4000"] trackColorList = [33554304, 33521664, 25165824, 16777471, 21004543]- ・ベース名と色を配列に設定
retval,inputList = AZ_GetUserInputList("SourceImportPath", 1, "Path :", "D:/")- ・テキスト入力を設定(フォルダ階層をユーザーに指定させる)
if retval:- ・テキスト入力が有効の場合以下を実行
#Get Master Select Track masterColor = 0masterTrack = AZ_GetTrackItemSelect(0,0,1) _, masterName, _ = AZ_GetTrackItemName(masterTrack, "", 1024) masterDepth = AZ_GetTrackItemDepth(masterTrack)- ・選択しているマスタートラック/名前/階層を取得して各変数に代入
for i, trackName in enumerate(trackNameList): if masterName == trackName: AZ_SetTrackItemColor(masterTrack, trackColorList[i]) masterColor = trackColorList[i]- ・マスタートラックの一致する配列の中身を確認して色を探して変数に代入
#Get FileList fileAllList = [] fileList = AZ_GetFilePathList(inputList[0], "Wav")- ・指定されたフォルダパスに含まれているwavを配列出力してfileListに代入
for filePth in fileList: splitList = AZ_GetStringSplitList(filePth,"\\")fileInfo = {} fileInfo["Path"] = filePth _, _, _, fileInfo["SourceName"], _ = AZ_ReplaceSearchString(splitList[-1], ".wav", "", "", 1024) fileAllList.append(fileInfo)- ・filePathからsource名を出力してfillAllList配列に代入
#Get Master Track Children _, childList, masterChildCount = AZ_GetTrackItemChildList(masterTrack)- ・マスタートラックの子トラックを出力してchildListに代入と子トラックの数をmasterChildCountに代入
for child in childList: childInfo = {} _, childInfo["TrackName"], _ = AZ_GetTrackItemName(child, "", 1024)- ・各子トラックの名前をchildInfoListに代入
AZ_SetTrackItemColor(child, masterColor)- ・マスターの子トラックにはマスターと同じ色を設定
_, _, childInfo["TrackMediaCount"], _ = AZ_GetTrackItemMediaTypeCount(child, "", 0, 0)- ・各子トラックに入っているメディア数を取得
childTrack = AZ_GetTrackItemIndex(child)- ・各子トラックアイテムからidを取得してchildIdに代入
for i in range(childInfo["TrackMediaCount"]):- ・各子トラックのメディア数でループ再生
childInfo[i] = {} _, _, _, childInfo[i]["MediaName"], _ = AZ_GetTrackMediaName(0, childTrack, i, "", 1024) _, _, _, childInfo[i]["MediaPos"] = AZ_GetTrackMediaStartTimeSeconds(0, childTrack, i, 0) childInfoList.append(childInfo)- ・メディアの名前と位置を取得して各変数に代入
end end#delet trackNameList & trackBaseList create trCount = AZ_GetTrackCountSelect(0, 0) deletIDList = []for i in range(trCount): _, _, name, _ = AZ_GetTrackIdName(0, i, "", 1024)- ・全トラックの名前を取得してnameに代入
for j, trackName in enumerate(trackNameList):- ・ベース名の配列分ループ再生
if name == trackName:- ・全トラック名とベース名が一致した場合以下を実行
deletIDList.append(j)- ・ベース名と一致したのであればベースから削除対象 ※すでに作られたものと認識する
- for id in reversed(deletIDList): del trackNameList[id] del trackColorList[id] ・ベース配列から削除を行う
#InsertTrack for i, trackName in enumerate(trackNameList):- ・ベース名分ループ再生
count = AZ_GetTrackCountSelect(0, 0)- ・全トラックの数を取得してcountに代入
track = AZ_InsertTrackId(0, count)- ・トラックの最後にトラックをインサート
AZ_SetTrackItemName(track, trackName) AZ_SetTrackItemDepth(track, masterDepth) AZ_SetTrackItemColor(track, trackColorList[i])- ・インサートトラックに名前、階層、色を設定
for e in range(masterChildCount):- ・子トラックの数分forループ対応
childTrack,_, _ = AZ_InsertChildTrack(track, 0)- ・各追加したベーストラックに子トラックをインサート
AZ_SetTrackItemName(childTrack, childInfoList[e]["TrackName"]) AZ_SetTrackItemColor(childTrack, trackColorList[i])- ・子トラックに名前と色を設定
for x in range(childInfoList[e]["TrackMediaCount"]):- ・子トラックにメディアの数分forループ
_, _, _, newMediaName, _ = AZ_ReplaceSearchString(childInfoList[e][x]["MediaName"], masterName.lower(), trackName.lower(), "", 1024)- ・メディア名に対してベース名を入れ替えてnewMediaNameに代入
- for z in range(len(fileAllList)): ・全ファイル分ループ再生
if newMediaName == fileAllList[z]["SourceName"]:- ・sourceNameにnewMediaNameが一致したら以下を実行
AZ_InsertMediaTrackItemSecond(childTrack, fileAllList[z]["Path"], 0, childInfoList[e][x]["MediaPos"])- ・一致したメディアを指定トラックと指定秒数に並べる
Screens
APIs used
- AZ_GetUserInputList
- AZ_GetTrackItemSelect
- AZ_GetTrackItemName
- AZ_GetTrackItemDepth
- AZ_SetTrackItemColor
- AZ_GetFilePathList
- AZ_GetStringSplitList
- AZ_ReplaceSearchString
- AZ_GetTrackItemChildList
- AZ_GetTrackItemMediaTypeCount
- AZ_GetTrackItemIndex
- AZ_GetTrackMediaName
- AZ_GetTrackMediaStartTimeSeconds
- AZ_GetTrackCountSelect
- AZ_GetTrackIdName
- AZ_InsertTrackId
- AZ_SetTrackItemName
- AZ_SetTrackItemDepth
- AZ_InsertChildTrack
- AZ_InsertMediaTrackItemSecond
AZSTOKE_CEDEC2024_FOOTREPLACECEDEC2024 - Demonstration - Replacing materials in cut scenesBefore you run it
ベースの足音を並べておく 命名規則に従って別種類の足音を制作しておく
Script
comming soonLine by line日本語
Add paragraph text. Click “Edit Text” to update the font, size and more. To change and reuse text themes, go to Site Styles.
Before you run it
ベースの足音を並べておく 命名規則に従って別種類の足音を制作しておく
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * def replaceFoot(originTrackID, sourceFolderPath): # 1 GetOriginMediaPos count = AZ_GetTrackMediaTypeCount(0, originTrackID, 'wav', 0, 0)[3] mediaList = [] for i in range(count): mediaList.append( { 'Name' : AZ_GetTrackMediaName(0, originTrackID, i, "", 1024)[3], 'StartPos' : AZ_GetTrackMediaStartTimeSeconds(0, originTrackID, i, 0)[3] } ) # 2 CreateTrack parentTrack = RPR_GetParentTrack(AZ_GetTrackItemSelect(0, originTrackID,0)) replaceTrack = AZ_InsertChildTrack(parentTrack, 0)[0] replaceTrackName = AZ_GetPathInfo(sourceFolderPath)['FileName'] AZ_SetTrackItemName(replaceTrack, replaceTrackName) # 3 InsertReplaceAudio originTrackName = AZ_GetTrackIdName(0, originTrackID, "", 1024)[2] for media in mediaList: sourceName = AZ_ReplaceSearchString(media['Name'], originTrackName, replaceTrackName, "", 1024)[3] path = sourceFolderPath + '\\' + sourceName + ".wav" AZ_InsertMediaTrackItemSecond(replaceTrack, path, 0, media['StartPos']) def main(): originTrack = AZ_GetTrackItemSelect(0,0,1) originTrackName = AZ_GetTrackItemName(originTrack, "", 1024)[1] originTrackId = AZ_GetTrackItemIndex(originTrack) rootPath = "" retval,inputList = AZ_GetUserInputList("SourceImportPath",1,"rootPath :",rootPath) if not retval: return rootPath = inputList[0] footList = ["armor", "barefoot", "boot", "boot_snow", "boot_water", "heel", "sneaker"] for foot in footList: if foot != originTrackName: replaceFoot(originTrackId, rootPath + "\\" + foot) main()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import *- ・BRONZE/SILVERのAPI利用可能にする
def replaceFoot(originTrackID, sourceFolderPath):- ・replaceFoot関数の枠を用意
# 1 GetOriginMediaPos count = AZ_GetTrackMediaTypeCount(0, originTrackID, 'wav', 0, 0)[3]- ・指定トラックIDのWavの数を出力してcountに代入
mediaList = []- ・配列を用意
for i in range(count):- ・countの数分 Forで繰り返し処理を実行
mediaList.append( { 'Name' : AZ_GetTrackMediaName(0, originTrackID, i, "", 1024)[3], 'StartPos' : AZ_GetTrackMediaStartTimeSeconds(0, originTrackID, i, 0)[3] }- ・配列に追加していくNameとStartPos
)# 2 CreateTrack parentTrack = RPR_GetParentTrack(AZ_GetTrackItemSelect(0, originTrackID,0))- ・指定IDトラックの親トラックを取得
replaceTrack = AZ_InsertChildTrack(parentTrack, 0)[0]- ・親トラックに子トラックを追加
replaceTrackName = AZ_GetPathInfo(sourceFolderPath)['FileName']- ・Pathのファイル名を取得してreplaceTrackNameに代入する
AZ_SetTrackItemName(replaceTrack, replaceTrackName)- ・子トラックに名前を設定する
# 3 InsertReplaceAudio originTrackName = AZ_GetTrackIdName(0, originTrackID, "", 1024)[2]- ・指定トラックIDの名前を取得
for media in mediaList:- ・mediaListの配列数分forを繰り返し処理
sourceName = AZ_ReplaceSearchString(media['Name'], originTrackName, replaceTrackName, "", 1024)[3]- ・メディア名にトラック名の部分一致させてリネームしたものをsourceNameに代入
path = sourceFolderPath + '\\' + sourceName + ".wav"- ・パス情報を作成
AZ_InsertMediaTrackItemSecond(replaceTrack, path, 0, media['StartPos'])- ・パス情報に沿って波形データをインサート
def main():- ・メイン関数を設定
originTrack = AZ_GetTrackItemSelect(0,0,1)- ・選択しているトラックを取得してoriginTrackに代入
originTrackName = AZ_GetTrackItemName(originTrack, "", 1024)[1]- ・トラックの名前を取得してoriginTrackNameに代入
originTrackId = AZ_GetTrackItemIndex(originTrack, 0)[2]- ・トラックアイテムからIDを取得してoriginTrackIdに代入
rootPath = "" retval,inputList = AZ_GetUserInputList("SourceImportPath",1,"rootPath :",rootPath)- ・入力用テキストボックスを生成 パス情報をいれられるようにする
if not retval: return- ・もしキャンセルした場合は関数を途中終了させる。
rootPath = inputList[0]- ・インプットした情報をrootPathに代入
footList = ["armor", "barefoot", "boot", "boot_snow", "boot_water", "heel", "sneaker"]- ・Foot配列を用意
- for foot in footList: if foot != originTrackName: replaceFoot(originTrackId, rootPath + "\\" + foot) ・オリジナルトラック名ではない場合、replaceFoot関数を実行
main()- ・main関数を実行
Screens
AZSTOKE_InsertTrackMediasFromFileNameInsert tracks taking file names into accountScript
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()Line by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER")- ・RIGDOCKSをインポート
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")- ・指定したフォルダ内のwavファイルのパスを取得
table.sort(filePathList)- ・ファイルパスのリストをソート
insertPos = 0 preCharID = ""- ・アイテムの挿入位置と前回のキャラクターIDを初期化
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]- ・ファイル名からキャラクターIDとボイスの種類を取得
charTrack = reaper.AZ_InsertTrackSearchUniqueOnly(0, charID)- ・キャラクターIDの名前のトラックを作成(既に存在する場合は取得のみ)
reaper.AZ_SetTrackItemDepth(charTrack, 0)- ・キャラクタートラックの深さを0に設定(最上位にする)
typeTrack = reaper.AZ_InsertUniqueChildTrack(charTrack, splitList[2])- ・ボイスの種類の名前の子トラックを作成(既に存在する場合は取得のみ)
if preCharID ~= "" and preCharID ~= charID then insertPos = insertPos + 2 color, _, _, _ = reaper.AZ_GetRandomColor() end- ・キャラクターIDが前回と異なる場合、挿入位置を2秒進めて色を変更
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- ・次のアイテムの挿入位置を1秒進める
preCharID = charID- ・前回のキャラクターIDを更新
endendmain()- ・メイン処理を実行
Screens
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * def main(): retval, inputList = AZ_GetUserInputList("", 1, "import path", "") if not retval: return importPath = inputList[0] filePathList = AZ_GetFilePathList(importPath, "wav") filePathList.sort() insertPos = 0 preCharID = "" color, _, _, _ = AZ_GetRandomColor() AZ_DeleteAllRegion(0) for filePath in filePathList: fileName = AZ_GetPathInfo(filePath)["FileNameWithoutExtension"] splitList = AZ_GetStringSplitList(fileName, "_") charID = splitList[0] voiceType = splitList[1] charTrack = AZ_InsertTrackSearchUniqueOnly(0, charID)[0] AZ_SetTrackItemDepth(charTrack, 0) typeTrack = AZ_InsertUniqueChildTrack(charTrack, splitList[1])[0] if preCharID != "" and preCharID != charID: insertPos += 2 color, _, _, _ = AZ_GetRandomColor() item = AZ_InsertMediaTrackItemSecond(typeTrack, filePath, 0, insertPos) itemStartPos = AZ_GetMediaItemStartTimeSeconds(item)[1] itemEndPos = AZ_GetMediaItemEndTime(item)[1] AZ_AddRegionMarker(0, itemStartPos, itemEndPos, fileName, -1, color) insertPos = itemEndPos + 1 preCharID = charID main()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import *- ・RIGDOCKSをインポート
def main():- ・メインの処理を記載する関数を定義
retval, inputList = AZ_GetUserInputList("", 1, "import path", "")- ・ユーザー空の入力ダイアログを表示して、インポートするフォルダのパスを取得
if not retval: return- ・ダイアログがキャンセルされた場合は処理を終了する
importPath = inputList[0]- ・インポートするフォルダのパスを変数に格納
filePathList = AZ_GetFilePathList(importPath, "wav")- ・指定したフォルダ内のwavファイルのパスを取得
filePathList.sort()- ・ファイルパスのリストをソート
insertPos = 0 preCharID = ""- ・アイテムの挿入位置と前回のキャラクターIDを初期化
color, _, _, _ = AZ_GetRandomColor()- ・ランダムな色を取得
AZ_DeleteAllRegion(0)- ・プロジェクト内のリージョンを全て削除
for filePath in filePathList:- ・取得したファイルパスごとに実行
fileName = AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]- ・ファイル名を取得
splitList = AZ_GetStringSplitList(fileName, "_")- ・ファイル名を"_"で分割してリスト化
charID = splitList[0] voiceType = splitList[1]- ・ファイル名からキャラクターIDとボイスの種類を取得
charTrack = AZ_InsertTrackSearchUniqueOnly(0, charID)[0]- ・キャラクターIDの名前のトラックを作成(既に存在する場合は取得のみ)
AZ_SetTrackItemDepth(charTrack, 0)- ・キャラクタートラックの深さを0に設定(最上位にする)
typeTrack = AZ_InsertUniqueChildTrack(charTrack, splitList[1])[0]- ・ボイスの種類の名前の子トラックを作成(既に存在する場合は取得のみ)
if preCharID != "" and preCharID != charID: insertPos += 2 color, _, _, _ = AZ_GetRandomColor()- ・キャラクターIDが前回と異なる場合、挿入位置を2秒進めて色を変更
item = AZ_InsertMediaTrackItemSecond(typeTrack, filePath, 0, insertPos)- ・指定したトラックにアイテムを挿入
itemStartPos = AZ_GetMediaItemStartTimeSeconds(item)[1] itemEndPos = AZ_GetMediaItemEndTime(item)[1]- ・挿入したアイテムの開始位置と終了位置を取得
AZ_AddRegionMarker(0, itemStartPos, itemEndPos, fileName, -1, color)- ・アイテムの位置にリージョンを追加
insertPos = itemEndPos + 1- ・次のアイテムの挿入位置を1秒進める
preCharID = charID- ・前回のキャラクターIDを更新
main()- ・メイン処理を実行
Screens
AZSTOKE_Recording_CreateTracksPrepare recording tracks per microphoneBefore you run it
使用するマイクをMikeList.txtファイルに記載しておく
Script
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()Line by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER")- ・RIGDOCKSをインポート
workPath = "D:\\reapdock\\Recording"- ・作業フォルダを指定
function CreateTracks()retval, inputList = reaper.AZ_GetUserInputList("", 1, "soound name", "")if retval == false then return endsoundName = 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) dodefaultList = defaultList .. "1," end- ・デフォルト値リストを作成(全て使用する設定)マイクを使用する場合は1
retval, inputList = reaper.AZ_GetUserInputList("Using mike(using: 1)", #mikeList, mikeListCSV, defaultList)if retval == false then return endmikeUseList = inputList- ・使用するマイクの選択をユーザー入力から取得
trackPos = reaper.CountTracks()- ・トラック数を取得して最後に追加する位置を決定
soundTrack = reaper.AZ_InsertTrackSearchUniqueOnly(0, soundName)- ・サウンド名のトラックを作成(既存の場合は検索して取得)
color = reaper.AZ_GetRandomColor()reaper.AZ_SetTrackItemColor(soundTrack, color)- ・トラックアイテムの色をランダムに設定
reaper.AZ_SetTrackItemDepth(soundTrack, 0)- ・トラックアイテムの深さを0に設定(最前面)
for i = 1, #mikeList do- ・マイクリストをループ
if mikeUseList[i] == "1" then reaper.AZ_InsertUniqueChildTrack(soundTrack, mikeList[i]) end- ・使用するマイクの場合(1の場合)、子トラックを作成
endendCreateTracks()- ・関数を実行
Screens
Before you run it
使用するマイクをMikeList.txtファイルに記載しておく
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import* from AZSTOKE_BRONZE_python import* from AZSTOKE_SILVER_python import* workPath = "D:\\reapdock\\Recording" def CreateTracks(): retval, inputList = AZ_GetUserInputList("", 1, "sound name", "") if not retval: return soundName = inputList[0] if soundName == "": AZ_ShowMessageBox_Error("Enter sound name", "Error", AZ_WindowType_OK()) return text = AZ_ReadFile(workPath, "MikeList.txt")[2] mikeList = AZ_GetStringSplitList(text, "\n") if len(mikeList) > 0 and mikeList[-1] == "": mikeList.pop() mikeListCSV = AZ_ReplaceSearchString(text, "\n", ",")[3] defaultList = "" for mike in mikeList: defaultList += "1," retval, inputList = AZ_GetUserInputList("Using mike(using: 1)", len(mikeList), mikeListCSV, defaultList) if not retval: return mikeUseList = inputList trackPos = RPR_CountTracks(0) soundTrack = AZ_InsertTrackSearchUniqueOnly(0, soundName)[0] color,_,_,_ = AZ_GetRandomColor() AZ_SetTrackItemColor(soundTrack, color) AZ_SetTrackItemDepth(soundTrack, 0) for i in range(len(mikeList)): if mikeUseList[i] == "1": AZ_InsertUniqueChildTrack(soundTrack, mikeList[i]) CreateTracks()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import* from AZSTOKE_BRONZE_python import* from AZSTOKE_SILVER_python import*- ・RIGDOCKSをインポート
workPath = "D:\\reapdock\\Recording"- ・作業フォルダを指定
def CreateTracks():retval, inputList = AZ_GetUserInputList("", 1, "sound name", "")if not retval: returnsoundName = inputList[0]- ・サウンド名をユーザー入力から取得
if soundName == "": AZ_ShowMessageBox_Error("Enter sound name", "Error", AZ_WindowType_OK()) return- ・サウンド名が未入力の場合、エラーメッセージを表示して終了
text = AZ_ReadFile(workPath, "MikeList.txt")[2]- ・マイクリストファイルを読み込み
mikeList = AZ_GetStringSplitList(text, "\n")if len(mikeList) > 0 and mikeList[-1] == "": mikeList.pop()- ・改行で分割してマイクリストを作成。 最後の要素が空文字の場合は削除
mikeListCSV = AZ_ReplaceSearchString(text, "\n", ",")[3]- ・カンマ区切りのマイクリストを作成
defaultList = "" for mike in mikeList: defaultList += "1,"- ・デフォルト値リストを作成(全て使用する設定)マイクを使用する場合は1
retval, inputList = AZ_GetUserInputList("Using mike(using: 1)", len(mikeList), mikeListCSV, defaultList)if not retval: returnmikeUseList = inputList- ・使用するマイクの選択をユーザー入力から取得
trackPos = RPR_CountTracks(0)- ・トラック数を取得して最後に追加する位置を決定
soundTrack = AZ_InsertTrackSearchUniqueOnly(0, soundName)[0]- ・サウンド名のトラックを作成(既存の場合は検索して取得)
color,_,_,_ = AZ_GetRandomColor()AZ_SetTrackItemColor(soundTrack, color)- ・トラックアイテムの色をランダムに設定
AZ_SetTrackItemDepth(soundTrack, 0)- ・トラックアイテムの深さを0に設定(最前面)
for i in range(len(mikeList)):- ・マイクリストをループ
if mikeUseList[i] == "1": AZ_InsertUniqueChildTrack(soundTrack, mikeList[i])- ・使用するマイクの場合(1の場合)、子トラックを作成
CreateTracks()- ・関数を実行
Screens
FILE/FOLDER3
AZSTOKE_TextFileWirteReadSave data construction Part 1 - Exporting and importing text files -Script
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 endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER")- ・SilverAPIを利用可能にする
fileName = "saveDate.txt"- ・ファイル名を拡張子を入れて文字列「saveDate.txt」をfileNameに代入
folderPath,addPath = reaper.AZ_SetResoucePathFolder("AZSTOKE",0)- ・リソースフォルダに"AZSTOKE"というフォルダを作成
retval,inputList = reaper.AZ_GetUserInputList("Info",3,"Path:,Wav:,Count:","D:/,test,5")- ・UserInputで3つのインプット情報を設定、実行後に入力したものをinputListに代入
if retval then- ・GetUserInputListをキャンセルしていない場合
saveText = ""- ・空のsaveTextを用意
for i, value in pairs(inputList) do- ・inputList分ループ再生
if i == 1 then saveText = value- ・最初はsaveTextにそのままvalueを代入
else saveText = saveText..","..value- ・2回目以降はsaveTextに区切りの","を入れてからvalueを語尾に追記して代入
end end reaper.AZ_WriteFile(folderPath,fileName,saveText,0)- ・指定フォルダパスにsaveTextを記載したファイルを生成
saveText = reaper.AZ_ReadFile(folderPath,fileName)- ・さきほど生成したファイルを読み込みsaveTextに出力
splitList = reaper.AZ_GetStringSplitList(saveText,",")- ・saveTextの区切りをもとに配列に変更
for i, value in pairs(splitList) do- ・splitListごとにループ再生
Msg(splitList[i])- ・splitListごとにコンソール出力、出力されているか確認
end end
Screens
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import * fileName = "saveDate.txt" _,_,folderPath,_,addPath,_ = AZ_SetResoucePathFolder("AZSTOKE",0,"",1024,"",1024) retval,inputList = AZ_GetUserInputList("Info",3,"Path:,Wav:,Count:","D:/,test,5") if retval : saveText = "" for i, value in enumerate(inputList, 1): if i == 1: saveText = value else: saveText = saveText + "," + value AZ_WriteFile(folderPath,fileName,saveText,0) _,_,saveText,_ = AZ_ReadFile(folderPath,fileName,"",1024) splitList = AZ_GetStringSplitList(saveText,",") for i, value in enumerate(splitList, 0): Msg(splitList[i])Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import *- ・SilverAPIの読み込み
fileName = "saveDate.txt"- ・ファイル名を拡張子をいれてfileNameに代入
_,_,folderPath,_,addPath,_ = AZ_SetResoucePathFolder("AZSTOKE",0,"",1024,"",1024)- ・リソースフォルダ内に"AZSTOKE"というフォルダを生成
retval,inputList = AZ_GetUserInputList("Info",3,"Path:,Wav:,Count:","D:/,test,5")- ・インプット用テキストボックスを用意してセーブデータ内の情報を入力してinputListに代入
if retval :- ・UserInputでOkを押した場合を検知して以下を実行
saveText = ""- ・テキストファイルにまとめる文字列変数を用意
for i, value in enumerate(inputList, 1):- ・inputListごとにループ
if i == 1: saveText = value- ・最初のみそのままsaveTextにvalueを代入
else: saveText = saveText + "," + value- ・2回目以降は区切り文字","を入れてvalueを追記していく
AZ_WriteFile(folderPath,fileName,saveText,0)- ・リソースフォルダにfileName(saveDate.txt)を生成してsaveTextの文字列を入れる
_,_,saveText,_ = AZ_ReadFile(folderPath,fileName,"",1024)- ・生成したファイルのsaveDate.txtを読み込んでsaveTextに代入
splitList = AZ_GetStringSplitList(saveText,",")- ・saveTextに区切り文字","を元に配列にしてsplitListに代入
for i, value in enumerate(splitList, 0):- ・splitListごとにForループ
Msg(splitList[i])- ・splitListの中身をコンソール出力
Screens
AZSTOKE_InsertMediaOrinalFolderCreateFolder Creation Part 1 - Creating a dedicated folder for media insertsBefore you run it
インサートする用のメディアを用意しておく
Script
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) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER")- ・SilverAPIを利用可能にする
retval,inputList = reaper.AZ_GetUserInputList("insertMedia",1,"path:","D:/")- ・UserInputでテキスト入力画面をinputListに入力
if retval then- ・テキストボックスでOKを押したら以下を実行
filePathList = reaper.AZ_GetFilePathList(inputList[1],"wav")- ・テキスト入力したパス情報に入っているファイルを出力
reaper.AZ_SetProjectPathFolder("AZSTOKE",3)- ・プロジェクトの録音フォルダに専用フォルダを作成、現在時刻をフォルダ名に追記して生成
beforePath,afterPath = reaper.AZ_SetProjectInfoRecAddPath(0,addPath)- ・プロジェクトの録音フォルダに作成したフォルダを設定
startPos = 0- ・開始位置を0に設定
for i, value in pairs(filePathList) do- ・ファイルパス分ループ再生
item = reaper.AZ_InsertMediaTrackIdSecond(0,1,filePathList[i],0,startPos)- ・指定トラックIDと指定秒数にメディアをインサートする
endTime = reaper.AZ_GetMediaItemEndTime(item)- ・インサートしたメディアの終了時間を出力してendTimeに保存
startPos = endTime + 1- ・終了時間から1秒追加してStartPosに設定 end
reaper.AZ_SetProjectInfoRecPath(0,beforePath)- ・プロジェクト設定の録音フォルダを前に戻す対応 end
Screens
Before you run it
インサートする用のメディアを用意しておく
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * retval,inputList = AZ_GetUserInputList("insertMedia",1,"path:","D:/") if retval: filePathList = AZ_GetFilePathList(inputList[1],"wav") _,_,_,_,addPath,_ = AZ_SetProjectPathFolder("AZSTOKE",3,"",1024,"",1024) _,_,beforePath,_,afterPath,_ = AZ_SetProjectInfoRecAddPath(0,addPath,"",1024,"",1024) startPos = 0 for i, value in enumerate(filePathList, 0): item = AZ_InsertMediaTrackIdSecond(0,1,filePathList[i],0,startPos) _,endTime = AZ_GetMediaItemEndTime(item,0) startPos = endTime + 1 AZ_SetProjectInfoRecPath(0,beforePath,"",1024)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import *- ・BRONZEとSILVERのAPIを利用可能にする
retval,inputList = AZ_GetUserInputList("insertMedia",1,"path:","D:/")- ・ユーザーインプットのインプットリストを生成
if retval:- ・ユーザーインプットでOKを押したら以下を実行
_,filePathList = AZ_GetFilePathList(inputList[1],"wav")- ・インプットリストのパス情報を基にWAVファイルを出力
_,_,_,_,addPath,_ = AZ_SetProjectPathFolder("AZSTOKE",3,"",1024,"",1024)- ・プロジェクトパスフォルダにフォルダを生成して名前に現在時刻を設定
_,_,beforePath,_,afterPath,_ = AZ_SetProjectInfoRecAddPath(0,addPath,"",1024,"",1024)- ・プロジェクトの録音フォルダのAddパスを設定してBeforeとAfterのパス情報を出力
startPos = 0- ・初回メディア位置を設定
for i, value in enumerate(filePathList, 0):- ・ファイル分ループ再生
item = AZ_InsertMediaTrackIdSecond(0,1,filePathList[i],0,startPos)- ・各ファイルをトラックID1の指定秒数にインポート
_,endTime = AZ_GetMediaItemEndTime(item,0)- ・設定したメディアの終了時間を取得してendTimeに代入
startPos = endTime + 1- ・endTimeの1秒後にstartPosを設定
AZ_SetProjectInfoRecPath(0,beforePath,"",1024)
Screens
AZSTOKE_TextFileWirteRead2Save data construction Part 2 - Saving and using JSON format with array structure in mind -Script
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)Line by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER")- ・SILVERのAPIを利用可能にする対応
t = { tracks = { { track = "AZ1", num = -21 }, { track = "AZ2", num = -25 }, { track = "AZ3", num = -24 } } }- ・配列を作成 ※この配列は様々な方法で作られることを想定しています。
Msg(t["tracks"][1].track) Msg(t["tracks"][1].num)- ・配列の1行目をコンソール出力して確認
jsonStr = reaper.AZ_Json_Serialize(t); Msg(jsonStr)- ・配列をテキスト保存できるように文字列に変換
reaper.AZ_WriteFile("F://script//save","savedate.txt",jsonStr,0)- ・指定のフォルダにsavedate.txtとしてjsonStrを上書き保存
tb = reaper.AZ_Json_Deserialize(jsonStr);- ・jsonStrを配列に戻します。 ※これによりそのまま以前の配列を取得できる状態になります。
Msg(tb["tracks"][2].track) Msg(tb["tracks"][2].num)- ・抜き出せているか確認
Screens
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import * t = { "tracks" : [ { "track" : "AZ1", "num" : -21 }, { "track" : "AZ2", "num" : -25 }, { "track" : "AZ3", "num" : -24 } ] } Msg(t["tracks"][1]["track"]) jsonStr = AZ_Json_Serialize(t); Msg(jsonStr) AZ_WriteFile("C:/Users/〇〇/Documents/script_test","savedate.txt",jsonStr,0) table = AZ_Json_Deserialize(jsonStr); Msg(table) Msg(table["tracks"][2]["track"]) Msg(table["tracks"][2]["num"])Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import *- ・SilverAPIの利用可能にする
t = { "tracks" : [ { "track" : "AZ1", "num" : -21 }, { "track" : "AZ2", "num" : -25 }, { "track" : "AZ3", "num" : -24 } ] }- ・tの配列を作成
Msg(t["tracks"][1]["track"])- ・tからテストで一部を抜き出してコンソール出力
jsonStr = AZ_Json_Serialize(t);- ・tを文字列に変更してjsonStrに代入
Msg(jsonStr)- ・jsonStrの内容を出力
AZ_WriteFile("C:/Users/〇〇/Documents/script_test","savedate.txt",jsonStr,0)- ・C:/Users/〇〇/Documents/script_testの保存先を指定してsavedate.txtを生成
table = AZ_Json_Deserialize(jsonStr); Msg(table)- ・jsonStrの文字列を再度 配列の型に切り替える
Msg(table["tracks"][2]["track"]) Msg(table["tracks"][2]["num"])- ・配列の型に切り替えてテストコンソール出力
Screens
HANDAUTOMER3
AZSTOKE_HANDAUTOMER1"HANDAUTOMER" -Part1- Run HANDAUTOMER on the selected media and automatically set it to Momentary-21LUFSBefore you run it
調整したいメディアがプロジェクトに置かれている
Script
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) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER")- ・SilverのAPIを利用可能にする
allCount = reaper.AZ_GetSelectedMediaTypeCount(0,"")- ・選択メディアのすべての数を取得してallCountに代入
for i = 0,allCount-1 do- ・allCount分Forループ対応
reaper.AZ_SetSelectedMediaIdHANDAUTOMER(0,i,2)- ・HANDAUTOMERを選択メディアIDに合わせて実行
reaper.AZ_SetSelectedMediaIdLoudnessMaxMomentary(0,i,-21)- ・指定選択メディアIDごとにMomentaryを-21LUFSに設定
end
Screens
Before you run it
調整したいメディアがプロジェクトに置かれている
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * _,_,allCount,_ = AZ_GetSelectedMediaTypeCount(0,"",0,0) for i in range(allCount): AZ_SetSelectedMediaIdHANDAUTOMER(0,i,2) AZ_SetSelectedMediaIdLoudnessMaxMomentary(0,i,-21,0)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import *- ・Bronze/SilverのAPIを利用可能にする
_,_,allCount,_ = AZ_GetSelectedMediaTypeCount(0,"",0,0)- ・選択メディアの数をallCountに代入
for i in range(allCount):- ・allCount分Forループ再生
AZ_SetSelectedMediaIdHANDAUTOMER(0,i,2)- ・選択メディアIDに「HandAutomer」を実行 圧縮タイプは「2」を設定
AZ_SetSelectedMediaIdLoudnessMaxMomentary(0,i,-21,0)- ・選択メディアIDのMaxMomentaryを-21LUFSに設定
Screens
AZSTOKE_HANDAUTOMER2"HANDAUTOMER" -Part2- Fully automatic-insert~regionBefore you run it
調整したいWav波形をフォルダに用意 トラックを用意
Script
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 endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER")- ・SilverのAPIを設定対応
retval,inputList = reaper.AZ_GetUserInputList("AZWavList",2,"Path :,Loundness :","D:\\,-21")- ・SimpleUIを出力してフォルダパスとラウドネス値を入力してinputListに代入
if retval then- ・UIでOKを押したか確認
color = reaper.AZ_GetRandomColor()- ・ランダムの色を取得してcolorに代入
fileList = reaper.AZ_GetFilePathList(inputList[1],"wav")- ・入力したフォルダパスにある"wav"形式の全ファイルパスを取得してfileListに代入
startPos = 0- ・メディアの設置開始位置を設定「0」startPosに代入
for i, value in pairs(fileList) do- ・fileList分Forループ再生
item = reaper.AZ_InsertMediaTrackIdSecond(0,1,fileList[i],0,startPos)- ・トラックIDを指定してfileListのパス情報、startPos(開始位置)に沿って、メディアを並べる インサートしたメディアアイテムをitemに代入
endPos = reaper.AZ_GetMediaItemEndTime(item)- ・itemの終了地点を取得してendPosに代入
name = reaper.AZ_GetMediaItemName(item)- ・itemの名前を取得してnameに代入
reaper.AZ_SetMediaItemHANDAUTOMER(item,2)- ・itemに圧縮タイプ2の「HANDAUTOMER」を実行
reaper.AZ_SetMediaItemLoudnessMaxMomentary(item,tonumber(inputList[2]))- ・itemにinputListのラウドネス値をtoNumberで数字にして設定
reaper.AZ_AddRegionMarker(0,startPos,endPos,name,i,color)- ・itemの開始位置と終了位置、名前、ID、カラーをRegion指定してRegionMarkerを追加
startPos = endPos + 1- ・インサートされた終了位置に+1秒追加したところを開始位置とする
end end
Screens
Before you run it
調整したいWav波形をフォルダに用意 トラックを用意
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * retval,inputList = AZ_GetUserInputList("AZWavList",2,"Path :,Loundness :","D:/,-21") if retval: color,_,_,_ = AZ_GetRandomColor(0,0,0,0) fileList = AZ_GetFilePathList(inputList[0],"wav") startPos = 0 for i, value in enumerate(fileList, 0): item = AZ_InsertMediaTrackIdSecond(0,1,fileList[i],0,startPos) _,endPos = AZ_GetMediaItemEndTime(item,0) _,name,_ = AZ_GetMediaItemName(item,0,1024) AZ_SetMediaItemHANDAUTOMER(item,2) AZ_SetMediaItemLoudnessMaxMomentary(item,float(inputList[1])) AZ_AddRegionMarker(0,startPos,endPos,name,i,color) startPos = endPos + 1Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import *- ・BRONZE/SILVERのAPIを利用可能にする
retval,inputList = AZ_GetUserInputList("AZWavList",2,"Path :,Loundness :","D:/,-21")- ・入力用UIを用意して検索フォルダパスと設定したいラウドネス値を用意
if retval:- ・UIでOKを押したかを確認
color,_,_,_ = AZ_GetRandomColor(0,0,0,0)- ・ランダムカラーを取得してcolorに代入
fileList = AZ_GetFilePathList(inputList[0],"wav")- ・入力したフォルダから"wav"ファイルを取得してfileListに配列代入
startPos = 0- ・開始位置を0秒に設定
for i, value in enumerate(fileList, 0):- ・fileList分のForループ再生
item = AZ_InsertMediaTrackIdSecond(0,1,fileList[i],0,startPos)- ・fileListのファイルパスをトラックID(1)にstartPosの位置にメディア挿入して挿入したメディアを取得してitemに代入
_,endPos = AZ_GetMediaItemEndTime(item,0)- ・itemの終了位置(秒)を取得してendPosに代入
_,name,_ = AZ_GetMediaItemName(item,0,1024)- ・itemの名前を取得してnameに代入
AZ_SetMediaItemHANDAUTOMER(item,2)- ・itemに「HANDAUTOMER」圧縮タイプ「2」を実行
AZ_SetMediaItemLoudnessMaxMomentary(item,float(inputList[1]))- ・itemに指定したラウドネスに設定
AZ_AddRegionMarker(0,startPos,endPos,name,i,color)- ・開始位置と終了位置にリージョンマーカーを設定
startPos = endPos + 1- ・終了位置に+1秒をして次のメディアの挿入位置を設定してstartPosに代入
Screens
AZSTOKE_CEDEC2024_HANDAUTOMERCEDEC2024 - Demonstration - Want to edit and export a large amount of audio?Before you run it
調整したい波形データをフォルダにまとめて用意しておく
Script
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) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER")allCount, count = reaper.AZ_GetSelectedMediaTypeCount(0, "")- ・選択メディアの数を取得してallCountに代入
for i = 0, allCount - 1 do- ・allCount数分繰り返し処理を実行
item = reaper.AZ_GetMediaItemSelect(0,i,1)- ・選択メディアを取得してitemに代入
reaper.AZ_SetMediaItemHANDAUTOMER(item,2)- ・itemに対してHANDAUTOMERを実行 圧縮レベル2
name = reaper.AZ_GetMediaItemName(item)- ・itemの波形名を取得してnameに代入
startPos = reaper.AZ_GetMediaItemStartTimeSeconds(item)- ・itemの開始位置を取得してstartPosに代入
endPos = reaper.AZ_GetMediaItemEndTime(item)- ・itemの終了位置を取得してendPosに代入
reaper.AZ_AddRegionMarker(0, startPos, endPos, name, 0, 0)- ・各種情報をもとにリージョンを生成
end- ・繰り返し処理を終了
Before you run it
調整したい波形データをフォルダにまとめて用意しておく
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * allCount = AZ_GetSelectedMediaTypeCount(0, "")[2] for i in range(allCount): item = AZ_GetMediaItemSelect(0,i,1) retval = AZ_SetMediaItemHANDAUTOMER(item, 2) name = AZ_GetMediaItemName(item)[1] startPos = AZ_GetMediaItemStartTimeSeconds(item)[1] endPos = AZ_GetMediaItemEndTime(item)[1] AZ_AddRegionMarker(0, startPos, endPos, name, 0, 0)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import *allCount = AZ_GetSelectedMediaTypeCount(0, "")[2]- ・選択メディアの数を取得してallCountに代入
for i in range(allCount):- ・allCount数分繰り返し処理を実行
item = AZ_GetMediaItemSelect(0,i,1)- ・選択メディアを取得してitemに代入
retval = AZ_SetMediaItemHANDAUTOMER(item, 2)- ・itemに対してHANDAUTOMERを実行 圧縮レベル2
name = AZ_GetMediaItemName(item)[1]- ・itemの波形名を取得してnameに代入
startPos = AZ_GetMediaItemStartTimeSeconds(item)[1]- ・itemの開始位置を取得してstartPosに代入
endPos = AZ_GetMediaItemEndTime(item)[1]- ・itemの終了位置を取得してendPosに代入
AZ_AddRegionMarker(0, startPos, endPos, name, 0, 0)- ・各種情報をもとにリージョンを生成
- ・※繰り返し処理を終了
Screens
Region1
AZSTOKE_SetRegionMakerSelectedMedia"Region" -Part 1- Automatic region setting for selected mediaBefore you run it
プロジェクト内に必要メディアを置く ※縦にメディアを重ねることはできません。
Script
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) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER")- ・SilverAPIを利用可能にする
allCount,_ = reaper.AZ_GetSelectedMediaTypeCount(0,"")- ・選択メディアの数を出力してallCountに代入
reaper.AZ_DeleteAllRegion(0)- ・指定プロジェクト内のリージョンマーカーをすべて削除
color = reaper.AZ_GetRandomColor()- ・ランダムの色を取得してcolorに代入
for i = 0,allCount-1 do- ・選択メディア数分Forをループ対応
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
Screens
Before you run it
プロジェクト内に必要メディアを置く ※縦にメディアを重ねることはできません。
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * _,_,allCount,_ = AZ_GetSelectedMediaTypeCount(0,"",0,0) AZ_DeleteAllRegion(0) color,_,_,_ = AZ_GetRandomColor(0,0,0,0) for i in range(allCount): _,_,startPos = AZ_GetSelectedMediaStartTimeSeconds(0,i,0) _,_,endPos = AZ_GetSelectedMediaEndTime(0,i,0) _,_,name,_ = AZ_GetSelectedMediaName(0,i,"",1024) AZ_AddRegionMarker(0,startPos,endPos,name,0,color)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import *- ・Bronze/SilverのAPIを利用可能にする
_,_,allCount,_ = AZ_GetSelectedMediaTypeCount(0,"",0,0)- ・選択メディアの数を出力してallCountに代入
AZ_DeleteAllRegion(0)- ・すべてのリージョンを削除
color,_,_,_ = AZ_GetRandomColor(0,0,0,0)- ・ランダムカラーでカラー値を取得
for i in range(allCount):- ・選択メディア数分ループ
_,_,startPos = AZ_GetSelectedMediaStartTimeSeconds(0,i,0)- ・メディアの開始位置を取得してstartPosに代入
_,_,endPos = AZ_GetSelectedMediaEndTime(0,i,0)- ・メディアの終了位置を取得してendPosに代入
_,_,name,_ = AZ_GetSelectedMediaName(0,i,"",1024)- ・メディアの名前を取得してnameに代入
AZ_AddRegionMarker(0,startPos,endPos,name,0,color,0)- ・リージョンマーカーを生成してメディアの情報を使って同タイミングに設定
Screens
TALKTRON1
AZSTOKE_TALKTRON_1"TALKTRON" -Part1- Multilingual volume automatic adjustment function 1Before you run it
主言語の音量調整対応が完了している 調整したい指定言語ファイルがある 主言語と調整したい言語のファイルは同名になっている
Script
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 endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER")- ・Silverを利用可能にする
retval,pathList = reaper.AZ_GetUserInputList("GetPath",3,"basePath:,sujectPath:,trackList:","D://,D://,3")- ・ベース言語パス、指定言語パス、トラックを分けたい数を入力できるように設定
if retval then- ・OKを押した場合は以下を実行
retval,trackList = reaper.AZ_GetUserInputList("TrackList",tonumber(pathList[3]),"track1,track2,track3,track4,track5","PL0000,PL0001,PL0002,PL0003,PL0004,PL0005")- ・トラックを分けたい数分リストを入力
if retval thenunmatchedPathList = reaper.AZ_TALKTRON_InsertMediaItems(pathList[2],pathList[1], 0, 1, 0, true, true, 2, trackList)- ・TALKTRONを実行 全自動で動きます。
- for i, value in pairs(unmatchedPathList) do Msg("主ボイスに存在しないファイル:"..value) ・主ボイスに存在しないファイルをコンソールにリストアップ
end end end
Screens
Before you run it
主言語の音量調整対応が完了している 調整したい指定言語ファイルがある 主言語と調整したい言語のファイルは同名になっている
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import * retval,pathList = AZ_GetUserInputList("GetPath",3,"basePath:,subjectPath:,trackList:","D://,D://,3") if retval: retval,trackList = AZ_GetUserInputList("TrackList",int(pathList[2]),"track1,track2,track3","PL0000,PL0001,PL0002") if retval: unmatchList = AZ_TALKTRON_InsertMediaItems(pathList[1],pathList[0],0,1,0,True,True,2,trackList,{}) for i, value in enumerate(unmatchList, 0): Msg("NotFiles" + str(value))Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import *- ・SilverのAPIをインポート
def Msg(parm): RPR_ShowConsoleMsg(str(parm) + "\n")- ・デバック用コンソール出力関数
retval,pathList = AZ_GetUserInputList("GetPath",3,"basePath:,subjectPath:,trackList:","D://,D://,3")- ・入力用のインプットリストを用意
if retval:- ・UIでOKを押した場合以下を実行
retval,trackList = AZ_GetUserInputList("TrackList",int(pathList[2]),"track1,track2,track3","PL0000,PL0001,PL0002")- ・トラックを判別する名称を入力できるように設定
if retval:- ・トラック判別のUIでOKを押した場合以下を実行
unmatchList = AZ_TALKTRON_InsertMediaItems(pathList[1],pathList[0],0,1,0,True,True,2,trackList,{})- ・TALKTRONを実行
for i, value in enumerate(unmatchList, 0): Msg("NotFiles" + str(value))- ・もし指定言語にあってベース言語に存在しない音があった場合に無かったファイルのパスをコンソールに出力
Screens
LOUDMATCHIFY2
AZSTOKE_LOUDMATCHIFY_SAVEDATE_1"LOUDMATCHIFY" -Part 1- Creating save dataBefore you run it
セーブデータの保存先のパス情報を用意しておく
Script
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) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER")- ・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 }, }- ・Name/Loudnessの2つのセットとしてLOUDMATCHIFYに適した形で配列を作成 ※変更追加したい場合はここに追記していく
- jsonStr = reaper.AZ_Json_Serialize(loudnessTable); ・配列情報を一つのテキストに変換
- reaper.AZ_WriteFile(inputList[1],"savedata.txt",jsonStr,0) ・テキスト情報を指定のフォルダにsavedata.txtを生成
end
Screens
Before you run it
セーブデータの保存先のパス情報を用意しておく
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import * cancelType,inputList = AZ_GetUserInputList("SaveData",1, "Path:", "D:/script/") if cancelType: loudnessTable = [ { "Name" : "ACTION", "Loudness" : -22 }, { "Name" : "CHARGE", "Loudness" : -30 }, { "Name" : "HIT", "Loudness" : -20 }, { "Name" : "JUMP", "Loudness" : -25 }, ] jsonStr = AZ_Json_Serialize(loudnessTable); AZ_WriteFile(inputList[0],"savedata.txt",jsonStr,0)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import *- ・RIGDOCKSとSILVERのAPIを利用可能にする設定
cancelType,inputList = AZ_GetUserInputList("SaveData",1, "Path:", "D:/script/")- ・テキスト入力できるUIを設定 ※データパスを入力してもらう。
if cancelType:- ・テキストボックスでOKを押した場合以下を実行
loudnessTable = [ { "Name" : "ACTION", "Loudness" : -22 }, { "Name" : "CHARGE", "Loudness" : -30 }, { "Name" : "HIT", "Loudness" : -20 }, { "Name" : "JUMP", "Loudness" : -25 }, ]- ・LOUDMATCHIFYで利用できる形にして配列を作成
jsonStr = AZ_Json_Serialize(loudnessTable);- ・配列情報を文字列jsonStrに書き換える
AZ_WriteFile(inputList[0],"savedata.txt",jsonStr,0)- ・文字列を指定のフォルダにテキストを書き出す。
Screens
AZSTOKE_LOUDMATCHIFY_ACTION_1"LOUDMATCHIFY" -Part 2- Implementing name detection loudnessBefore you run it
Trackを作成しておく LOUDMATCHIFYで利用可能なセーブデータを生成しておく 音量調整したいファイルを用意しておく
Script
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 endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ・SILVERとGOLDを利用可能にする
cancelType,inputList = reaper.AZ_GetUserInputList("LOUDMATCHIFY",2,"ListPath:,WavPath:","D:/,D:/")- ・テキスト入力を可能にする。
jsonStr = reaper.AZ_ReadFile(inputList[1],"savedata.txt")- ・セーブデータ先のフォルダからsavedata.txtを検索してその文字列を取得する。
loudnessTable = reaper.AZ_Json_Deserialize(jsonStr)- ・取得した文字列を配列に置き換える
if cancelType then- ・テキスト入力画面でOKを押した場合は以下を実行
fileList = reaper.AZ_GetFilePathList(inputList[2],"wav")- ・調整したいファイルのリストを取得
startPos = 0 mediaInterval = 1for i, value in pairs(fileList) do- ・取得したリスト分Forループ
item = reaper.AZ_InsertMediaTrackIdSecond(0,0,value,0,startPos)- ・ファイルをトラック1にインサートしてitemを取得
name = reaper.AZ_GetMediaItemName(item)- ・itemの名前を取得してnameに代入
reaper.AZ_SetMediaItemHANDAUTOMER(item,1)- ・itemにHANDAUTOMERの圧縮率1をかける
reaper.AZ_LOUDMATCHFY_SetVolumeForMediaItem(item ,loudnessTable, 1,0)- ・itemにLOUDMATCHIFYを実行、セーブデータの配列を読み込んで音量調整
maxMomentary = reaper.AZ_GetMediaItemLoudnessMaxMomentary(item)- ・itemの現段階のmaxMomentaryを出力
endPos = reaper.AZ_GetMediaItemEndTime(item)- ・終了位置を取得
startPos = endPos + mediaInterval- ・次のオーディオ位置を設定
Msg(name) Msg(maxMomentary)- ・名前とラウドネス値をコンソールに出力
end end
Screens
Before you run it
Trackを作成しておく LOUDMATCHIFYで利用可能なセーブデータを生成しておく 音量調整したいファイルを用意しておく
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * cancelType,inputList = AZ_GetUserInputList("LOUDMATCHIFY", 2, "ListPath:,WavPath:", "D:/script,D:/b") if cancelType: listPath = inputList[0] wavPath = inputList[1] _, _, jsonStr, _ = AZ_ReadFile(listPath,"savedata.txt") Msg(jsonStr) loudnessTable = AZ_Json_Deserialize(jsonStr) Msg(loudnessTable) fileList = AZ_GetFilePathList(wavPath,"wav") startPos = 0 mediaInterval = 1 for file in fileList: item = AZ_InsertMediaTrackIdSecond(0, 0, file, 0, startPos) AZ_SetMediaItemHANDAUTOMER(item,1) AZ_LOUDMATCHIFY_SetVolumeForMediaItem(item ,loudnessTable, 1, 0) _, name, _ = AZ_GetMediaItemName(item) _, maxMomentary, _ = AZ_GetMediaItemLoudnessMaxMomentary(item) Msg(name) Msg(maxMomentary) _, endTime = AZ_GetMediaItemEndTime(item) startPos = endTime + mediaIntervalLine by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ・RIGDOCKSのAPIを利用可能にする
cancelType,inputList = AZ_GetUserInputList("LOUDMATCHIFY", 2, "ListPath:,WavPath:", "D:,D:/")- ・テキスト入力を可能にする。
if cancelType:- ・テキスト入力画面でOKを押した場合は以下を実行
listPath = inputList[0] wavPath = inputList[1]- ・画面から入力された値を変数に格納する
_, _, jsonStr, _ = AZ_ReadFile(listPath,"savedata.txt")- ・セーブデータ先のフォルダからsavedata.txtを検索してその文字列を取得する。
loudnessTable = AZ_Json_Deserialize(jsonStr)- ・取得した文字列を配列に置き換える
fileList = AZ_GetFilePathList(wavPath,"wav")- ・調整したいファイルのリストを取得
startPos = 0 mediaInterval = 1for file in fileList:- ・取得したリスト分Forループ
item = AZ_InsertMediaTrackIdSecond(0, 0, file, 0, startPos)- ・ファイルをトラック1にインサートしてitemを取得
AZ_SetMediaItemHANDAUTOMER(item,1)- ・itemにHANDAUTOMERの圧縮率1をかける
AZ_LOUDMATCHIFY_SetVolumeForMediaItem(item ,loudnessTable, 1, 0)- ・itemにLOUDMATCHIFYを実行、セーブデータの配列を読み込んで音量調整
_, name, _ = AZ_GetMediaItemName(item)- ・itemの名前を取得
_, maxMomentary, _ = AZ_GetMediaItemLoudnessMaxMomentary(item)- ・itemの現段階のmaxMomentaryを取得
Msg(name) Msg(maxMomentary)- ・itemの名前とmaxMomentaryを出力
_, endTime = AZ_GetMediaItemEndTime(item) startPos = endTime + mediaInterval- ・インサートしたメディアの終了位置からmediaIntervalだけ進んだ位置を次のインサート位置に設定
Screens
Wwise9
AZSTOKE_Wwise_Rename_1"Wwise" -Part1- Manipulating each file nameBefore you run it
Wwiseにリネームしたいファイルが実装されている 変更したい箇所を選択しておく
Script
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() endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ・SILVERとGOLDのAPIを利用可能にする
if (reaper.AZ_Wwise_Connect("127.0.0.1",8080)) then- ・Wwiseのコネクトを実行し接続するとif内を実行
objectList,numObjects = reaper.AZ_Wwise_GetSelectedObjectList()- ・選択オブジェクト(配列)を取得してobjectListに代入
for i,value in pairs(objectList) do- ・objectList分Forループ対応
name = reaper.AZ_DeleteBlankString(value.Name)- ・取得した名前のスペースを削除
name = reaper.AZ_ReplaceSearchString(name,"AZ","AZSTOKE")- ・AZという文字をAZSTOKEに置換する
reaper.AZ_Wwise_SetName(value.ID,name)- ・最終的に変更した文字列をオブジェクトに適用
endreaper.AZ_Wwise_Disconnect()- ・Wwiseのコネクトを終了
end
Screens
Before you run it
Wwiseにリネームしたいファイルが実装されている 変更したい箇所を選択しておく
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * if AZ_Wwise_Connect("127.0.0.1",8080)[0]: objectList,numObjects = AZ_Wwise_GetSelectedObjectList() for item in objectList: _, name, _ = AZ_DeleteBlankString(item["Name"], "", 1024) _, _, _, name, _ = AZ_ReplaceSearchString(name, "AZ", "AZSTOKE", "", 1024) AZ_Wwise_SetName(item["ID"], name) AZ_Wwise_Disconnect()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ・SILVERとGOLDのAPIを利用可能にする
if AZ_Wwise_Connect("127.0.0.1",8080)[0]:- ・Wwiseのコネクトを実行し接続するとif内を実行
objectList,numObjects = AZ_Wwise_GetSelectedObjectList()- ・選択オブジェクト(配列)を取得してobjectListに代入
for item in objectList:- ・objectList分Forループ対応
_, name, _ = AZ_DeleteBlankString(item["Name"], "", 1024)- ・取得した名前のスペースを削除
_, _, _, name, _ = AZ_ReplaceSearchString(name, "AZ", "AZSTOKE", "", 1024)- ・AZという文字をAZSTOKEに置換する
AZ_Wwise_SetName(item["ID"], name)- ・最終的に変更した文字列をオブジェクトに適用
AZ_Wwise_Disconnect()- ・Wwiseのコネクトを終了
Screens
AZSTOKE_CEDEC_KYUSHU2024[CEDEC+KYUSHU2024] Successfully automated the process from voice rough editing to Wwise implementationBefore you run it
Trackを作成しておく インサートする用のメディアを用意しておく LOUDMATCHIFYで利用可能なセーブデータを生成しておく レンダー設定を用意しておく WwiseにインサートしたいWorkUnitを作成しておく
Script
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 endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath())require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ・BRONZE、SILVER、GOLDのAPIを利用可能にする
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にインポート
reaper.AZ_SetMediaItemHANDAUTOMER(itemList[i].item,3)- ・HANDAUTOMERを実行
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- ・音声ファイル名のナンバリングを除いた部分を取得(Wwiseでコンテナ名として使用する)
--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"- ・Wwise上のインポート先を指定
parent = ""if (reaper.AZ_Wwise_Connect("127.0.0.1",8080)) then- ・Wwiseに接続
--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)- ・LOUDMATCHIFY用の設定データをファイルから取得する
--loudness for i, value in pairs(itemList) do wwiseVol = reaper.AZ_MIDDLESCANNER_Wwise_GetVolumeForMediaItem(itemList[i].item,"English(US)")- ・MIDDLESCANNERを実行し、Wwise上での音量設定を取得
reaper.AZ_LOUDMATCHIFY_SetVolumeForMediaItem(itemList[i].item,loudmatchifyList,1,wwiseVol.Volume)- ・MIDDLESCANNERの結果を考慮してLOUDMATCHIFYを実行
Msg(itemList[i].name) Msg(wwiseVol.Volume) Msg(reaper.AZ_GetMediaItemLoudnessMaxMomentary(itemList[i].item))- ・処理の結果をコンソールに出力
endpath = 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- ・レンダリングしたファイルを対応するWwiseオブジェクトにインポート(置き換え)
reaper.AZ_Wwise_Disconnect()- ・Wwiseから切断する
end end
Screens
APIs used
- AZ_GetFilePathList
- AZ_InsertMediaTrackIdSecond
- AZ_SetMediaItemHANDAUTOMER
- AZ_GetMediaItemName
- AZ_GetStringSplitList
- AZ_GetMediaItemEndTime
- AZ_AddRegionMarker
- AZ_ReadFile
- AZ_Json_Deserialize
- AZ_SetProjectPathFolder
- AZ_RenderToAudioFile
- AZ_Wwise_CreateContainer
- AZ_Wwise_CreateSoundVoice
- AZ_MIDDLESCANNER_Wwise_GetVolumeForMediaItem
- AZ_LOUDMATCHIFY_SetVolumeForMediaItem
- AZ_GetMediaItemLoudnessMaxMomentary
- AZ_Wwise_ImportAudioFile
- AZ_Wwise_Disconnect
Before you run it
Trackを作成しておく インサートする用のメディアを用意しておく LOUDMATCHIFYで利用可能なセーブデータを生成しておく レンダー設定を用意しておく WwiseにインサートしたいWorkUnitを作成しておく
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * AZ_DeleteAllRegion(0) cancelType, inputList = AZ_GetUserInputList("Insert",1,"Path:","D:\\") if cancelType: #file import HANDAUTOMER fileList = AZ_GetFilePathList(inputList[0],"wav") startPos = 0 itemList = [] for file in fileList: mediaInfo = {} mediaInfo["source"] = file mediaInfo["item"] = AZ_InsertMediaTrackIdSecond(0, 0, file, 0, startPos) AZ_SetMediaItemHANDAUTOMER(mediaInfo["item"], 3) mediaInfo["name"] = AZ_GetMediaItemName(mediaInfo["item"])[1] #get parent mediaInfo["parent"] = "" splitList = AZ_GetStringSplitList(mediaInfo["name"],"_") splitList.pop(-1) for value in splitList: mediaInfo["parent"] = mediaInfo["parent"] + "_" + value mediaInfo["parent"] = mediaInfo["parent"].lstrip("_") #next start pos setting + regionMarker endPos = AZ_GetMediaItemEndTime(mediaInfo["item"])[1] AZ_AddRegionMarker(0, startPos, endPos, mediaInfo["name"], 0, 0) startPos = endPos + 1 itemList.append(mediaInfo) #render setting renderPath = "D:\\script\\data" renderFileName = "render" jsonStr = AZ_ReadFile(renderPath,renderFileName + ".txt")[2] render = AZ_Json_Deserialize(jsonStr) path = AZ_SetProjectPathFolder("Rec",3)[2] render["OutputDir"] = path #render fileList = AZ_RenderToAudioFile(0, render) #wwise intro wwisePath = "\\Actor-Mixer Hierarchy\\Default Work Unit\\Master\\VOICE" parent = "" if AZ_Wwise_Connect("127.0.0.1",8080)[0]: #wwise object create for i, item in enumerate(itemList): if parent != item["parent"]: parent = item["parent"] containerList = AZ_Wwise_CreateContainer(wwisePath, 0, item["parent"]) soundVoiceList = AZ_Wwise_CreateSoundVoice(containerList["ID"], item["source"], item["name"]) itemList[i]["soundVoiceID"] = soundVoiceList["ID"] #LOUDMATCHIFY Savedata jsonStr = AZ_ReadFile("D:\\script\\data","savedata.txt")[2] loudmatchifyList = AZ_Json_Deserialize(jsonStr) #loudness for item in itemList: wwiseVol = AZ_MIDDLESCANNER_Wwise_GetVolumeForMediaItem(item["item"], "English(US)") AZ_LOUDMATCHIFY_SetVolumeForMediaItem(item["item"],loudmatchifyList,1, wwiseVol["Volume"]) Msg(item["name"]) Msg(wwiseVol["Volume"]) Msg(AZ_GetMediaItemLoudnessMaxMomentary(item["item"])[1]) path = AZ_SetProjectPathFolder("Rec",3)[2] render["OutputDir"] = path renderedFileList = AZ_RenderToAudioFile(0,render)[0] for item in itemList: renderedFile = [file for file in renderedFileList if AZ_CheckIncludeString(AZ_GetPathInfo(file)["FileNameWithoutExtension"],item["name"])][0] AZ_Wwise_ImportAudioFile(item["soundVoiceID"], renderedFile, "English(US)") AZ_Wwise_Disconnect()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ・BRONZE、SILVER、GOLDのAPIを利用可能にする
AZ_DeleteAllRegion(0)- ・既につくられているリージョンを削除する
cancelType, inputList = AZ_GetUserInputList("Insert",1,"Path:","D:\\")- ・音声ファイルが格納されているフォルダのパスを指定
if cancelType: #file import HANDAUTOMER fileList = AZ_GetFilePathList(inputList[0],"wav")- ・音声ファイルのパスを取得
startPos = 0- ・音声ファイルの開始位置を設定
itemList = []for file in fileList:mediaInfo = {} mediaInfo["source"] = file mediaInfo["item"] = AZ_InsertMediaTrackIdSecond(0, 0, file, 0, startPos)- ・音声ファイルをReaperにインポート
AZ_SetMediaItemHANDAUTOMER(mediaInfo["item"], 3)- ・HANDAUTOMERを実行
mediaInfo["name"] = AZ_GetMediaItemName(mediaInfo["item"])[1]- ・メディアアイテムの名前(ファイル名)を取得
#get parent mediaInfo["parent"] = "" splitList = AZ_GetStringSplitList(mediaInfo["name"],"_") splitList.pop(-1) for value in splitList: mediaInfo["parent"] = mediaInfo["parent"] + "_" + valuemediaInfo["parent"] = mediaInfo["parent"].lstrip("_")- ・音声ファイル名のナンバリングを除いた部分を取得(Wwiseでコンテナ名として使用する)
#next start pos setting + regionMarker endPos = AZ_GetMediaItemEndTime(mediaInfo["item"])[1] AZ_AddRegionMarker(0, startPos, endPos, mediaInfo["name"], 0, 0)- ・メディアアイテムの位置にリージョンマーカーを設定
startPos = endPos + 1- ・次のメディアアイテムをインポートする位置を指定
itemList.append(mediaInfo)- ・メディアアイテムの情報をリストに格納しておく
#render setting renderPath = "D:\\script\\data" renderFileName = "render"jsonStr = AZ_ReadFile(renderPath,renderFileName + ".txt")[2] render = AZ_Json_Deserialize(jsonStr)- ・ファイルからレンダリング設定データを取得
path = AZ_SetProjectPathFolder("Rec",3)[2]render["OutputDir"] = path- ・出力先フォルダのみ変更
#render fileList = AZ_RenderToAudioFile(0, render)- ・レンダリング実行
#wwise intro wwisePath = "\\Actor-Mixer Hierarchy\\Default Work Unit\\Master\\VOICE"- ・Wwise上のインポート先を指定
parent = ""if AZ_Wwise_Connect("127.0.0.1",8080)[0]:- ・Wwiseに接続
#wwise object create for i, item in enumerate(itemList):- ・各メディアアイテム情報に対して以下処理を実行
if parent != item["parent"]: parent = item["parent"] containerList = AZ_Wwise_CreateContainer(wwisePath, 0, item["parent"])- ・対応するランダムコンテナが作成されていない場合、作成する
soundVoiceList = AZ_Wwise_CreateSoundVoice(containerList["ID"], item["source"], item["name"])itemList[i]["soundVoiceID"] = soundVoiceList["ID"]- ・コンテナにレンダリングした音声ファイルをインポートする
#LOUDMATCHIFY Savedata jsonStr = AZ_ReadFile("D:\\script\\data","savedata.txt")[2] loudmatchifyList = AZ_Json_Deserialize(jsonStr)- ・LOUDMATCHIFY用の設定データをファイルから取得する
#loudness for item in itemList: wwiseVol = AZ_MIDDLESCANNER_Wwise_GetVolumeForMediaItem(item["item"], "English(US)")- ・MIDDLESCANNERを実行し、Wwise上での音量設定を取得
AZ_LOUDMATCHIFY_SetVolumeForMediaItem(item["item"],loudmatchifyList,1, wwiseVol["Volume"])- ・MIDDLESCANNERの結果を考慮してLOUDMATCHIFYを実行
Msg(item["name"]) Msg(wwiseVol["Volume"]) Msg(AZ_GetMediaItemLoudnessMaxMomentary(item["item"])[1])- ・処理の結果をコンソールに出力
path = AZ_SetProjectPathFolder("Rec",3)[2] render["OutputDir"] = path renderedFileList = AZ_RenderToAudioFile(0,render)[0]- ・レンダリング設定の出力先フォルダを変更し、レンダリングを実行
for item in itemList: renderedFile = [file for file in renderedFileList if AZ_CheckIncludeString(AZ_GetPathInfo(file)["FileNameWithoutExtension"],item["name"])][0] AZ_Wwise_ImportAudioFile(item["soundVoiceID"], renderedFile, "English(US)")- ・レンダリングしたファイルを対応するWwiseオブジェクトにインポート(置き換え)
AZ_Wwise_Disconnect()- ・Wwiseから切断する
Screens
APIs used
- AZ_GetFilePathList
- AZ_InsertMediaTrackIdSecond
- AZ_SetMediaItemHANDAUTOMER
- AZ_GetMediaItemName
- AZ_GetStringSplitList
- AZ_GetMediaItemEndTime
- AZ_AddRegionMarker
- AZ_ReadFile
- AZ_Json_Deserialize
- AZ_SetProjectPathFolder
- AZ_RenderToAudioFile
- AZ_Wwise_CreateContainer
- AZ_Wwise_CreateSoundVoice
- AZ_MIDDLESCANNER_Wwise_GetVolumeForMediaItem
- AZ_LOUDMATCHIFY_SetVolumeForMediaItem
- AZ_GetMediaItemLoudnessMaxMomentary
- AZ_Wwise_ImportAudioFile
- AZ_Wwise_Disconnect
AZSTOKE_Wwise_FullAuto_Blend_1Automate the process from export to blend container generationBefore you run it
書き出ししたいファイルをReaperプロジェクト内に並べておく Renderの書き出し用ファイルを生成しておく ※Renderの設定ファイルの書き出し方法はこちら
Script
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 endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ・APIを利用可能にする設定
reaper.AZ_DeleteAllRegion(0)- ・リージョンマーカーを削除
itemList = reaper.AZ_GetSelectedMediaItemList(0)- ・選択メディアを配列出力
color = reaper.AZ_GetRandomColor()- ・ランダム色を取得
--Region setting for i, value in pairs(itemList) do- ・選択メディアのリストをForループ
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- ・Wwiseにコネクト対応
parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"- ・追加したい親のパスを設定
workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")- ・「PL0000」ワークユニットを作成
mixer = reaper.AZ_Wwise_CreateActorMixer(workunit.Path,"pl0000")- ・「pl0000」アクターミキサーを作成
container = reaper.AZ_Wwise_CreateContainer(mixer.ID,reaper.AZ_Wwise_ContainerType_Blend(),"pl0000_az")- ・作成したアクターミキサーの以下にブレンドコンテナを生成
for i, value in pairs(fileList) do- ・書き出したファイルリスト分Forループ
splitList = reaper.AZ_GetStringSplitList(value, "\\")- ・フルパスから階層で配列に切り出す対応
wwiseObj = reaper.AZ_Wwise_CreateSoundSFX(container.ID,value,splitList[#splitList],"PL0000")- ・サウンドSFXを生成してファイル名を設定 ※splitList[#splitList]これにより、フルパス情報から最後の波形名を取得することができます。
end end
Screens
APIs used
- AZ_DeleteAllRegion
- AZ_GetSelectedMediaItemList
- AZ_GetRandomColor
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemEndTime
- AZ_GetMediaItemName
- AZ_AddRegionMarker
- AZ_SetResoucePathFolder
- AZ_ReadFile
- AZ_Json_Deserialize
- AZ_SetProjectPathFolder
- AZ_RenderToAudioFile
- AZ_Wwise_Connect
- AZ_Wwise_CreateWorkUnit
- AZ_Wwise_CreateActorMixer
- AZ_Wwise_CreateContainer
- AZ_GetStringSplitList
- AZ_Wwise_CreateSoundSFX
Before you run it
書き出ししたいファイルをReaperプロジェクト内に並べておく Renderの書き出し用ファイルを生成しておく ※Renderの設定ファイルの書き出し方法はこちら
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * AZ_DeleteAllRegion(0) itemList = AZ_GetSelectedMediaItemList(0) color = AZ_GetRandomColor()[0] # Region setting for item in itemList: startPos = AZ_GetMediaItemStartTimeSeconds(item)[1] endPos = AZ_GetMediaItemEndTime(item)[1] name = AZ_GetMediaItemName(item)[1] AZ_AddRegionMarker(0, startPos, endPos, name, 0, color) # render setting renderPath = AZ_SetResoucePathFolder("AZData/Render", 0)[2] renderFileName = "render" jsonStr = AZ_ReadFile(renderPath, renderFileName + ".txt")[2] render = AZ_Json_Deserialize(jsonStr) path = AZ_SetProjectPathFolder("Rec", 3)[2] render["OutputDir"] = path # render fileList = AZ_RenderToAudioFile(0, render)[0] if AZ_Wwise_Connect("127.0.0.1", 8080)[0]: parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit" workunit = AZ_Wwise_CreateWorkUnit(parentPath, "PL0000") mixer = AZ_Wwise_CreateActorMixer(workunit["Path"], "pl0000") container = AZ_Wwise_CreateContainer(mixer["ID"], AZ_Wwise_ContainerType_Blend(),"pl0000_az") for filePath in fileList: splitList = AZ_GetStringSplitList(filePath, "\\") wwiseObj = AZ_Wwise_CreateSoundSFX(container["ID"], filePath, splitList[len(splitList) - 1], "PL0000")Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ・APIを利用可能にする設定
AZ_DeleteAllRegion(0)- ・リージョンマーカーを削除
itemList = AZ_GetSelectedMediaItemList(0)- ・選択メディアを配列出力
color = AZ_GetRandomColor()[0]- ・ランダム色を取得
# Region setting for item in itemList:- ・選択メディアのリストをForループ
startPos = AZ_GetMediaItemStartTimeSeconds(item)[1]- ・選択メディアの開始位置(秒)を取得
endPos = AZ_GetMediaItemEndTime(item)[1]- ・選択メディアの終了位置(秒)を取得
name = AZ_GetMediaItemName(item)[1]- ・選択メディアの名前を取得
AZ_AddRegionMarker(0, startPos, endPos, name, 0, color)- ・リージョンを追加して各種情報を基に設定
# render setting renderPath = AZ_SetResoucePathFolder("AZData/Render", 0)[2]- ・レンダーファイルのパスのフルパス情報を取得
renderFileName = "render"- ・取得するファイル名を設定
jsonStr = AZ_ReadFile(renderPath, renderFileName + ".txt")[2]- ・テキストファイルを取得して中身を文字列に変換
render = AZ_Json_Deserialize(jsonStr)- ・文字列変換したものを利用できる配列に切り替え
path = AZ_SetProjectPathFolder("Rec", 3)[2]- ・プロジェクトのリソースフォルダに専用パスを設定 ※日時分秒が設定されるため常に新しいフォルダが生成されます。
- render["OutputDir"] = path ・書き出しレンダーにパスを改めて設定
- # render fileList = AZ_RenderToAudioFile(0, render)[0] ・書き出しを行い、書き出したパス情報を取得
if AZ_Wwise_Connect("127.0.0.1", 8080)[0]:- ・Wwiseにコネクト対応
parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"- ・追加したい親のパスを設定
workunit = AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")- ・「PL0000」ワークユニットを作成
mixer = AZ_Wwise_CreateActorMixer(workunit["Path"], "pl0000")- ・「pl0000」アクターミキサーを作成
container = AZ_Wwise_CreateContainer(mixer["ID"], AZ_Wwise_ContainerType_Blend(),"pl0000_az")- ・作成したアクターミキサーの以下にブレンドコンテナを生成
- for filePath in fileList: ・書き出したファイルリスト分Forループ
splitList = AZ_GetStringSplitList(filePath, "\\")- ・フルパスから階層で配列に切り出す対応
wwiseObj = AZ_Wwise_CreateSoundSFX(container["ID"], filePath, splitList[len(splitList) - 1], "PL0000")- ・サウンドSFXを生成してファイル名を設定 ※splitList[#splitList]これにより、フルパス情報から最後の波形名を取得することができます。
Screens
APIs used
- AZ_DeleteAllRegion
- AZ_GetSelectedMediaItemList
- AZ_GetRandomColor
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemEndTime
- AZ_GetMediaItemName
- AZ_AddRegionMarker
- AZ_SetResoucePathFolder
- AZ_ReadFile
- AZ_Json_Deserialize
- AZ_SetProjectPathFolder
- AZ_RenderToAudioFile
- AZ_Wwise_Connect
- AZ_Wwise_CreateWorkUnit
- AZ_Wwise_CreateActorMixer
- AZ_Wwise_CreateContainer
- AZ_GetStringSplitList
- AZ_Wwise_CreateSoundSFX
AZSTOKE_Wwise_FullAuto_Event_2Added automation function for event generation - Improved version 1 -Before you run it
書き出ししたいファイルをReaperプロジェクト内に並べておく Renderの書き出し用ファイルを生成しておく ※Renderの設定ファイルの書き出し方法はこちら
Script
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() endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ・RIGDOCKSを利用可能にする対応
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- ・Wwiseへコネクト
parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"- ・ワークユニットを作りたい親のパスを設定
workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")- ・PL0000のワークユニットを生成
mixer = reaper.AZ_Wwise_CreateActorMixer(workunit.Path,"pl0000")- ・pl0000のアクターミキサーを生成
container = reaper.AZ_Wwise_CreateContainer(mixer.ID,reaper.AZ_Wwise_ContainerType_Blend(),"pl0000_az")- ・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")- ・ブレンドコンテナ内にSFXを生成してファイル名を入れる
endparentPath = "\\Events"- ・Event生成用の親パスを設定
workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")- ・PL0000ワークユニットを生成
reaper.AZ_Wwise_CreateEvent(workunit.ID,container.Name,1,container.ID)- ・ワークユニットの以下にEventを生成してブレンドコンテナをPlayで設定
reaper.AZ_Wwise_Disconnect()- ・Wwiseコネクトを外す end
Screens
APIs used
- AZ_DeleteAllRegion
- AZ_GetSelectedMediaItemList
- AZ_GetRandomColor
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemEndTime
- AZ_GetMediaItemName
- AZ_AddRegionMarker
- AZ_SetResoucePathFolder
- AZ_ReadFile
- AZ_Json_Deserialize
- AZ_SetProjectPathFolder
- AZ_RenderToAudioFile
- AZ_Wwise_Connect
- AZ_Wwise_CreateWorkUnit
- AZ_Wwise_CreateActorMixer
- AZ_Wwise_CreateContainer
- AZ_GetStringSplitList
- AZ_Wwise_CreateSoundSFX
- AZ_Wwise_CreateEvent
- AZ_Wwise_Disconnect
Before you run it
書き出ししたいファイルをReaperプロジェクト内に並べておく Renderの書き出し用ファイルを生成しておく ※Renderの設定ファイルの書き出し方法はこちら
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * AZ_DeleteAllRegion(0) itemList = AZ_GetSelectedMediaItemList(0) color = AZ_GetRandomColor()[0] # Region setting for item in itemList: startPos = AZ_GetMediaItemStartTimeSeconds(item)[1] endPos = AZ_GetMediaItemEndTime(item)[1] name = AZ_GetMediaItemName(item)[1] AZ_AddRegionMarker(0, startPos, endPos, name, 0, color) # render setting renderPath = AZ_SetResoucePathFolder("AZData//Render",0)[2] renderFileName = "render" jsonStr = AZ_ReadFile(renderPath, renderFileName + ".txt")[2] render = AZ_Json_Deserialize(jsonStr) path = AZ_SetProjectPathFolder("Rec",3)[2] render["OutputDir"] = path # render fileList = AZ_RenderToAudioFile(0,render)[0] if AZ_Wwise_Connect("127.0.0.1", 8080)[0]: parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit" workunit = AZ_Wwise_CreateWorkUnit(parentPath, "PL0000") mixer = AZ_Wwise_CreateActorMixer(workunit["Path"], "pl0000") container = AZ_Wwise_CreateContainer(mixer["ID"], AZ_Wwise_ContainerType_Blend(), "pl0000_az") for file in fileList: splitList = AZ_GetStringSplitList(file, "\\") wwiseObj = AZ_Wwise_CreateSoundSFX(container["ID"], file, splitList[-1], "PL0000") parentPath = "\\Events" workunit = AZ_Wwise_CreateWorkUnit(parentPath, "PL0000") AZ_Wwise_CreateEvent(workunit["ID"], container["Name"], 1, container["ID"]) AZ_Wwise_Disconnect()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ・RIGDOCKSを利用可能にする対応
AZ_DeleteAllRegion(0)- ・現時点あるリージョンすべてを削除
itemList = AZ_GetSelectedMediaItemList(0)- ・選択メディアのアイテムを配列取得
color = AZ_GetRandomColor()[0]- ・ランダムで色を取得
# Region setting for item in itemList:- ・選択波形分ループ
startPos = AZ_GetMediaItemStartTimeSeconds(item)[1]- ・メディアの開始位置を取得
endPos = AZ_GetMediaItemEndTime(item)[1]- ・メディアの終了位置を取得
name = AZ_GetMediaItemName(item)[1]- ・メディアの名前を取得
AZ_AddRegionMarker(0, startPos, endPos, name, 0, color)- ・取得情報でメディアごとのリージョンを設定
# render setting renderPath = AZ_SetResoucePathFolder("AZData//Render",0)[2]- ・レンダーパスのフルパス情報を取得
renderFileName = "render"- ・レンダーのファイル名を変数として作成
jsonStr = AZ_ReadFile(renderPath, renderFileName + ".txt")[2]- ・レンダーファイルを読み込み
render = AZ_Json_Deserialize(jsonStr)- ・読み込みファイルをレンダーの設定ファイルに変換
path = AZ_SetProjectPathFolder("Rec",3)[2]- ・プロジェクトファイルに書き出し先のフォルダを設定
render["OutputDir"] = path- ・レンダーのアウトプット先を設定
# render fileList = AZ_RenderToAudioFile(0,render)[0]- ・レンダーを実行してパス情報を取得
if AZ_Wwise_Connect("127.0.0.1", 8080)[0]:- ・Wwiseに接続
parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"- ・ワークユニットを作りたい親のパスを設定
workunit = AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")- ・PL0000のワークユニットを生成
mixer = AZ_Wwise_CreateActorMixer(workunit["Path"], "pl0000")- ・pl0000のアクターミキサーを生成
container = AZ_Wwise_CreateContainer(mixer["ID"], AZ_Wwise_ContainerType_Blend(), "pl0000_az")- ・pl0000_azのブレンドコンテナを生成
for file in fileList:- ・ブレンドに登録する書き出しファイルをループ実行
splitList = AZ_GetStringSplitList(file, "\\")- ・フルパス情報から分割
wwiseObj = AZ_Wwise_CreateSoundSFX(container["ID"], file, splitList[-1], "PL0000")- ・ブレンドコンテナ内にSFXを生成してファイル名を入れる
parentPath = "\\Events"- ・Event生成用の親パスを設定
workunit = AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")- ・PL0000ワークユニットを生成
AZ_Wwise_CreateEvent(workunit["ID"], container["Name"], 1, container["ID"])- ・ワークユニットの以下にEventを生成してブレンドコンテナをPlayで設定
AZ_Wwise_Disconnect()- ・Wwiseから切断する
Screens
APIs used
- AZ_DeleteAllRegion
- AZ_GetSelectedMediaItemList
- AZ_GetRandomColor
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemEndTime
- AZ_GetMediaItemName
- AZ_AddRegionMarker
- AZ_SetResoucePathFolder
- AZ_ReadFile
- AZ_Json_Deserialize
- AZ_SetProjectPathFolder
- AZ_RenderToAudioFile
- AZ_Wwise_Connect
- AZ_Wwise_CreateWorkUnit
- AZ_Wwise_CreateActorMixer
- AZ_Wwise_CreateContainer
- AZ_GetStringSplitList
- AZ_Wwise_CreateSoundSFX
- AZ_Wwise_CreateEvent
- AZ_Wwise_Disconnect
AZSTOKE_Wwise_FullAuto_Event_3Add automation to Event action operations - Improved version 2 -Before you run it
書き出ししたいファイルをReaperプロジェクト内に並べておく Renderの書き出し用ファイルを生成しておく ※Renderの設定ファイルの書き出し方法はこちら
Script
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() endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ・RIGDOCKSを利用可能にする対応
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- ・Wwiseへコネクト
parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"- ・ワークユニットを作りたい親のパスを設定
workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")- ・PL0000のワークユニットを生成
mixer = reaper.AZ_Wwise_CreateActorMixer(workunit.Path,"pl0000")- ・pl0000のアクターミキサーを生成
container = reaper.AZ_Wwise_CreateContainer(mixer.ID,reaper.AZ_Wwise_ContainerType_Blend(),"pl0000_az")- ・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")- ・ブレンドコンテナ内にSFXを生成してファイル名を入れる
endparentPath = "\\Events"- ・Event生成用の親パスを設定
workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")- ・PL0000ワークユニットを生成
event = reaper.AZ_Wwise_CreateEvent(workunit.ID,container.Name,2,container.ID)- ・ワークユニットの以下にEventを生成してブレンドコンテナをStopで設定
reaper.AZ_Wwise_AddActionToEvent(event.ID,1,container.ID)- ・追加したイベントにさらにPlayのコンテナを追加
reaper.AZ_Wwise_Disconnect()- ・Wwiseコネクトを外す end
Screens
APIs used
- AZ_DeleteAllRegion
- AZ_GetSelectedMediaItemList
- AZ_GetRandomColor
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemEndTime
- AZ_GetMediaItemName
- AZ_AddRegionMarker
- AZ_SetResoucePathFolder
- AZ_ReadFile
- AZ_Json_Deserialize
- AZ_SetProjectPathFolder
- AZ_RenderToAudioFile
- AZ_Wwise_Connect
- AZ_Wwise_CreateWorkUnit
- AZ_Wwise_CreateActorMixer
- AZ_Wwise_CreateContainer
- AZ_GetStringSplitList
- AZ_Wwise_CreateSoundSFX
- AZ_Wwise_CreateEvent
- AZ_Wwise_AddActionToEvent
- AZ_Wwise_Disconnect
Before you run it
書き出ししたいファイルをReaperプロジェクト内に並べておく Renderの書き出し用ファイルを生成しておく ※Renderの設定ファイルの書き出し方法はこちら
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * AZ_DeleteAllRegion(0) itemList = AZ_GetSelectedMediaItemList(0) color = AZ_GetRandomColor()[0] # Region setting for item in itemList: startPos = AZ_GetMediaItemStartTimeSeconds(item)[1] endPos = AZ_GetMediaItemEndTime(item)[1] name = AZ_GetMediaItemName(item)[1] AZ_AddRegionMarker(0, startPos, endPos, name, 0, color) # render setting renderPath = AZ_SetResoucePathFolder("AZData//Render",0)[2] renderFileName = "render" jsonStr = AZ_ReadFile(renderPath, renderFileName + ".txt")[2] render = AZ_Json_Deserialize(jsonStr) path = AZ_SetProjectPathFolder("Rec",3)[2] render["OutputDir"] = path # render fileList = AZ_RenderToAudioFile(0,render)[0] if AZ_Wwise_Connect("127.0.0.1", 8080): parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit" workunit = AZ_Wwise_CreateWorkUnit(parentPath, "PL0000") mixer = AZ_Wwise_CreateActorMixer(workunit["Path"], "pl0000") container = AZ_Wwise_CreateContainer(mixer["ID"], AZ_Wwise_ContainerType_Blend(), "pl0000_az") for file in fileList: splitList = AZ_GetStringSplitList(file, "\\") wwiseObj = AZ_Wwise_CreateSoundSFX(container["ID"], file, splitList[-1], "PL0000") parentPath = "\\Events" workunit = AZ_Wwise_CreateWorkUnit(parentPath, "PL0000") event = AZ_Wwise_CreateEvent(workunit["ID"], container["Name"], 2, container["ID"]) AZ_Wwise_AddActionToEvent(event["ID"], 1, container["ID"]) AZ_Wwise_Disconnect()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ・RIGDOCKSを利用可能にする対応
AZ_DeleteAllRegion(0)- ・現時点あるリージョンすべてを削除
itemList = AZ_GetSelectedMediaItemList(0)- ・選択メディアのアイテムを配列取得
color = AZ_GetRandomColor()[0]- ・ランダムで色を取得
# Region setting for item in itemList:- ・選択波形分ループ
startPos = AZ_GetMediaItemStartTimeSeconds(item)[1]- ・メディアの開始位置を取得
endPos = AZ_GetMediaItemEndTime(item)[1]- ・メディアの終了位置を取得
name = AZ_GetMediaItemName(item)[1]- ・メディアの名前を取得
AZ_AddRegionMarker(0, startPos, endPos, name, 0, color)- ・取得情報でメディアごとのリージョンを設定
# render setting renderPath = AZ_SetResoucePathFolder("AZData//Render",0)[2]- ・レンダーパスのフルパス情報を取得
- renderFileName = "render" ・レンダーのファイル名を変数として作成
jsonStr = AZ_ReadFile(renderPath, renderFileName + ".txt")[2]- ・レンダーファイルを読み込み
render = AZ_Json_Deserialize(jsonStr)- ・読み込みファイルをレンダーの設定ファイルに変換
path = AZ_SetProjectPathFolder("Rec",3)[2]- ・プロジェクトファイルに書き出し先のフォルダを設定
render["OutputDir"] = path- ・レンダーのアウトプット先を設定
# render fileList = AZ_RenderToAudioFile(0,render)[0]- ・レンダーを実行してパス情報を取得
if AZ_Wwise_Connect("127.0.0.1", 8080):- ・Wwiseへ接続
parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"- ・ワークユニットを作りたい親のパスを設定
workunit = AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")- ・PL0000のワークユニットを生成
mixer = AZ_Wwise_CreateActorMixer(workunit["Path"], "pl0000")- ・pl0000のアクターミキサーを生成
container = AZ_Wwise_CreateContainer(mixer["ID"], AZ_Wwise_ContainerType_Blend(), "pl0000_az")- ・pl0000_azのブレンドコンテナを生成
for file in fileList:- ・ブレンドに登録する書き出しファイルをループ実行
splitList = AZ_GetStringSplitList(file, "\\")- ・フルパス情報から分割
wwiseObj = AZ_Wwise_CreateSoundSFX(container["ID"], file, splitList[-1], "PL0000")- ・ブレンドコンテナ内にSFXを生成してファイル名を入れる
parentPath = "\\Events"- ・Event生成用の親パスを設定
workunit = AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")- ・PL0000ワークユニットを生成
event = AZ_Wwise_CreateEvent(workunit["ID"], container["Name"], 2, container["ID"])- ・ワークユニットの以下にEventを生成してブレンドコンテナをStopで設定
AZ_Wwise_AddActionToEvent(event["ID"], 1, container["ID"])- ・追加したイベントにさらにPlayのコンテナを追加
AZ_Wwise_Disconnect()- ・Wwiseから切断する
Screens
APIs used
- AZ_DeleteAllRegion
- AZ_GetSelectedMediaItemList
- AZ_GetRandomColor
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemEndTime
- AZ_GetMediaItemName
- AZ_AddRegionMarker
- AZ_SetResoucePathFolder
- AZ_ReadFile
- AZ_Json_Deserialize
- AZ_SetProjectPathFolder
- AZ_RenderToAudioFile
- AZ_Wwise_Connect
- AZ_Wwise_CreateWorkUnit
- AZ_Wwise_CreateActorMixer
- AZ_Wwise_CreateContainer
- AZ_GetStringSplitList
- AZ_Wwise_CreateSoundSFX
- AZ_Wwise_CreateEvent
- AZ_Wwise_AddActionToEvent
- AZ_Wwise_Disconnect
AZSTOKE_Wwise_FullAuto_Bank_4Automated Bank Creation and Linking - Improved Version 3 -Before you run it
書き出ししたいファイルをReaperプロジェクト内に並べておく Renderの書き出し用ファイルを生成しておく ※Renderの設定ファイルの書き出し方法はこちら
Script
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() endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ・RIGDOCKSを利用可能にする対応
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- ・Wwiseへコネクト
parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"- ・ワークユニットを作りたい親のパスを設定
workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")- ・PL0000のワークユニットを生成
mixer = reaper.AZ_Wwise_CreateActorMixer(workunit.Path,"pl0000")- ・pl0000のアクターミキサーを生成
container = reaper.AZ_Wwise_CreateContainer(mixer.ID,reaper.AZ_Wwise_ContainerType_Blend(),"pl0000_az")- ・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")- ・ブレンドコンテナ内にSFXを生成してファイル名を入れる
endparentPath = "\\Events"- ・Event生成用の親パスを設定
workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")- ・PL0000ワークユニットを生成
event = reaper.AZ_Wwise_CreateEvent(workunit.ID,container.Name,2,container.ID)- ・ワークユニットの以下にEventを生成してブレンドコンテナをStopで設定
reaper.AZ_Wwise_AddActionToEvent(event.ID,1,container.ID)- ・追加したイベントにさらにPlayのコンテナを追加
parentPath = "\\SoundBanks\\Default Work Unit"- ・サウンドバンクのパスを設定
soundBank = reaper.AZ_Wwise_CreateObject(parentPath, "AZ_Bank", "SoundBank")- ・[AZ_Bank]のバンクをパスに生成
reaper.AZ_Wwise_AddObjectToSoundBank(soundBank.ID, workunit.ID)- ・バンクにイベントがあるワークユニットを設定
reaper.AZ_Wwise_Disconnect()- ・Wwiseコネクトを外す対応
end
Screens
APIs used
- AZ_DeleteAllRegion
- AZ_GetSelectedMediaItemList
- AZ_GetRandomColor
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemEndTime
- AZ_GetMediaItemName
- AZ_AddRegionMarker
- AZ_SetResoucePathFolder
- AZ_ReadFile
- AZ_Json_Deserialize
- AZ_SetProjectPathFolder
- AZ_RenderToAudioFile
- AZ_Wwise_Connect
- AZ_Wwise_CreateWorkUnit
- AZ_Wwise_CreateActorMixer
- AZ_Wwise_CreateContainer
- AZ_GetStringSplitList
- AZ_Wwise_CreateSoundSFX
- AZ_Wwise_CreateEvent
- AZ_Wwise_AddActionToEvent
- AZ_Wwise_CreateObject
- AZ_Wwise_AddObjectToSoundBank
- AZ_Wwise_Disconnect
Before you run it
書き出ししたいファイルをReaperプロジェクト内に並べておく Renderの書き出し用ファイルを生成しておく ※Renderの設定ファイルの書き出し方法はこちら
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * AZ_DeleteAllRegion(0) itemList = AZ_GetSelectedMediaItemList(0) color = AZ_GetRandomColor()[0] # Region setting for item in itemList: startPos = AZ_GetMediaItemStartTimeSeconds(item)[1] endPos = AZ_GetMediaItemEndTime(item)[1] name = AZ_GetMediaItemName(item)[1] AZ_AddRegionMarker(0, startPos, endPos, name, 0, color) # render setting renderPath = AZ_SetResoucePathFolder("AZData//Render",0)[2] renderFileName = "render" jsonStr = AZ_ReadFile(renderPath, renderFileName + ".txt")[2] render = AZ_Json_Deserialize(jsonStr) path = AZ_SetProjectPathFolder("Rec",3)[2] render["OutputDir"] = path # render fileList = AZ_RenderToAudioFile(0,render)[0] if AZ_Wwise_Connect("127.0.0.1", 8080)[0]: parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit" workunit = AZ_Wwise_CreateWorkUnit(parentPath, "PL0000") mixer = AZ_Wwise_CreateActorMixer(workunit["Path"], "pl0000") container = AZ_Wwise_CreateContainer(mixer["ID"], AZ_Wwise_ContainerType_Blend(), "pl0000_az") for file in fileList: splitList = AZ_GetStringSplitList(file, "\\") wwiseObj = AZ_Wwise_CreateSoundSFX(container["ID"], file, splitList[-1], "PL0000") parentPath = "\\Events" workunit = AZ_Wwise_CreateWorkUnit(parentPath, "PL0000") event = AZ_Wwise_CreateEvent(workunit["ID"], container["Name"], 2, container["ID"]) AZ_Wwise_AddActionToEvent(event["ID"], 1, container["ID"]) parentPath = "\\SoundBanks\\Default Work Unit" soundBank = AZ_Wwise_CreateObject(parentPath, "AZ_Bank", "SoundBank") AZ_Wwise_AddObjectToSoundBank(soundBank["ID"], workunit["ID"]) AZ_Wwise_Disconnect()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ・RIGDOCKSを利用可能にする対応
AZ_DeleteAllRegion(0)- ・現時点あるリージョンすべてを削除
itemList = AZ_GetSelectedMediaItemList(0)- ・選択メディアのアイテムを配列取得
color = AZ_GetRandomColor()[0]- ・ランダムで色を取得
# Region setting for item in itemList:- ・選択波形分ループ
startPos = AZ_GetMediaItemStartTimeSeconds(item)[1]- ・メディアの開始位置を取得
endPos = AZ_GetMediaItemEndTime(item)[1]- ・メディアの終了位置を取得
name = AZ_GetMediaItemName(item)[1]- ・メディアの名前を取得
AZ_AddRegionMarker(0, startPos, endPos, name, 0, color)- ・取得情報でメディアごとのリージョンを設定
- # render setting renderPath = AZ_SetResoucePathFolder("AZData//Render",0)[2] ・レンダーパスのフルパス情報を取得
- renderFileName = "render" ・レンダーのファイル名を変数として作成
jsonStr = AZ_ReadFile(renderPath, renderFileName + ".txt")[2]- ・レンダーファイルを読み込み
render = AZ_Json_Deserialize(jsonStr)- ・読み込みファイルをレンダーの設定ファイルに変換
path = AZ_SetProjectPathFolder("Rec",3)[2]- ・プロジェクトファイルに書き出し先のフォルダを設定
render["OutputDir"] = path- ・レンダーのアウトプット先を設定
# render fileList = AZ_RenderToAudioFile(0,render)[0]- ・レンダーを実行してパス情報を取得
if AZ_Wwise_Connect("127.0.0.1", 8080)[0]:- ・Wwiseに接続
parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"- ・ワークユニットを作りたい親のパスを設定
workunit = AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")- ・PL0000のワークユニットを生成
mixer = AZ_Wwise_CreateActorMixer(workunit["Path"], "pl0000")- ・pl0000のアクターミキサーを生成
container = AZ_Wwise_CreateContainer(mixer["ID"], AZ_Wwise_ContainerType_Blend(), "pl0000_az")- ・pl0000_azのブレンドコンテナを生成
for file in fileList:- ・ブレンドに登録する書き出しファイルをループ実行
splitList = AZ_GetStringSplitList(file, "\\")- ・フルパス情報から分割
wwiseObj = AZ_Wwise_CreateSoundSFX(container["ID"], file, splitList[-1], "PL0000")- ・ブレンドコンテナ内にSFXを生成してファイル名を入れる
parentPath = "\\Events"- ・Event生成用の親パスを設定
workunit = AZ_Wwise_CreateWorkUnit(parentPath, "PL0000")- ・PL0000ワークユニットを生成
event = AZ_Wwise_CreateEvent(workunit["ID"], container["Name"], 2, container["ID"])- ・ワークユニットの以下にEventを生成してブレンドコンテナをStopで設定
AZ_Wwise_AddActionToEvent(event["ID"], 1, container["ID"])- ・追加したイベントにさらにPlayのコンテナを追加
parentPath = "\\SoundBanks\\Default Work Unit"- ・サウンドバンクのパスを設定
soundBank = AZ_Wwise_CreateObject(parentPath, "AZ_Bank", "SoundBank")- ・[AZ_Bank]のバンクをパスに生成
AZ_Wwise_AddObjectToSoundBank(soundBank["ID"], workunit["ID"])- ・バンクにイベントがあるワークユニットを設定
AZ_Wwise_Disconnect()- ・Wwiseから切断
Screens
APIs used
- AZ_DeleteAllRegion
- AZ_GetSelectedMediaItemList
- AZ_GetRandomColor
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemEndTime
- AZ_GetMediaItemName
- AZ_AddRegionMarker
- AZ_SetResoucePathFolder
- AZ_ReadFile
- AZ_Json_Deserialize
- AZ_SetProjectPathFolder
- AZ_RenderToAudioFile
- AZ_Wwise_Connect
- AZ_Wwise_CreateWorkUnit
- AZ_Wwise_CreateActorMixer
- AZ_Wwise_CreateContainer
- AZ_GetStringSplitList
- AZ_Wwise_CreateSoundSFX
- AZ_Wwise_CreateEvent
- AZ_Wwise_AddActionToEvent
- AZ_Wwise_CreateObject
- AZ_Wwise_AddObjectToSoundBank
- AZ_Wwise_Disconnect
AZSTOKE_Wwise_FullAuto_Bank_5Automate SoundBank Generate - improved version 4 -Before you run it
書き出ししたいファイルをReaperプロジェクト内に並べておく
Script
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() endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ・RIGDOCKSをインポート
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- ・Wwiseへ接続
parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"- ・ワークユニットを作りたい親のパスを設定
workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000", true)- ・PL0000のワークユニットを生成
mixer = reaper.AZ_Wwise_CreateActorMixer(workunit["Path"], "pl0000", true)- ・pl0000のアクターミキサーを生成
container = reaper.AZ_Wwise_CreateContainer(mixer["ID"], reaper.AZ_Wwise_ContainerType_Blend(), "pl0000_az", true)- ・pl0000_azのブレンドコンテナを生成
for i, filePath in pairs(fileList) do- ・Reaperで書き出したファイルごとに実行
fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]- ・ファイル名を取得
wwiseObj = reaper.AZ_Wwise_CreateSoundSFX(container["ID"], filePath, fileName, "PL0000", true)- ・ファイル名と同名のサウンドSFXオブジェクトを作成
endparentPath = "\\Events"- ・Event生成用の親パスを設定
workunit = reaper.AZ_Wwise_CreateWorkUnit(parentPath, "PL0000", true)- ・PL0000ワークユニットを生成
reaper.AZ_Wwise_DeleteObject(workunit["Path"] .. "\\" .. container["Name"])- ・同名のイベントがあれば削除する
event = reaper.AZ_Wwise_CreateEvent(workunit["ID"], container["Name"], 2, container["ID"])- ・ワークユニットの以下にEventを生成してブレンドコンテナのStopアクションを設定
reaper.AZ_Wwise_AddActionToEvent(event["ID"], 1, container["ID"])- ・追加したイベントにブレンドコンテナのPlayアクションを追加
parentPath = "\\SoundBanks\\Default Work Unit"- ・サウンドバンクのパスを設定
soundBank = reaper.AZ_Wwise_CreateObject(parentPath, "AZ_Bank", "SoundBank", true)- ・[AZ_Bank]のバンクを生成
reaper.AZ_Wwise_AddObjectToSoundBank(soundBank["ID"], workunit["ID"])- ・バンクにイベントの親ワークユニットを追加
reaper.AZ_Wwise_GenerateSoundBank({soundBank["Name"]}, {"Windows"}, {"Japanese"})- ・サウンドバンクを生成
reaper.AZ_Wwise_Disconnect()- ・Wwiseから切断
end
Screens
APIs used
- AZ_DeleteAllRegion
- AZ_GetSelectedMediaItemList
- AZ_GetRandomColor
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemEndTime
- AZ_GetMediaItemName
- AZ_AddRegionMarker
- AZ_SetProjectPathFolder
- AZ_RenderToAudioFile
- AZ_Wwise_Connect
- AZ_Wwise_CreateWorkUnit
- AZ_Wwise_CreateActorMixer
- AZ_Wwise_CreateContainer
- AZ_Wwise_ContainerType
- AZ_GetPathInfo
- AZ_Wwise_CreateSoundSFX
- AZ_Wwise_DeleteObject
- AZ_Wwise_CreateEvent
- AZ_Wwise_AddActionToEvent
- AZ_Wwise_AddObjectToSoundBank
- AZ_Wwise_GenerateSoundBank
- AZ_Wwise_Disconnect
Before you run it
書き出ししたいファイルをReaperプロジェクト内に並べておく
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * AZ_DeleteAllRegion(0) itemList = AZ_GetSelectedMediaItemList(0) color = AZ_GetRandomColor()[0] # Region setting for item in itemList: startPos = AZ_GetMediaItemStartTimeSeconds(item)[1] endPos = AZ_GetMediaItemEndTime(item)[1] name = AZ_GetMediaItemName(item)[1] AZ_AddRegionMarker(0, startPos, endPos, name, 0, color) # render setting renderPath = AZ_SetResoucePathFolder("AZData\Render",0)[2] renderFileName = "render" jsonStr = AZ_ReadFile(renderPath, renderFileName + ".txt")[2] render = AZ_Json_Deserialize(jsonStr) path = AZ_SetProjectPathFolder("Rec",3)[2] # render fileList = AZ_RenderToAudioFile(0, render)[0] if AZ_Wwise_Connect("127.0.0.1", 8080): parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit" workunit = AZ_Wwise_CreateWorkUnit(parentPath, "PL0000", True) mixer = AZ_Wwise_CreateActorMixer(workunit["Path"], "pl0000", True) container = AZ_Wwise_CreateContainer(mixer["ID"], AZ_Wwise_ContainerType_Blend(), "pl0000_az", True) for file in fileList: splitList = AZ_GetStringSplitList(file, "\\") fileNameWithExt = splitList[-1] fileName = AZ_GetStringSplitList(fileNameWithExt, ".")[0] wwiseObj = AZ_Wwise_CreateSoundSFX(container["ID"], file, fileName, "PL0000", True) parentPath = "\\Events" workunit = AZ_Wwise_CreateWorkUnit(parentPath, "PL0000", True) AZ_Wwise_DeleteObject(workunit["Path"] + "\\" + container["Name"]) event = AZ_Wwise_CreateEvent(workunit["ID"], container["Name"], 2, container["ID"]) AZ_Wwise_AddActionToEvent(event["ID"], 1, container["ID"]) parentPath = "\\SoundBanks\\Default Work Unit" soundBank = AZ_Wwise_CreateObject(parentPath, "AZ_Bank", "SoundBank", True) AZ_Wwise_AddObjectToSoundBank(soundBank["ID"], workunit["ID"]) AZ_Wwise_GenerateSoundBank([soundBank["Name"]], ["Windows"], ["Japanese"]) AZ_Wwise_Disconnect()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ・RIGDOCKSをインポート
AZ_DeleteAllRegion(0)- ・現時点あるリージョンすべてを削除
itemList = AZ_GetSelectedMediaItemList(0)- ・選択メディアのアイテムを配列取得
color = AZ_GetRandomColor()[0]- ・ランダムで色を取得
# Region setting for item in itemList:- ・選択波形分、処理を行う
startPos = AZ_GetMediaItemStartTimeSeconds(item)[1]- ・メディアの開始位置を取得
endPos = AZ_GetMediaItemEndTime(item)[1]- ・メディアの終了位置を取得
name = AZ_GetMediaItemName(item)[1]- ・メディアの名前を取得
AZ_AddRegionMarker(0, startPos, endPos, name, 0, color)- ・取得情報でメディアごとのリージョンを設定
# render setting renderPath = AZ_SetResoucePathFolder("AZData\Render",0)[2]- ・プロジェクトファイルに書き出し先のフォルダを設定
renderFileName = "render"jsonStr = AZ_ReadFile(renderPath, renderFileName + ".txt")[2] render = AZ_Json_Deserialize(jsonStr) path = AZ_SetProjectPathFolder("Rec",3)[2]- ・レンダリングの設定を行う
# render fileList = AZ_RenderToAudioFile(0, render)[0]- ・レンダリングを実行してパス情報を取得
if AZ_Wwise_Connect("127.0.0.1", 8080): parentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"- ・ワークユニットを作りたい親のパスを設定
workunit = AZ_Wwise_CreateWorkUnit(parentPath, "PL0000", True)- ・PL0000のワークユニットを生成
mixer = AZ_Wwise_CreateActorMixer(workunit["Path"], "pl0000", True)- ・pl0000のアクターミキサーを生成
container = AZ_Wwise_CreateContainer(mixer["ID"], AZ_Wwise_ContainerType_Blend(), "pl0000_az", True)- ・pl0000_azのブレンドコンテナを生成
for file in fileList: splitList = AZ_GetStringSplitList(file, "\\")- ・Reaperで書き出したファイルごとに実行
fileNameWithExt = splitList[-1] fileName = AZ_GetStringSplitList(fileNameWithExt, ".")[0]- ・ファイル名を取得
wwiseObj = AZ_Wwise_CreateSoundSFX(container["ID"], file, fileName, "PL0000", True)- ・ファイル名と同名のサウンドSFXオブジェクトを作成
parentPath = "\\Events"- ・Event生成用の親パスを設定
workunit = AZ_Wwise_CreateWorkUnit(parentPath, "PL0000", True)- ・PL0000ワークユニットを生成
AZ_Wwise_DeleteObject(workunit["Path"] + "\\" + container["Name"])- ・同名のイベントがあれば削除する
event = AZ_Wwise_CreateEvent(workunit["ID"], container["Name"], 2, container["ID"])- ・ワークユニットの以下にEventを生成してブレンドコンテナのStopアクションを設定
AZ_Wwise_AddActionToEvent(event["ID"], 1, container["ID"])- ・追加したイベントにブレンドコンテナのPlayアクションを追加
parentPath = "\\SoundBanks\\Default Work Unit"- ・サウンドバンクのパスを設定
soundBank = AZ_Wwise_CreateObject(parentPath, "AZ_Bank", "SoundBank", True)- ・[AZ_Bank]のバンクを生成
AZ_Wwise_AddObjectToSoundBank(soundBank["ID"], workunit["ID"])- ・バンクにイベントの親ワークユニットを追加
AZ_Wwise_GenerateSoundBank([soundBank["Name"]], ["Windows"], ["Japanese"])- ・サウンドバンクを生成
AZ_Wwise_Disconnect()- ・Wwiseから切断
Screens
APIs used
- AZ_DeleteAllRegion
- AZ_GetSelectedMediaItemList
- AZ_GetRandomColor
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemEndTime
- AZ_GetMediaItemName
- AZ_AddRegionMarker
- AZ_SetProjectPathFolder
- AZ_RenderToAudioFile
- AZ_Wwise_Connect
- AZ_Wwise_CreateWorkUnit
- AZ_Wwise_CreateActorMixer
- AZ_Wwise_CreateContainer
- AZ_Wwise_ContainerType
- AZ_GetPathInfo
- AZ_Wwise_CreateSoundSFX
- AZ_Wwise_DeleteObject
- AZ_Wwise_CreateEvent
- AZ_Wwise_AddActionToEvent
- AZ_Wwise_AddObjectToSoundBank
- AZ_Wwise_GenerateSoundBank
- AZ_Wwise_Disconnect
AZSTOKE_Wwise_RandomContainer_RandomValue_1Automate creating Random Containers and setting random valuesBefore you run it
書き出ししたいファイルをReaperプロジェクト内に並べておく
Script
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() endLine by line日本語
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"- ・Wwise上でオブジェクトを作成するパスを指定
--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- ・Wwiseへ接続
container = reaper.AZ_Wwise_CreateContainer(containerParentPath, reaper.AZ_Wwise_ContainerType_Random() ,"AZ_se_exp", true)- ・AZ_se_expのランダムコンテナを生成
reaper.AZ_Wwise_SetProperty(container["ID"], "RandomAvoidRepeating", true)- ・ランダムコンテナの「Avoid Repeating last」を有効化する
reaper.AZ_Wwise_SetProperty(container["ID"], "NormalOrShuffle", 0)- ・ランダムコンテナの「Play Type」を「Shuffle」にする
if #fileList >= 4 then reaper.AZ_Wwise_SetProperty(container["ID"], "RandomAvoidRepeatingCount", #fileList - 1) else reaper.AZ_Wwise_SetProperty(container["ID"], "RandomAvoidRepeatingCount", 1) end- ・ランダムコンテナの「Avoid Repeating last」の値を設定する 挿入する音声の数が4以上の場合は{音声数 - 1}の値にする。 音声の数が3以下の場合は1にする
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)- ・ランダムコンテナの「Volume」、「Pitch」、「High-pass filter」、「Low-pass filter」にランダム量を設定する
for i, filePath in pairs(fileList) do- ・Reaperで書き出したファイルごとに実行
fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]- ・ファイル名を取得
sound = reaper.AZ_Wwise_CreateSoundSFX(container["ID"], filePath, fileName, "AZ_se", true)- ・ファイル名と同名のサウンドSFXオブジェクトを作成
endsoundBank = reaper.AZ_Wwise_CreateObject(bankParentPath, "AZ_Bank", "SoundBank", true)- ・[AZ_Bank]のバンクを生成
reaper.AZ_Wwise_RemoveObjectFromSoundBank(soundBank["ID"], eventParentPath .. "\\" .. container["Name"])- ・これから作成するイベントと同名のイベントをサウンドバンクから削除しておく
reaper.AZ_Wwise_DeleteObject(eventParentPath .. "\\" .. container["Name"])- ・同名のイベントがあれば削除する
event = reaper.AZ_Wwise_CreateEvent(eventParentPath, container["Name"], 0)- ・ワークユニットの以下にEventを生成する
reaper.AZ_Wwise_AddActionToEvent(event["ID"], 2, container["ID"])reaper.AZ_Wwise_AddActionToEvent(event["ID"], 1, container["ID"])- ・追加したイベントにランダムコンテナのStopアクションとPlayアクションを追加
parentPath = "\\SoundBanks\\Default Work Unit"reaper.AZ_Wwise_AddObjectToSoundBank(soundBank["ID"], event["Path"])- ・バンクにイベントの親ワークユニットを追加
reaper.AZ_Wwise_SaveProject()- ・プロジェクトを保存
reaper.AZ_Wwise_Disconnect()- ・Wwiseから切断
end
Screens
APIs used
- AZ_SetProjectPathFolder
- AZ_RenderToAudioFile
- AZ_Wwise_Connect
- AZ_Wwise_CreateContainer
- AZ_Wwise_SetProperty
- AZ_Wwise_SetRandomizer
- AZ_GetPathInfo
- AZ_Wwise_CreateSoundSFX
- AZ_Wwise_CreateObject
- AZ_Wwise_RemoveObjectFromSoundBank
- AZ_Wwise_DeleteObject
- AZ_Wwise_CreateEvent
- AZ_Wwise_AddActionToEvent
- AZ_Wwise_SaveProject
- AZ_Wwise_Disconnect
Before you run it
書き出ししたいファイルをReaperプロジェクト内に並べておく
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * containerParentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit" bankParentPath = "\\SoundBanks\\Default Work Unit" eventParentPath = "\\Events\\Default Work Unit" # render setting path = AZ_SetProjectPathFolder("Rec", 3)[2] render = { "OutputDir": path, "Channels": 1, "FileName": "$region", "RenderingRangeType": 5, "SamplingRate": 48000, } # render fileList = AZ_RenderToAudioFile(0, render)[0] if AZ_Wwise_Connect("127.0.0.1", 8080)[0]: # Create RandomContainer container = AZ_Wwise_CreateContainer(containerParentPath, AZ_Wwise_ContainerType_Random(), "AZ_se_exp", True) AZ_Wwise_SetProperty(container["ID"], "RandomAvoidRepeating", True) AZ_Wwise_SetProperty(container["ID"], "NormalOrShuffle", 0) if len(fileList) >= 4: AZ_Wwise_SetProperty(container["ID"], "RandomAvoidRepeatingCount", len(fileList) - 1) else: AZ_Wwise_SetProperty(container["ID"], "RandomAvoidRepeatingCount", 1) # Set Random AZ_Wwise_SetRandomizer(container["ID"], "Volume", True, -2.5, 1.5) AZ_Wwise_SetRandomizer(container["ID"], "Pitch", True, -0.4, 0.6) AZ_Wwise_SetRandomizer(container["ID"], "Highpass", True, 0, 20) AZ_Wwise_SetRandomizer(container["ID"], "Lowpass", True, 0, 20) for filePath in fileList: info = AZ_GetPathInfo(filePath) fileName = AZ_GetPathInfo(filePath)["FileNameWithoutExtension"] sound = AZ_Wwise_CreateSoundSFX(container["ID"], filePath, fileName, "AZ_se", True) # Clear Soundbank soundBank = AZ_Wwise_CreateObject(bankParentPath, "AZ_Bank", "SoundBank", True) AZ_Wwise_RemoveObjectFromSoundBank(soundBank["ID"], eventParentPath + "\\" + container["Name"]) # Create Event AZ_Wwise_DeleteObject(eventParentPath + "\\" + container["Name"]) event = AZ_Wwise_CreateEvent(eventParentPath, container["Name"], 0) AZ_Wwise_AddActionToEvent(event["ID"], 2, container["ID"]) AZ_Wwise_AddActionToEvent(event["ID"], 1, container["ID"]) # Set Soundbank AZ_Wwise_AddObjectToSoundBank(soundBank["ID"], event["Path"]) AZ_Wwise_SaveProject() AZ_Wwise_Disconnect()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *containerParentPath = "\\Actor-Mixer Hierarchy\\Default Work Unit" bankParentPath = "\\SoundBanks\\Default Work Unit" eventParentPath = "\\Events\\Default Work Unit"- ・Wwise上でオブジェクトを作成するパスを指定
# render setting path = AZ_SetProjectPathFolder("Rec", 3)[2]- ・プロジェクトファイルに書き出し先のフォルダを設定
render = { "OutputDir": path, "Channels": 1, "FileName": "$region", "RenderingRangeType": 5, "SamplingRate": 48000, }- ・レンダリングの設定を行う
# render fileList = AZ_RenderToAudioFile(0, render)[0]- ・レンダリングを実行してパス情報を取得
if AZ_Wwise_Connect("127.0.0.1", 8080)[0]:- ・Wwiseへ接続
# Create RandomContainer container = AZ_Wwise_CreateContainer(containerParentPath, AZ_Wwise_ContainerType_Random(), "AZ_se_exp", True)- ・ランダムコンテナの「Avoid Repeating last」を有効化する
- ・AZ_se_expのランダムコンテナを生成
AZ_Wwise_SetProperty(container["ID"], "RandomAvoidRepeating", True) AZ_Wwise_SetProperty(container["ID"], "NormalOrShuffle", 0)- ・ランダムコンテナの「Play Type」を「Shuffle」にする
if len(fileList) >= 4: AZ_Wwise_SetProperty(container["ID"], "RandomAvoidRepeatingCount", len(fileList) - 1) else: AZ_Wwise_SetProperty(container["ID"], "RandomAvoidRepeatingCount", 1)- ・ランダムコンテナの「Avoid Repeating last」の値を設定する 挿入する音声の数が4以上の場合は{音声数 - 1}の値にする。 音声の数が3以下の場合は1にする
# Set Random AZ_Wwise_SetRandomizer(container["ID"], "Volume", True, -2.5, 1.5) AZ_Wwise_SetRandomizer(container["ID"], "Pitch", True, -0.4, 0.6) AZ_Wwise_SetRandomizer(container["ID"], "Highpass", True, 0, 20) AZ_Wwise_SetRandomizer(container["ID"], "Lowpass", True, 0, 20)- ・ランダムコンテナの「Volume」、「Pitch」、「High-pass filter」、「Low-pass filter」にランダム量を設定する
for filePath in fileList:- ・Reaperで書き出したファイルごとに実行
info = AZ_GetPathInfo(filePath) fileName = AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]- ・ファイル名を取得
sound = AZ_Wwise_CreateSoundSFX(container["ID"], filePath, fileName, "AZ_se", True)- ・ファイル名と同名のサウンドSFXオブジェクトを作成
# Clear Soundbank soundBank = AZ_Wwise_CreateObject(bankParentPath, "AZ_Bank", "SoundBank", True)- ・[AZ_Bank]のバンクを生成
AZ_Wwise_RemoveObjectFromSoundBank(soundBank["ID"], eventParentPath + "\\" + container["Name"])- ・これから作成するイベントと同名のイベントをサウンドバンクから削除しておく
# Create Event AZ_Wwise_DeleteObject(eventParentPath + "\\" + container["Name"])- ・同名のイベントがあれば削除する
event = AZ_Wwise_CreateEvent(eventParentPath, container["Name"], 0)- ・ワークユニットの以下にEventを生成する
AZ_Wwise_AddActionToEvent(event["ID"], 2, container["ID"]) AZ_Wwise_AddActionToEvent(event["ID"], 1, container["ID"])- ・追加したイベントにランダムコンテナのStopアクションとPlayアクションを追加
# Set Soundbank AZ_Wwise_AddObjectToSoundBank(soundBank["ID"], event["Path"])- ・バンクにイベントの親ワークユニットを追加
AZ_Wwise_SaveProject()- ・プロジェクトを保存
AZ_Wwise_Disconnect()- ・Wwiseから切断
Screens
APIs used
- AZ_SetProjectPathFolder
- AZ_RenderToAudioFile
- AZ_Wwise_Connect
- AZ_Wwise_CreateContainer
- AZ_Wwise_SetProperty
- AZ_Wwise_SetRandomizer
- AZ_GetPathInfo
- AZ_Wwise_CreateSoundSFX
- AZ_Wwise_CreateObject
- AZ_Wwise_RemoveObjectFromSoundBank
- AZ_Wwise_DeleteObject
- AZ_Wwise_CreateEvent
- AZ_Wwise_AddActionToEvent
- AZ_Wwise_SaveProject
- AZ_Wwise_Disconnect
AZSTOKE_Wwise_CreateFromTemplete_1Create object structures from a templateBefore you run it
書き出ししたいファイルをReaperプロジェクト内に並べておく
Script
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()Line by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ・RIGDOCKSをインポート
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- ・Wwiseへ接続 失敗時は処理を終了する
-- Acter-Mixer Hierarchy rootPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"- ・Wwise上のActor-Mixer Hierarchyのパスを指定
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)- ・テンプレートをコピーしてキャラクター名のActor-Mixer Hierarchyを生成
-- Events rootPath = "\\Events\\Default Work Unit"- ・Wwise上のEventsのパスを指定
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- ・Reaperで書き出したファイルごとに実行
fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]- ・ファイル名を取得
voiceType = string.sub(fileName, 1, 3)- ・ファイル名の先頭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"- ・それ以外のボイスの場合、イベント用ボイス用のパスを指定
endsound = reaper.AZ_Wwise_CreateSoundSFX(type_MixerPath, filePath, fileName, characterName, true)- ・ファイル名と同名のサウンドSFXオブジェクトを指定のパスに作成
reaper.AZ_Wwise_DeleteObject(type_EventFolderPath .. "\\" .. sound["Name"]) event = reaper.AZ_Wwise_CreateEvent(type_EventFolderPath, sound["Name"], -1)- ・同名のイベントがあれば削除してから、サウンドSFXと同名のイベントを指定のパスに生成
reaper.AZ_Wwise_AddActionToEvent(event["ID"], 2, sound["ID"]) reaper.AZ_Wwise_AddActionToEvent(event["ID"], 1, sound["ID"])- ・追加したイベントにサウンドSFXのStopアクションとPlayアクションを追加
endreaper.AZ_Wwise_SaveProject()- ・プロジェクトを保存
reaper.AZ_Wwise_Disconnect()- ・Wwiseから切断
reaper.AZ_ShowMessageBox_Info("Success!", "", reaper.AZ_WindowType_OK())- ・完了のメッセージを表示
return- ・関数を終了
endMain()- ・Main関数を実行
Screens
APIs used
- AZ_GetUserInputList
- AZ_DeleteAllRegion
- AZ_GetSelectedMediaItemList
- AZ_GetRandomColor
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemEndTime
- AZ_GetMediaItemName
- AZ_AddRegionMarker
- AZ_SetProjectPathFolder
- AZ_RenderToAudioFile
- AZ_Wwise_Connect
- AZ_Wwise_CreateWorkUnit
- AZ_Wwise_CopyObject
- AZ_GetPathInfo
- AZ_Wwise_CreateSoundSFX
- AZ_Wwise_DeleteObject
- AZ_Wwise_CreateEvent
- AZ_Wwise_AddActionToEvent
- AZ_Wwise_SaveProject
- AZ_Wwise_Disconnect
- AZ_ShowMessageBox_Info
Before you run it
書き出ししたいファイルをReaperプロジェクト内に並べておく
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * def Main(): retval, inputList = AZ_GetUserInputList("Character Info", 1, "Character Name", "") if not retval: return characterName = inputList[0] AZ_DeleteAllRegion(0) itemList = AZ_GetSelectedMediaItemList(0) color = AZ_GetRandomColor()[0] #Region setting for item in itemList: startPos = AZ_GetMediaItemStartTimeSeconds(item)[1] endPos = AZ_GetMediaItemEndTime(item)[1] name = AZ_GetMediaItemName(item)[1] AZ_AddRegionMarker(0, startPos, endPos, name, 0, color) #Render setting path = AZ_SetProjectPathFolder("Rec", 3)[2] render = { "OutputDir": path, "Channels": 1, "FileName": "$region", "RenderingRangeType": 5, } # Reander fileList = AZ_RenderToAudioFile(0, render)[0] # Wwise if not AZ_Wwise_Connect("127.0.0.1", 8080)[0]: return # Actor-Mixer Hierarchy rootPath = "\\Actor-Mixer Hierarchy\\Default Work Unit" characterPath = rootPath + "\\Characters" workunit = AZ_Wwise_CreateWorkUnit(characterPath, characterName, True) templatePath = rootPath + "\\Templates\\AZ_vo_tmp" mixer = AZ_Wwise_CopyObject(templatePath, workunit["Path"], characterName, True) # Events rootPath = "\\Events\\Default Work Unit" characterPath = rootPath + "\\Characters" workunit = AZ_Wwise_CreateWorkUnit(characterPath, characterName, True) templatePath = rootPath + "\\Templates\\AZ_vo_tmp" eventFolder = AZ_Wwise_CopyObject(templatePath, workunit["Path"], characterName, True) for filePath in fileList: fileName = AZ_GetPathInfo(filePath)["FileNameWithoutExtension"] voiceType = fileName[:3] type_MixerPath = "" type_EventFolderPath = "" if voiceType == "ACT": type_MixerPath = mixer["Path"] + "\\action" type_EventFolderPath = eventFolder["Path"] + "\\battle" elif voiceType == "DMG": type_MixerPath = mixer["Path"] + "\\damage" type_EventFolderPath = eventFolder["Path"] + "\\battle" else: type_MixerPath = mixer["Path"] + "\\event" type_EventFolderPath = eventFolder["Path"] + "\\senario" sound = AZ_Wwise_CreateSoundSFX(type_MixerPath, filePath, fileName, characterName, True) AZ_Wwise_DeleteObject(type_EventFolderPath + "\\" + sound["Name"]) event = AZ_Wwise_CreateEvent(type_EventFolderPath, sound["Name"], -1) AZ_Wwise_AddActionToEvent(event["ID"], 2, sound["ID"]) AZ_Wwise_AddActionToEvent(event["ID"], 1, sound["ID"]) AZ_Wwise_SaveProject() AZ_Wwise_Disconnect() AZ_ShowMessageBox_Info("Success!", "", AZ_WindowType_OK()) Main()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ・RIGDOCKSをインポート
def Main():- ・メインの処理を記載する関数を定義
retval, inputList = AZ_GetUserInputList("Character Info", 1, "Character Name", "")- ・ユーザー空の入力ダイアログを表示して、キャラクター名を取得
if not retval: return- ・ダイアログがキャンセルされた場合は処理を終了する
characterName = inputList[0]- ・キャラクター名を変数に格納
AZ_DeleteAllRegion(0)- ・プロジェクト内のリージョンを全て削除
itemList = AZ_GetSelectedMediaItemList(0)- ・選択されているアイテムを取得
color = AZ_GetRandomColor()[0]- ・ランダムな色を取得
#Region setting for item in itemList:- ・選択されているアイテムごとに実行
startPos = AZ_GetMediaItemStartTimeSeconds(item)[1] endPos = AZ_GetMediaItemEndTime(item)[1] name = AZ_GetMediaItemName(item)[1] AZ_AddRegionMarker(0, startPos, endPos, name, 0, color)- ・アイテムの位置にリージョンを追加
#Render setting path = AZ_SetProjectPathFolder("Rec", 3)[2]- ・プロジェクトファイルに書き出し先のフォルダを設定
render = { "OutputDir": path, "Channels": 1, "FileName": "$region", "RenderingRangeType": 5, }- ・レンダリングの設定を作成
# Reander fileList = AZ_RenderToAudioFile(0, render)[0]- ・レンダリングを実行してパス情報を取得
# Wwise if not AZ_Wwise_Connect("127.0.0.1", 8080)[0]: return- ・Wwiseへ接続 失敗時は処理を終了する
# Actor-Mixer Hierarchy rootPath = "\\Actor-Mixer Hierarchy\\Default Work Unit"- ・Wwise上のActor-Mixer Hierarchyのパスを指定
characterPath = rootPath + "\\Characters"- ・キャラクター用のフォルダのパスを指定
workunit = AZ_Wwise_CreateWorkUnit(characterPath, characterName, True)- ・キャラクター名のワークユニットを生成
templatePath = rootPath + "\\Templates\\AZ_vo_tmp"- ・テンプレートのパスを指定
mixer = AZ_Wwise_CopyObject(templatePath, workunit["Path"], characterName, True)- ・テンプレートをコピーしてキャラクター名のActor-Mixer Hierarchyを生成
# Events rootPath = "\\Events\\Default Work Unit"- ・Wwise上のEventsのパスを指定
characterPath = rootPath + "\\Characters"- ・キャラクター用のフォルダのパスを指定
workunit = AZ_Wwise_CreateWorkUnit(characterPath, characterName, True)- ・キャラクター名のワークユニットを生成
templatePath = rootPath + "\\Templates\\AZ_vo_tmp"- ・テンプレートのパスを指定
eventFolder = AZ_Wwise_CopyObject(templatePath, workunit["Path"], characterName, True)- ・テンプレートをコピーしてキャラクター名のフォルダを生成
for filePath in fileList:- ・Reaperで書き出したファイルごとに実行
fileName = AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]- ・ファイル名を取得
voiceType = fileName[:3]type_MixerPath = "" type_EventFolderPath = ""if voiceType == "ACT": type_MixerPath = mixer["Path"] + "\\action" type_EventFolderPath = eventFolder["Path"] + "\\battle"- ・アクションボイスの場合、アクションボイス用のパスを指定
elif voiceType == "DMG": type_MixerPath = mixer["Path"] + "\\damage" type_EventFolderPath = eventFolder["Path"] + "\\battle"- ・ダメージボイスの場合、ダメージボイス用のパスを指定
else: type_MixerPath = mixer["Path"] + "\\event" type_EventFolderPath = eventFolder["Path"] + "\\senario"- ・それ以外のボイスの場合、イベント用ボイス用のパスを指定
sound = AZ_Wwise_CreateSoundSFX(type_MixerPath, filePath, fileName, characterName, True)- ・ファイル名と同名のサウンドSFXオブジェクトを指定のパスに作成
AZ_Wwise_DeleteObject(type_EventFolderPath + "\\" + sound["Name"]) event = AZ_Wwise_CreateEvent(type_EventFolderPath, sound["Name"], -1)- ・同名のイベントがあれば削除してから、サウンドSFXと同名のイベントを指定のパスに生成
AZ_Wwise_AddActionToEvent(event["ID"], 2, sound["ID"]) AZ_Wwise_AddActionToEvent(event["ID"], 1, sound["ID"])- ・追加したイベントにサウンドSFXのStopアクションとPlayアクションを追加
AZ_Wwise_SaveProject()- ・プロジェクトを保存
AZ_Wwise_Disconnect()- ・Wwiseから切断
AZ_ShowMessageBox_Info("Success!", "", AZ_WindowType_OK())- ・完了のメッセージを表示
Main()- ・Main関数を実行
Screens
APIs used
- AZ_GetUserInputList
- AZ_DeleteAllRegion
- AZ_GetSelectedMediaItemList
- AZ_GetRandomColor
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemEndTime
- AZ_GetMediaItemName
- AZ_AddRegionMarker
- AZ_SetProjectPathFolder
- AZ_RenderToAudioFile
- AZ_Wwise_Connect
- AZ_Wwise_CreateWorkUnit
- AZ_Wwise_CopyObject
- AZ_GetPathInfo
- AZ_Wwise_CreateSoundSFX
- AZ_Wwise_DeleteObject
- AZ_Wwise_CreateEvent
- AZ_Wwise_AddActionToEvent
- AZ_Wwise_SaveProject
- AZ_Wwise_Disconnect
- AZ_ShowMessageBox_Info
Render3
AZSTOKE_Render_Savedata_1Save the render settings as text to create save dataScript
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) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath())require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ・SilverとGOLDを利用可能にする設定
fullPath = reaper.AZ_SetResoucePathFolder("AZData//Render",0)- ・AZData//Renderというフォルダを生成してフルパス情報をfullPathを代入
cancelType,inputList = reaper.AZ_GetUserInputList("SaveData",1,"FileName:","Render_a001")- ・レンダーのファイル名をユーザーに指定してもらうためにテキストボックスを用意
if cancelType then render = reaper.AZ_GetRenderSetting(0)- ・現在のレンダー設定を取得してrenderへ保存
jsonStr = reaper.AZ_Json_Serialize(render)- ・配列情報を文字列に変換してjsonStrに代入
reaper.AZ_WriteFile(fullPath,inputList[1]..".txt",jsonStr,0)- ・リソースフォルダにレンダーデータをテキスト保存 end
Screens
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * fullPath = AZ_SetResoucePathFolder("AZData/Render",0)[2] cancelType,inputList = AZ_GetUserInputList("SaveData",1,"FileName:","Render_a001") if cancelType: render = AZ_GetRenderSetting(0) jsonStr = AZ_Json_Serialize(render) AZ_WriteFile(fullPath, inputList[0] + str(".txt"), jsonStr, 0)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ・SilverとGOLDを利用可能にする設定
fullPath = AZ_SetResoucePathFolder("AZData/Render",0)[2]- ・AZData/Renderというフォルダを生成してフルパス情報をfullPathを代入
cancelType,inputList = AZ_GetUserInputList("SaveData",1,"FileName:","Render_a001")- ・レンダーのファイル名をユーザーに指定してもらうためにテキストボックスを用意
- if cancelType: render = AZ_GetRenderSetting(0) ・現在のレンダー設定を取得してrenderへ保存
jsonStr = AZ_Json_Serialize(render)- ・配列情報を文字列に変換してjsonStrに代入
AZ_WriteFile(fullPath, inputList[0] + str(".txt"), jsonStr, 0)- ・リソースフォルダにレンダーデータをテキスト保存
Screens
AZSTOKE_Render_Write_1Render waveforms using the save dataScript
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)Line by line日本語
dofile(reaper.AZ_GetLuaInitPath())require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ・SilverとGoldのAPIを利用可能にする
- fullPath = reaper.AZ_SetResoucePathFolder("AZData//Render",0) ・リソースフォルダのAZData/Renderフォルダを確認してFullPathを取得
- jsonStr = reaper.AZ_ReadFile(fullPath,"Render_a001.txt") ・セーブデータ Render_a001.txtを読み込みしてjsonStrの文字列へ変換
- renderData = reaper.AZ_Json_Deserialize(jsonStr) ・jsonStrから配列に変換してセーブデータを利用できるように設定
- reaper.AZ_RenderToAudioFile(0,renderData) ・レンダー設定に合わせてオーディオファイルを書き出し
Screens
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * fullPath = AZ_SetResoucePathFolder("AZData/Render",0)[2] jsonStr = AZ_ReadFile(fullPath,"Render_a001.txt")[2] renderData = AZ_Json_Deserialize(jsonStr) AZ_RenderToAudioFile(0, renderData)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ・SilverとGoldのAPIを利用可能にする
- fullPath = AZ_SetResoucePathFolder("AZData/Render",0)[2] ・リソースフォルダのAZData/Renderフォルダを確認してFullPathを取得
- jsonStr = AZ_ReadFile(fullPath,"Render_a001.txt")[2] ・セーブデータ Render_a001.txtを読み込みしてjsonStrの文字列へ変換
- renderData = AZ_Json_Deserialize(jsonStr) ・jsonStrから配列に変換してセーブデータを利用できるように設定
- AZ_RenderToAudioFile(0, renderData) ・レンダー設定に合わせてオーディオファイルを書き出し
Screens
AZSTOKE_Recording_RenameAndRenderMediasName the media and export them into separate foldersBefore you run it
メディアをReaperプロジェクトに配置する
Script
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()Line by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- -- RIGDOCKSをインポート
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- -- トラックの深さが0のトラックをサウンドトラックとみなし、リストに追加 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- -- ファイル名に付ける番号を1から始める
for k, media in pairs(mediaItemList) do- -- メディアアイテムの数だけループ
mediaName = reaper.AZ_GetMediaItemName(media)- -- メディアアイテムの名前を取得
mediaNemeComponent = reaper.AZ_GetStringSplitList(mediaName, "_")- -- メディアアイテムの名前を"_"で分割してリストにする
if mediaNemeComponent[#mediaNemeComponent] ~= "ng" then- -- メディアアイテムの名前の最後の要素が"ng"でない場合、OKテイクと判断しファイル名を変更する
fileName = filenamePrefix.. soundName .. "_" .. mikeName .. "_" .. reaper.AZ_FormatNumDigit(soundIndex, 3)- -- ファイル名を"AZREC_" + サウンドトラックの名前 + "_" + マイクトラックの名前 + "_" + 3桁の番号 にする
reaper.AZ_SetMediaItemName(media, fileName)- -- メディアアイテムの名前を変更
table.insert(soundNameList, fileName)- -- 変更したファイル名をリストに追加
soundIndex = soundIndex + 1- -- ファイル名に付ける番号を1つ増やす
end endendend- Msg("以下の音声ファイルを命名しました。") ShowObject(soundNameList)
- -- 変更したファイル名のリストを表示
endfunction 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- -- メディアアイテムの名前の最後の要素が"ng"でない場合、OKテイクと判断し、そのメディアアイテムを選択する
end- -- レンダリング設定 renderingSetting = { RenderingSetting = 32, RenderingRangeType = 4, RenderingTarget = 3, OutputDir = "D:/Recording", FileName = outputPath, IsTail = false }
- -- レンダリング設定の内容(出力先フォルダは「D:/Recording」)
filePathList = reaper.AZ_RenderToAudioFile(0, renderingSetting)- -- レンダリングして書き出したファイルのパスのリストを取得
- Msg("以下のファイルを書き出しました。") ShowObject(filePathList)
- -- 書き出したファイルのパスのリストを表示
endRenameMedias()- -- OKテイクのメディアアイテムの名前を変更
RenderMedias()- -- OKテイクのメディアアイテムをレンダリング
Screens
Before you run it
メディアをReaperプロジェクトに配置する
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * filenamePrefix = "AZREC_" def RenameMedias(): soundNameList = [] trackCount = RPR_CountTracks(0) soundTrackList = [] for i in range(trackCount): if AZ_GetTrackIdDepth(0, i) == 0: soundTrackList.append(RPR_GetTrack(0, i)) for soundTrack in soundTrackList: soundName = AZ_GetTrackItemName(soundTrack, "")[1] _,mikeTrackList,_ = AZ_GetTrackItemChildList(soundTrack) for mikeTrack in mikeTrackList: mikeName = AZ_GetTrackItemName(mikeTrack, "")[1] mediaItemList = AZ_GetTrackMediaItemList(0, AZ_GetTrackItemIndex(mikeTrack), []) soundIndex = 1 for media in mediaItemList: mediaName = AZ_GetMediaItemName(media, "", 1024)[1] mediaNameComponent = AZ_GetStringSplitList(mediaName, "_") if mediaNameComponent[-1] != "ng": fileName = (filenamePrefix + soundName + "_" + mikeName + "_" + AZ_FormatNumDigit(soundIndex, 3, "", 1024)[2]) AZ_SetMediaItemName(media, fileName) soundNameList.append(fileName) soundIndex += 1 Msg("The following audio files were named.") ShowObject(soundNameList) def RenderMedias(): outputPath = "$parent/$track/$item" AZ_SetAllMediaSelected(0, False) mediaItemList = AZ_GetMediaItemList(0, []) for media in mediaItemList: fileName = AZ_GetMediaItemName(media, "", 1024)[1] filenameComponent = AZ_GetStringSplitList(fileName, "_") if filenameComponent[-1] != "ng": RPR_SetMediaItemSelected(media, True) renderingSetting = { "RenderingSetting": 32, "RenderingRangeType": 4, "RenderingTarget": 3, "OutputDir": "D:/Recording", "FileName": outputPath, "IsTail": False } filePathList = AZ_RenderToAudioFile(0, renderingSetting)[0] Msg("The following files were exported.") ShowObject(filePathList) RenameMedias() RenderMedias()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- -- RIGDOCKSをインポート
filenamePrefix = "AZREC_"- -- ファイル名の先頭に付ける文字列
def RenameMedias():- -- メディアアイテムの名前を変更する関数
soundNameList = []trackCount = RPR_CountTracks(0)- -- トラックの数を取得
soundTrackList = []for i in range(trackCount):- -- トラックの数だけループ
if AZ_GetTrackIdDepth(0, i) == 0: soundTrackList.append(RPR_GetTrack(0, i))- -- トラックの深さが0のトラックをサウンドトラックとみなし、リストに追加
for soundTrack in soundTrackList:- -- サウンドトラックの数だけループ
soundName = AZ_GetTrackItemName(soundTrack, "")[1]- -- サウンドトラックの名前を取得
_,mikeTrackList,_ = AZ_GetTrackItemChildList(soundTrack)- -- サウンドトラックの子トラック(マイクトラック)を取得
for mikeTrack in mikeTrackList:- -- マイクトラックの数だけループ
mikeName = AZ_GetTrackItemName(mikeTrack, "")[1]- -- マイクトラックの名前を取得
mediaItemList = AZ_GetTrackMediaItemList(0, AZ_GetTrackItemIndex(mikeTrack), [])- -- マイクトラックにあるメディアアイテムを取得
soundIndex = 1- -- ファイル名に付ける番号を1から始める
for media in mediaItemList:- -- メディアアイテムの数だけループ
mediaName = AZ_GetMediaItemName(media, "", 1024)[1]- -- メディアアイテムの名前を取得
mediaNameComponent = AZ_GetStringSplitList(mediaName, "_")- -- メディアアイテムの名前を"_"で分割してリストにする
if mediaNameComponent[-1] != "ng":- -- メディアアイテムの名前の最後の要素が"ng"でない場合、OKテイクと判断しファイル名を変更する
fileName = (filenamePrefix + soundName + "_" + mikeName + "_" + AZ_FormatNumDigit(soundIndex, 3, "", 1024)[2])- -- ファイル名を"AZREC_" + サウンドトラックの名前 + "_" + マイクトラックの名前 + "_" + 3桁の番号 にする
AZ_SetMediaItemName(media, fileName)- -- メディアアイテムの名前を変更
soundNameList.append(fileName)- -- 変更したファイル名をリストに追加
soundIndex += 1- -- ファイル名に付ける番号を1つ増やす
Msg("The following audio files were named.") ShowObject(soundNameList)- -- 変更したファイル名のリストを表示
def RenderMedias():- -- メディアアイテムをレンダリングする関数
outputPath = "$parent/$track/$item"- -- 書き出すファイルのパスを【親トラック名(サウンド名)】/【トラック名(マイク名)】/【アイテム名】にする
AZ_SetAllMediaSelected(0, False)- -- 全てのメディアアイテムの選択を解除
mediaItemList = AZ_GetMediaItemList(0, [])- -- プロジェクト内の全てのメディアアイテムを取得
for media in mediaItemList:- -- メディアアイテムの数だけループ
fileName = AZ_GetMediaItemName(media, "", 1024)[1]- -- メディアアイテムの名前を取得
filenameComponent = AZ_GetStringSplitList(fileName, "_")- -- メディアアイテムの名前を"_"で分割してリストにする
if filenameComponent[-1] != "ng": RPR_SetMediaItemSelected(media, True)- -- メディアアイテムの名前の最後の要素が"ng"でない場合、OKテイクと判断し、そのメディアアイテムを選択する
renderingSetting = { "RenderingSetting": 32, "RenderingRangeType": 4, "RenderingTarget": 3, "OutputDir": "D:/Recording", "FileName": outputPath, "IsTail": False }- -- レンダリング設定の内容(出力先フォルダは「D:/Recording」)
filePathList = AZ_RenderToAudioFile(0, renderingSetting)[0]- -- レンダリングして書き出したファイルのパスのリストを取得
Msg("The following files were exported.") ShowObject(filePathList)- -- 書き出したファイルのパスのリストを表示
RenameMedias()- -- OKテイクのメディアアイテムの名前を変更
RenderMedias()- -- OKテイクのメディアアイテムをレンダリング
Screens
Slack2
AZSTOKE_Slack_call_1Slack notification after HANDAUTOMER executionBefore you run it
メディアをインポートしたいトラックを生成して選択しておく インポートしたいメディアをフォルダに用意しておく SLACKのBotを作成しておく※SlackBot作成手順
Script
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) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER")- ・SilverのAPIを利用可能にする
token = "----" user = "----"- ・トークン情報とユーザー情報を設定 ※これは各Slackごとに設定が異なります。
- canselType,inputList = reaper.AZ_GetUserInputList("wav",1,"path:","") ・テキストボックスにパス情報を入力
- if canselType then ・テキストボックスでOKを押せば以下の処理を実行
- fileList = reaper.AZ_GetFilePathList(inputList[1],"wav") ・パス情報からwavデータのフルパス情報を取得
- track = reaper.AZ_GetTrackItemSelect(0,0,1) ・選択しているトラックの一番最初を取得 startPos = 0 ・メディアの設置秒を設定
- for i, value in pairs(fileList) do ・wavのファイル分ループ
- item = reaper.AZ_InsertMediaTrackItemSecond(track,value,0,startPos) ・指定トラックアイテムの指定位置にメディアをインサート
- reaper.AZ_SetMediaItemHANDAUTOMER(item,2) ・指定メディアにHANDAUTOMERを実行
- endTime = reaper.AZ_GetMediaItemEndTime(item) ・指定メディアの終了位置を取得
- startPos = endTime + 1 ・メディアの終了時間から1秒後に開始時間を設定 end
- reaper.AZ_Slack_PostDirectMessage(token,user,"HANDAUTOMER作業が終了しました。",true,true) ・終了したことをスラックに送信 end
Screens
Before you run it
メディアをインポートしたいトラックを生成して選択しておく インポートしたいメディアをフォルダに用意しておく SLACKのBotを作成しておく※SlackBot作成手順
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * token = "......." user = "......" isSuccess, inputList = AZ_GetUserInputList("wav", 1, "path:", "") if isSuccess: fileList = AZ_GetFilePathList(inputList[0], "wav") track = AZ_GetTrackItemSelect(0, 0, 1) startPos = 0 for filePath in fileList: item = AZ_InsertMediaTrackItemSecond(track, filePath, 0, startPos) AZ_SetMediaItemHANDAUTOMER(item, 2) endTime = AZ_GetMediaItemEndTime(item)[1] startPos = endTime + 1 config = AZ_Json_Deserialize(AZ_ReadFile("D:\\script\\AZSTOKE_Slack_call_1", "config.json")[2]) AZ_Slack_PostDirectMessage(token, user, config["FinishMessage"], True)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import *- ・Bronze, SilverのAPIを利用可能にする
token = "......." user = "......"- ・トークン情報とユーザー情報を設定 ※これは各Slackごとに設定が異なります。
- isSuccess, inputList = AZ_GetUserInputList("wav", 1, "path:", "") ・テキストボックスにパス情報を入力
- if isSuccess: ・テキストボックスでOKを押せば以下の処理を実行
- fileList = AZ_GetFilePathList(inputList[0], "wav") ・パス情報からwavデータのフルパス情報を取得
- track = AZ_GetTrackItemSelect(0, 0, 1) ・選択しているトラックの一番最初を取得
- startPos = 0 ・一つ目のメディアの挿入位置を指定
- for filePath in fileList: ・wavのファイル分ループ item = AZ_InsertMediaTrackItemSecond(track, filePath, 0, startPos) ・トラックの指定位置にメディアをインサート
- AZ_SetMediaItemHANDAUTOMER(item, 2) ・指定メディアにHANDAUTOMERを実行
- endTime = AZ_GetMediaItemEndTime(item)[1] ・挿入したメディアの終了位置を取得
- startPos = endTime + 1 ・次のメディアの挿入位置を、挿入したメディアの終了時間から1秒後に指定
- config = AZ_Json_Deserialize(AZ_ReadFile("D:\\script\\AZSTOKE_Slack_call_1", "config.json")[2]) ・スラック通知の文言をファイルから取得 ※Reaperのpythonでは日本語が使用できないため別ファイルから読み込む
- AZ_Slack_PostDirectMessage(token, user, config["FinishMessage"], True) ・処理がすべて終了したことをスラックで通知
Screens
AZSTOKE_Slack_Thread_2Automatically write executed waveform names to a child threadBefore you run it
メディアをインポートしたいトラックを生成して選択しておく インポートしたいメディアをフォルダに用意しておく SLACKのBotを作成しておく※SlackBot作成手順
Script
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) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER")- ・Silverを利用可能にする設定 ※Bronzeも必要ですがここに記載は必要ありません。
token = "-----" user = "-----"- ・これはご自身のトークンとユーザー名をご確認ください。
canselType,inputList = reaper.AZ_GetUserInputList("wav",1,"path:","")- ・テキストボックスの入力でパスを取得
if canselType then- ・テキストボックスでOKを押すと以下を実行
fileList = reaper.AZ_GetFilePathList(inputList[1],"wav")- ・入力したパスからファイルのフルパスを出力
track = reaper.AZ_GetTrackItemSelect(0,0,1)- ・選択しているトラックを取得
startPos = 0- ・波形を置く開始位置を設定
- message = "以下のファイルを実行しました。\n"
- ・slackのメッセージに記載する文章を用意
for i, value in pairs(fileList) do- ・ファイルパスからForでループ対応
item = reaper.AZ_InsertMediaTrackItemSecond(track,value,0,startPos)- ・メディアを指定の位置にインサートしてメディアitemを出力
name = reaper.AZ_GetMediaItemName(item)- ・itemの名前を出力
message = message..name.."\n"- ・messageに名前を追加して改行する
reaper.AZ_SetMediaItemHANDAUTOMER(item,2)- ・HANDAUTOMERを実行
endTime = reaper.AZ_GetMediaItemEndTime(item)- ・メディアの終了時間を取得
startPos = endTime + 1- ・次の開始時間を取得
end- post = reaper.AZ_Slack_PostDirectMessage(token,user,"HANDAUTOMER作業が終了しました。",true,true)
- ・親のSlackPosを設定 t0 = os.clock() while os.clock() - t0 <= 5 do end
- ・親スレッドが生まれるのを5秒待機
postedMessage = reaper.AZ_Slack_ReplayMessage(token,post.Channel,post.ThreadTimeStamp, message)- ・親のポストにスレッドでMessageを送信 end
Screens
Before you run it
メディアをインポートしたいトラックを生成して選択しておく インポートしたいメディアをフォルダに用意しておく SLACKのBotを作成しておく※SlackBot作成手順
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * import time token = "-----" user = "-----" canselType,inputList = AZ_GetUserInputList("wav", 1, "path:", "") if canselType: fileList = AZ_GetFilePathList(inputList[1], "wav") track = AZ_GetTrackItemSelect(0, 0, 1) startPos = 0 message = "following files were processed.\n" for file in fileList: item = AZ_InsertMediaTrackItemSecond(track, file, 0, startPos) name = AZ_GetMediaItemName(item)[1] message = message + name + "\n" AZ_SetMediaItemHANDAUTOMER(item, 2) endTime = AZ_GetMediaItemEndTime(item)[1] startPos = endTime + 1 post = AZ_Slack_PostDirectMessage(token, user, "HANDAUTOMER processs are finished", True) time.sleep(5) postedMessage = AZ_Slack_ReplayMessage(token, post["Channel"], post["ThreadTimeStamp"], message)Line by line日本語
- import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * ・Bronze、Silverを利用可能にする設定
- import time ・timeライブラリをインポート
- token = "-----" user = "-----" ・これはご自身のトークンとユーザー名をご確認ください。
canselType,inputList = AZ_GetUserInputList("wav", 1, "path:", "")- ・テキストボックスの入力でパスを取得
if canselType:- ・テキストボックスでOKを押すと以下を実行
fileList = AZ_GetFilePathList(inputList[1], "wav")- ・入力したパスからファイルのフルパスを出力
track = AZ_GetTrackItemSelect(0, 0, 1)- ・選択しているトラックを取得
startPos = 0- ・波形を置く開始位置を設定
message = "following files were processed.\n"- ・slackのメッセージに記載する文章を用意
for file in fileList:- ・ファイルパスからForでループ対応
item = AZ_InsertMediaTrackItemSecond(track, file, 0, startPos)- ・メディアを指定の位置にインサートしてメディアitemを出力
name = AZ_GetMediaItemName(item)[1]- ・itemの名前を出力
message = message + name + "\n"- ・messageに名前を追加して改行する
AZ_SetMediaItemHANDAUTOMER(item, 2)- ・HANDAUTOMERを実行
endTime = AZ_GetMediaItemEndTime(item)[1]- ・メディアの終了時間を取得
startPos = endTime + 1- ・次の開始時間を取得
post = AZ_Slack_PostDirectMessage(token, user, "HANDAUTOMER processs are finished", True)- ・親のSlackPosを設定
time.sleep(5)- ・親スレッドが生まれるのを5秒待機
postedMessage = AZ_Slack_ReplayMessage(token, post["Channel"], post["ThreadTimeStamp"], message)- ・親のポストにスレッドでMessageを送信
Screens
SVN2
AZSTOKE_SVN_Revision_Insert_1Get a specified revision of a file and automate inserting itBefore you run it
SVNで取得したいリビジョン番号を用意
Script
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 endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_GOLD")- ・GOLDを利用可能にする
url = "---URL---"- ・自身のSVNのリポジトリURLを記載
toDir = "F:\\RIGDOCKS\\File"- ・指定リビジョンのファイルをコピーする先
revisioln = 10- ・指定リビジョン番号
fileList = reaper.AZ_SVN_Export_CommitOnly(url, toDir, reaper.AZ_FileWriteMode_Overwrite(), revisioln)- ・リビジョンを指定してコピーした後にそのファイルのパス情報を配列(fileList)で出力
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- ・最終地点からさらに1秒後に次のメディア開始地点を設定
end
Screens
Before you run it
SVNで取得したいリビジョン番号を用意
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_GOLD_python import * url = "---URL---" # svnリポジトリへのurl toDir = "F:\\RIGDOCKS\\File" revisioln = 10 fileList = AZ_SVN_Export_CommitOnly(url, toDir, AZ_FileWriteMode_Overwrite(), revisioln) setTime = 0 for file in fileList: item = AZ_InsertMediaTrackIdSecond(0, 1, file, 0, setTime) endTime = AZ_GetMediaItemEndTime(item)[1] setTime = endTime + 1Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_GOLD_python import *- ・GOLDを利用可能にする
url = "---URL---"- ・自身のSVNのリポジトリURLを記載
toDir = "F:\\RIGDOCKS\\File"- ・指定リビジョンのファイルをコピーする先
revisioln = 10- ・指定リビジョン番号
fileList = AZ_SVN_Export_CommitOnly(url, toDir, AZ_FileWriteMode_Overwrite(), revisioln)- ・リビジョンを指定してコピーした後にそのファイルのパス情報を配列(fileList)で出力
setTime = 0- ・インサート時の開始位置(秒)
for file in fileList:- ・配列分ループ対応
item = AZ_InsertMediaTrackIdSecond(0, 1, file, 0, setTime)- ・パス情報をもとにプロジェクトにインサート
endTime = AZ_GetMediaItemEndTime(item)[1]- ・インサートしたメディアの最終地点を取得(秒)
setTime = endTime + 1- ・最終地点からさらに1秒後に次のメディア開始地点を設定
Screens
AZSTOKE_SVN_ImportToWwise_1Retrieve audio files from SVN and import them into WwiseBefore you run it
取得したい音声ファイルが追加/変更されたリビジョンを控えておく
Script
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()) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ・SILVER、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 = {}- ・Wwiseにインポートしたファイルのパスを格納するための配列を用意しておく
if reaper.AZ_Wwise_Connect("127.0.0.1", 8080) then- ・Wwiseに接続する
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 = nilif string.sub(fileName, 7, 9) == "men" thenvoice = 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)- ・ファイル名の7~9文字目が「men」の場合は「men」仮想フォルダの配下にサウンドボイスオブジェクトとイベントを作成する
elseif string.sub(fileName, 7, 11) == "women" thenvoice = 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)- ・ファイル名の7~11文字目が「women」の場合は「women」仮想フォルダの配下にサウンドボイスオブジェクトとイベントを作成する
endreaper.AZ_Wwise_SetProperty(voice["ID"], "IsStreamingEnabled", true)- ・作成したサウンドボイスオブジェクトの「Stream」にチェックを入れる
originalsPath = reaper.AZ_Wwise_GetProperty(voice["ID"], "sound:originalWavFilePath", "Japanese")table.insert(originalFilePathList, originalsPath)- ・Originalsフォルダ内にインポートされた音声ファイルのパスを取得し、配列に格納する
endreaper.AZ_Wwise_Disconnect()- ・Wwiseから切断する
endfor i, file in pairs(originalFilePathList) do- ・Originalsフォルダ内にインポートされた音声ファイルのパスごとに以下の処理を行う
reaper.AZ_SVN_Add(reaper.AZ_GetPathInfo(file)["ParentPath"], {".*\\..*"})- ・音声ファイルの親フォルダをSVNに追加する(フォルダ配下のファイルは除外する)
reaper.AZ_SVN_Add(file)- ・音声ファイルをSVNを追加する
end- reaper.AZ_ShowMessageBox_Info("処理が終了しました", "", reaper.AZ_WindowType_OK())
- ・処理が終了した旨のポップアップ表示を行う
end
Screens
Before you run it
取得したい音声ファイルが追加/変更されたリビジョンを控えておく
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * url = # SVN repository URL to_dir = "F:\\RIGDOCKS\\tmp" # Temporary output folder retval , inputList = AZ_GetUserInputList("", 1, "SVN Revision", "") if retval: revision = int(inputList[0]) fileList = AZ_SVN_Export_CommitOnly(url, to_dir, AZ_FileWriteMode_Overwrite(), revision) originalFilePathList = [] if AZ_Wwise_Connect("127.0.0.1", 8080)[0]: containerPath = "\\Actor-Mixer Hierarchy\\AZ_Voice" eventFolderPath = "\\Events\\AZ_Voice" vf_men = AZ_Wwise_CreateVirtualFolder(containerPath, "men", True) vf_women = AZ_Wwise_CreateVirtualFolder(containerPath, "women", True) vf_ev_men = AZ_Wwise_CreateVirtualFolder(eventFolderPath, "men", True) vf_ev_women = AZ_Wwise_CreateVirtualFolder(eventFolderPath, "women", True) for filePath in fileList: fileName = AZ_GetPathInfo(filePath)["FileNameWithoutExtension"] voice = None if fileName[6:9] == "men": voice = AZ_Wwise_CreateSoundVoice(vf_men["Path"], filePath, fileName, "Japanese", "men", True) event = AZ_Wwise_CreateEvent(vf_ev_men["Path"], voice["Name"], 1, voice["ID"], True) elif fileName[6:11] == "women": voice = AZ_Wwise_CreateSoundVoice(vf_women["Path"], filePath, fileName, "Japanese", "women", True) event = AZ_Wwise_CreateEvent(vf_ev_women["Path"], voice["Name"], 1, voice["ID"], True) AZ_Wwise_SetProperty(voice["ID"], "IsStreamingEnabled", True) originalsPath = AZ_Wwise_GetProperty(voice["ID"], "sound:originalWavFilePath", "Japanese") originalFilePathList.append(originalsPath) AZ_Wwise_Disconnect() for file in originalFilePathList: AZ_SVN_Add(AZ_GetPathInfo(file)["ParentPath"], {".*\\..*"}) AZ_SVN_Add(file) AZ_ShowMessageBox_Info("The process has been completed.", "", AZ_WindowType_OK())Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ・SILVER、GOLDをインポートする
- url = # svnリポジトリへのurl to_dir = "F:\\RIGDOCKS\\tmp" # 一時的にファイルを出力するフォルダ
retval , inputList = AZ_GetUserInputList("", 1, "SVN Revision", "")if retval:- ・指定のリビジョンを入力画面から取得する。取得できた場合のみ先に進む
revision = int(inputList[0])- ・リビジョン番号を数値型で取得する
- fileList = AZ_SVN_Export_CommitOnly(url, to_dir, AZ_FileWriteMode_Overwrite(), "リビジョン")
- ・指定リビジョンにて追加、更新されたファイルを一時フォルダに出力する
originalFilePathList = []- ・Wwiseにインポートしたファイルのパスを格納するための配列を用意しておく
if AZ_Wwise_Connect("127.0.0.1", 8080)[0]:- ・Wwiseに接続する
containerPath = "\\Actor-Mixer Hierarchy\\AZ_Voice" eventFolderPath = "\\Events\\AZ_Voice"- ・サウンドオブジェクトとイベントの格納先パスを指定
vf_men = AZ_Wwise_CreateVirtualFolder(containerPath, "men", True) vf_women = AZ_Wwise_CreateVirtualFolder(containerPath, "women", True) vf_ev_men = AZ_Wwise_CreateVirtualFolder(eventFolderPath, "men", True) vf_ev_women = AZ_Wwise_CreateVirtualFolder(eventFolderPath, "women", True)- ・仮想フォルダを作成
for filePath in fileList:- ・一時フォルダに出力したファイルのパスごとに以下の処理を行う
fileName = AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]- ・ファイルパスからファイル名のみを取得
voice = Noneif fileName[6:9] == "men": voice = AZ_Wwise_CreateSoundVoice(vf_men["Path"], filePath, fileName, "Japanese", "men", True) event = AZ_Wwise_CreateEvent(vf_ev_men["Path"], voice["Name"], 1, voice["ID"], True)- ・ファイル名の6~9文字目が「men」の場合は「men」仮想フォルダの配下にサウンドボイスオブジェクトとイベントを作成する
elif fileName[6:11] == "women": voice = AZ_Wwise_CreateSoundVoice(vf_women["Path"], filePath, fileName, "Japanese", "women", True) event = AZ_Wwise_CreateEvent(vf_ev_women["Path"], voice["Name"], 1, voice["ID"], True)- ・ファイル名の6~11文字目が「women」の場合は「women」仮想フォルダの配下にサウンドボイスオブジェクトとイベントを作成する
AZ_Wwise_SetProperty(voice["ID"], "IsStreamingEnabled", True)- ・作成したサウンドボイスオブジェクトの「Stream」にチェックを入れる
originalsPath = AZ_Wwise_GetProperty(voice["ID"], "sound:originalWavFilePath", "Japanese")originalFilePathList.append(originalsPath)- ・Originalsフォルダ内にインポートされた音声ファイルのパスを取得し、配列に格納する
AZ_Wwise_Disconnect()- ・Wwiseから切断する
for file in originalFilePathList:- ・Originalsフォルダ内にインポートされた音声ファイルのパスごとに以下の処理を行う
AZ_SVN_Add(AZ_GetPathInfo(file)["ParentPath"], {".*\\..*"})- ・音声ファイルの親フォルダをSVNに追加する(フォルダ配下のファイルは除外する)
AZ_SVN_Add(file)- ・音声ファイルをSVNを追加する
AZ_ShowMessageBox_Info("The process has been completed.", "", AZ_WindowType_OK())- ・処理が終了した旨のポップアップ表示を行う
Screens
Perforce2
AZSTOKE_Perforce_latest_Insert_1Automate retrieving from a specified folder at the latest revision and insertingBefore you run it
トラックを2つ用意しておく
Script
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() endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_GOLD")- ・APIを利用できるようにする対応
- url = "p4vホストのURL" userName = "p4vユーザー名" password = "p4vパスワード"
- workspace = "p4vワークスペース名" depotPath = "p4v取得したい先のパス情報"
- ・必要情報を用意
setTime = 0- ・波形の開始セットタイミングを用意
if reaper.AZ_P4_Connect(url, userName, password) then- ・Perforceにコネクト接続
fileList = reaper.AZ_P4_ExportAudioToProject(workspace, depotPath, "", -1, "wav", true)- ・最新リビジョンのファイルをプロジェクトにコピー 、フルパス情報を出力
for i, value in pairs(fileList) do- ・フルパス情報をForでループ
item = reaper.AZ_InsertMediaTrackIdSecond(0,1,value,0,setTime)- ・メディアをインサート対応
endTime = reaper.AZ_GetMediaItemEndTime(item)- ・設置したメディアの終了時間を取得
setTime = endTime + 1- ・次のメディアの開始位置を設定 end
reaper.AZ_P4_Disconnect()- ・P4vをコネクト解除
end
Screens
Before you run it
トラックを2つ用意しておく
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_GOLD_python import * url = "p4v URL" userName = "p4vユーザー名" password = "p4vパスワード" workspace = "p4vワークスペース名" depotPath = "p4vフォルダパス" setTime = 0 if AZ_P4_Connect(url, userName, password): fileList = AZ_P4_ExportAudioToProject(workspace, depotPath, "", -1, "wav", True) for file in fileList: item = AZ_InsertMediaTrackIdSecond(0, 1, file, 0, setTime) endTime = AZ_GetMediaItemEndTime(item) setTime = endTime + 1 AZ_P4_Disconnect()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_GOLD_python import *- ・RIGDOCKSをインポート
- url = "p4v URL" userName = "p4vユーザー名" password = "p4vパスワード"
- workspace = "p4vワークスペース名" depotPath = "p4vフォルダパス"
- ・接続情報を用意
setTime = 0- ・波形の挿入開始位置を設定
if AZ_P4_Connect(url, userName, password):- ・Perforceサーバーに接続
fileList = AZ_P4_ExportAudioToProject(workspace, depotPath, "", -1, "wav", True)- ・最新リビジョンのファイルをプロジェクトにコピー 、フルパス情報を出力
for file in fileList:- ・フルパス情報をForでループ
item = AZ_InsertMediaTrackIdSecond(0, 1, file, 0, setTime)- ・ファイルをインサート
endTime = AZ_GetMediaItemEndTime(item)- ・インサートしたメディアの終端位置を取得
setTime = endTime + 1- ・次のメディアの開始位置を設定(前のメディアから1秒開ける)
AZ_P4_Disconnect()- ・Perforceサーバーから切断
Screens
AZSTOKE_Perforce_latest_Insert_2Import Perforce-managed files into Reaper while filtering out unnecessary filesScript
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() endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ・RIGDOCKSをインポート
- url = "p4v URL" userName = "p4vユーザー名" password = "p4vパスワード"
- workspace = "p4vワークスペース名" depotPath = "p4vフォルダパス"
- ・Perforceサーバーへの接続情報を記載
setTime = 0- ・メディアの挿入位置
if reaper.AZ_P4_Connect(url, userName, password) then- ・Perforceサーバーに接続
fileList = reaper.AZ_P4_ExportAudioToProject(workspace, depotPath, "", -1, "wav", true, {".*/unuse/.*", ".*_old\\..*"})- ・最新状態のファイルのうち、以下の条件を満たすファイルをプロジェクトフォルダに出力し、そのパスを取得 ・wavファイル ・「unuse」フォルダ内に無い ・「_old.」という文字列を含まない
for i, filePath in pairs(fileList) do- ・for文で各パスごとに処理を行う
parentDir = reaper.AZ_GetPathInfo(filePath)["ParentName"]- ・ファイルパスの親フォルダ名を取得
track = reaper.AZ_InsertTrackSearchUniqueOnly(0, parentDir)- ・親フォルダ名と同じ名前のトラックがReaper上にない場合のみ作成する
item = reaper.AZ_InsertMediaTrackItemSecond(track, filePath, 0, setTime)- ・親フォルダ名と同じ名前のトラックにファイルを挿入
endTime = reaper.AZ_GetMediaItemEndTime(item)setTime = endTime + 1- ・挿入したファイルの終了位置を取得し、その1秒後を次のファイルの挿入位置とする
endreaper.AZ_P4_Disconnect()- ・各ファイルに対する処理の終了後、Perforceサーバーから切断する
end
Screens
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * url = "サーバーURL" userName = "p4vユーザー名" password = "p4vパスワード" workspace = "p4vワークスペース名" depotPath = "p4vフォルダパス" setTime = 0 if AZ_P4_Connect(url, userName, password): fileList = AZ_P4_ExportAudioToProject(workspace, depotPath, "", -1, "wav", True, [".*/unuse/.*", ".*_old\\..*"]) for filePath in fileList: parentDir = AZ_GetPathInfo(filePath)["ParentName"] track = AZ_InsertTrackSearchUniqueOnly(0, parentDir)[0] item = AZ_InsertMediaTrackItemSecond(track, filePath, 0, setTime) _, endTime = AZ_GetMediaItemEndTime(item) setTime = endTime + 1 AZ_P4_Disconnect()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ・RIGDOCKSをインポート
- url = "サーバーURL" userName = "p4vユーザー名" password = "p4vパスワード"
- workspace = "p4vワークスペース名" depotPath = "p4vフォルダパス"
- ・Perforceサーバーへの接続情報を記載
setTime = 0- ・メディアの挿入位置
if AZ_P4_Connect(url, userName, password):- ・Perforceサーバーに接続
fileList = AZ_P4_ExportAudioToProject(workspace, depotPath, "", -1, "wav", True, [".*/unuse/.*", ".*_old\\..*"])- ・最新状態のファイルのうち、以下の条件を満たすファイルをプロジェクトフォルダに出力し、そのパスを取得
- ・wavファイル
- ・「unuse」フォルダ内に無い
- ・「_old.」という文字列を含まない
for filePath in fileList:- ・for文で各パスごとに処理を行う
parentDir = AZ_GetPathInfo(filePath)["ParentName"]- ・ファイルパスの親フォルダ名を取得
track = AZ_InsertTrackSearchUniqueOnly(0, parentDir)[0]- ・親フォルダ名と同じ名前のトラックがReaper上にない場合のみ作成する
item = AZ_InsertMediaTrackItemSecond(track, filePath, 0, setTime)- ・親フォルダ名と同じ名前のトラックにファイルを挿入
_, endTime = AZ_GetMediaItemEndTime(item)setTime = endTime + 1- ・挿入したファイルの終了位置を取得し、その1秒後を次のファイルの挿入位置とする
AZ_P4_Disconnect()- ・各ファイルに対する処理の終了後、Perforceサーバーから切断する
Screens
Transcription6
AZSTOKE_TRSC_OutputToProjectWrite transcription results to note itemsBefore you run it
Reaperにボイスのメディアを並べる
Script
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()Line by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER")- ・ RIGDOCKSをインポート
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)- ・ 文字起こし結果をNoteアイテムとしてトラックに挿入
end- -- モデルを解放 reaper.AZ_TRSC_ReleaseModel(ctx)
- ・ 文字起こしモデルを解放
- reaper.AZ_ShowMessageBox_Info("文字起こしが終了しました", "", reaper.AZ_WindowType_OK())
- ・ 終了メッセージを表示
endfunction 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)- ・ アイテムの位置にリージョンを作成
endTranscription(track)- ・ 文字起こし実行
endmain()- ・ メイン関数を実行
Screens
Before you run it
Reaperにボイスのメディアを並べる
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import* from AZSTOKE_BRONZE_python import* from AZSTOKE_SILVER_python import* def Transcription(track): trscTrack = AZ_InsertUniqueChildTrack(track, "Transcription")[0] itemList = AZ_GetMediaItemListInTrackItem(track) #Load Models ctx = AZ_TRSC_LoadModel() for item in itemList: #Transcription Execute text = AZ_TRSC_FullForMediaItem(ctx, item, "ja") itemStart = AZ_GetMediaItemStartTimeSeconds(item)[1] itemLength = AZ_GetMediaItemLength(item)[1] AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text) #Release Models AZ_TRSC_ReleaseModel(ctx) AZ_ShowMessageBox_Info("Transcription complete.", "", AZ_WindowType_OK()) def main(): track = AZ_GetTrackItemSelect(0, 0, 1) if track is None: AZ_ShowMessageBox_Error("Track has not selected.", "Error", AZ_WindowType_OK()) return #Create rejon itemList = AZ_GetMediaItemListInTrackItem(track) for item in itemList: AZ_AddRegionMarkerMediaItem(item) Transcription(track) main()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import* from AZSTOKE_BRONZE_python import* from AZSTOKE_SILVER_python import*- ・ RIGDOCKSをインポート
def Transcription(track):- ・ 文字起こしを実行する関数
trscTrack = AZ_InsertUniqueChildTrack(track, "Transcription")[0]- ・ 文字起こし結果を入れるトラックを作成
itemList = AZ_GetMediaItemListInTrackItem(track)- ・ 文字起こしするアイテムのリストを取得
#Load Models ctx = AZ_TRSC_LoadModel()- ・ 文字起こしモデルを読み込む
for item in itemList:- ・ アイテムの数だけループ
#Transcription Execute text = AZ_TRSC_FullForMediaItem(ctx, item, "ja")- ・ アイテムに対して文字起こしを実行(日本語指定)
itemStart = AZ_GetMediaItemStartTimeSeconds(item)[1]- ・ アイテムの開始位置を取得
itemLength = AZ_GetMediaItemLength(item)[1]- ・ アイテムの長さを取得
AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text)- ・ 文字起こし結果をNoteアイテムとしてトラックに挿入
#Release Models AZ_TRSC_ReleaseModel(ctx)- ・ 文字起こしモデルを解放
AZ_ShowMessageBox_Info("Transcription complete.", "", AZ_WindowType_OK())- ・ 終了メッセージを表示
def main():- ・ メイン関数
track = AZ_GetTrackItemSelect(0, 0, 1)- ・ トラックが選択されているか確認
if track is None: AZ_ShowMessageBox_Error("Track has not selected.", "Error", AZ_WindowType_OK()) return- ・ トラックが選択されていない場合、エラーメッセージを表示して終了
#Create rejon itemList = AZ_GetMediaItemListInTrackItem(track)- ・ 文字起こしするアイテムのリストを取得
for item in itemList: AZ_AddRegionMarkerMediaItem(item)- ・ アイテムの位置にリージョンを作成
Transcription(track)- ・ 文字起こし実行
main()- ・ メイン関数を実行
Screens
AZSTOKE_TRSC_OutputToExcelWrite transcription results to ExcelBefore you run it
Reaperにボイスのメディアを並べる 台本用のExcelファイルを用意する
Script
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()VLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ・ RIGDOCKSをインポート
- ******** AZSTOKE_TRSC_OutputToProject参照 ******
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 trscTrackend- ******** AZSTOKE_TRSC_OutputToProject参照 ここまで ******
C_id = "B" C_serif = "C" C_trsc = "D"- ・ Excelの列を定義
R_header = 2- ・ Excelのヘッダー行を定義
tableRnage = "3:100,B"- ・ Excelの検索範囲を定義(3行目から100行目までのB列)
function OutputExcel(excelDocPath, voiceTrack)- ・ Excelに文字起こし結果を出力する関数
scriptTable = {}- ・ 台本のテーブルを初期化
charID = reaper.AZ_GetTrackItemName(voiceTrack)- ・ トラックの名前をキャラクターIDとして取得
childrenList, count = reaper.AZ_GetTrackItemChildList(voiceTrack)trscTrack = childrenList[1]- ・ 文字起こし結果が入っている子トラックを取得
itemList = reaper.AZ_GetMediaItemListInTrackItem(trscTrack)- ・ 文字起こし結果のアイテムリストを取得
excelDoc = reaper.AZ_Excel_OpenFile(excelDocPath)- ・ Excelファイルを開く
- if reaper.AZ_GetErrorCode() ~= 0 then reaper.AZ_ShowMessageBox_Error("Excelファイルの読み込みに失敗しました。", "Error", reaper.AZ_WindowType_OK()) reaper.AZ_Excel_CloseFile(excelDoc) return end
- ・ Excelファイルが開けなかった場合はエラーメッセージを表示して終了
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
- ・ Excelファイルが保存できない状態の場合はエラーメッセージを表示して終了
worksheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, charID)- ・ キャラクターIDと同じ名前のシートを開く
- 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)- ・ Excelのシートから、キャラクターIDと同じ値が入っている行を検索
for i, noteItem in pairs(itemList) do- ・ 文字起こし結果のアイテムリストをループ
region = reaper.AZ_GetRegionMarkerListMediaItem(noteItem)[1]voiceID = region["Name"]- ・ アイテムに付いているリージョンの名前を取得(これがセリフIDになる想定)
trsc = reaper.AZ_GetMediaItemNotes(noteItem)- ・ アイテムのノートから文字起こし結果を取得
exists = false- ・ ExcelのシートにセリフIDが存在するかどうかのフラグ
for j, row in pairs(rows["Cells"]) doif row[C_id] == voiceID then- ・ Excelのシートからセリフを取得
reaper.AZ_Excel_SetCellValue(worksheet, C_trsc .. j, trsc)- ・ Excelのシートに文字起こし結果を書き込む
- Msg(voiceID .. "文字起こしを書き込みました。")
- ・ 書き込み完了のメッセージを表示
exists = true- ・ セリフIDが存在するフラグを立てる end end
- if exists == false then Msg(voiceID .. "は存在しません。") end
- ・ セリフIDが存在しない場合はメッセージを表示 end
reaper.AZ_Excel_SaveDocument(excelDoc) reaper.AZ_Excel_CloseFile(excelDoc)- ・ Excelファイルを保存して閉じる
endfunction main()- ******** AZSTOKE_TRSC_OutputToProject参照 ******
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)- ******** AZSTOKE_TRSC_OutputToProject参照 ここまで ******
scriptTable = OutputExcel(excelDocPath, voiceTrack)- ・ 文字起こし結果をExcelに出力して、台本のテーブルを取得
endmain()
Screens
APIs used
- AZ_InsertUniqueChildTrack
- AZ_GetMediaItemListInTrackItem
- AZ_TRSC_LoadModel
- AZ_TRSC_FullForMediaItem
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemLength
- AZ_InsertNoteItemToTrack
- AZ_TRSC_ReleaseModel
- AZ_ShowMessageBox_Info
- AZ_WindowType_OK
- AZ_GetTrackItemName
- AZ_GetTrackItemChildList
- AZ_Excel_OpenFile
- AZ_GetErrorCode
- AZ_ShowMessageBox_Error
- AZ_Excel_CloseFile
- AZ_Excel_SaveDocument
- AZ_Excel_OpenWorksheet
- AZ_Excel_SearchRowsInWorksheet
- AZ_GetRegionMarkerListMediaItem
- AZ_GetMediaItemNotes
- AZ_Excel_GetCellValue
- AZ_Excel_SetCellValue
- AZ_GetUserInputList
- AZ_AddRegionMarkerMediaItem
Before you run it
Reaperにボイスのメディアを並べる 台本用のExcelファイルを用意する
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * def Transcription(track): trscTrack = AZ_InsertUniqueChildTrack(track, "Transcription")[0] itemList = AZ_GetMediaItemListInTrackItem(track) # Load transcription model ctx = AZ_TRSC_LoadModel() for item in itemList: # Transcription text = AZ_TRSC_FullForMediaItem(ctx, item, "ja") itemStart = AZ_GetMediaItemStartTimeSeconds(item)[1] itemLength = AZ_GetMediaItemLength(item)[1] AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text) # Release model AZ_TRSC_ReleaseModel(ctx) AZ_ShowMessageBox_Info("Transcription completed.", "", AZ_WindowType_OK()) return trscTrack C_id = "B" C_serif = "C" C_trsc = "D" R_header = 2 tableRange = "3:100,B" def OutputExcel(excelDocPath, voiceTrack): charID = AZ_GetTrackItemName(voiceTrack)[1] childListResult = AZ_GetTrackItemChildList(voiceTrack) childrenList = childListResult[-2] trscTrack = childrenList[0] itemList = AZ_GetMediaItemListInTrackItem(trscTrack) excelDoc = AZ_Excel_OpenFile(excelDocPath) if AZ_GetErrorCode() != 0: AZ_ShowMessageBox_Error("Failed to open the Excel file.", "Error", AZ_WindowType_OK()) return AZ_Excel_SaveDocument(excelDoc) if AZ_GetErrorCode() != 0: AZ_ShowMessageBox_Error("Please close the Excel file.", "Error", AZ_WindowType_OK()) return worksheet = AZ_Excel_OpenWorksheet(excelDoc, charID) if AZ_GetErrorCode() == 53: AZ_ShowMessageBox_Error("The worksheet does not exist.", "Error", AZ_WindowType_OK()) return for noteItem in itemList: region = AZ_GetRegionMarkerListMediaItem(noteItem)[0] voiceID = region["Name"] rows = AZ_Excel_SearchRowsInWorksheet(worksheet, voiceID, C_id, tableRange) cells = rows["Cells"] trsc = AZ_GetMediaItemNotes(noteItem) exists = False if cells: for j, row in cells.items(): if row[C_id] == voiceID: AZ_Excel_SetCellValue(worksheet, C_trsc + str(j), trsc) Msg(voiceID + " transcription written to Excel.") exists = True if not exists: Msg(voiceID + " was not found in the worksheet.") AZ_Excel_SaveDocument(excelDoc) AZ_Excel_CloseFile(excelDoc) def main(): excelDocPath = "D:\\reapdock\\voice\\Scripts.xlsx" retval, inputList = AZ_GetUserInputList("", 1, "Excel file path", excelDocPath) if not retval: return excelDocPath = inputList[0] voiceTrack = AZ_GetTrackItemSelect(0, 0, 1) if voiceTrack is None: AZ_ShowMessageBox_Error("No track is selected.", "Error", AZ_WindowType_OK()) return # Create region markers itemList = AZ_GetMediaItemListInTrackItem(voiceTrack) for item in itemList: AZ_AddRegionMarkerMediaItem(item) Transcription(voiceTrack) OutputExcel(excelDocPath, voiceTrack) main()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ・ RIGDOCKSをインポート
- ******** AZSTOKE_TRSC_OutputToProject参照 ******
def Transcription(track):trscTrack = AZ_InsertUniqueChildTrack(track, "Transcription")[0]itemList = AZ_GetMediaItemListInTrackItem(track)# Load model ctx = AZ_TRSC_LoadModel()for item in itemList:# Transciption Execute text = AZ_TRSC_FullForMediaItem(ctx, item, "ja")itemStart = AZ_GetMediaItemStartTimeSeconds(item)[1] itemLength = AZ_GetMediaItemLength(item)[1]AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text)# Release model AZ_TRSC_ReleaseModel(ctx)AZ_ShowMessageBox_Info("Transcription completed.", "", AZ_WindowType_OK())return trscTrack- ******** AZSTOKE_TRSC_OutputToProject参照 ここまで ******
C_id = "B" C_serif = "C" C_trsc = "D"- ・ Excelの列を定義
R_header = 2- ・ Excelのヘッダー行を定義
tableRange = "3:100,B"- ・ Excelの検索範囲を定義(3行目から100行目までのB列)
def OutputExcel(excelDocPath, voiceTrack):- ・ Excelに文字起こし結果を出力する関数
scriptTable = []- ・ 台本のテーブルを初期化
charID = AZ_GetTrackItemName(voiceTrack)[1]- ・ トラックの名前をキャラクターIDとして取得
childListResult = AZ_GetTrackItemChildList(voiceTrack) childrenList = childListResult[-2]trscTrack = childrenList[0]- ・ 文字起こし結果が入っている子トラックを取得
itemList = AZ_GetMediaItemListInTrackItem(trscTrack)- ・ 文字起こし結果のアイテムリストを取得
excelDoc = AZ_Excel_OpenFile(excelDocPath)- ・ Excelファイルを開く
if AZ_GetErrorCode() != 0: AZ_ShowMessageBox_Error("Failed to open the Excel file.", "Error", AZ_WindowType_OK()) AZ_Excel_CloseFile(excelDoc) return- ・ Excelファイルが開けなかった場合はエラーメッセージを表示して終了
AZ_Excel_SaveDocument(excelDoc)if AZ_GetErrorCode() != 0: AZ_ShowMessageBox_Error("Please close the Excel file.", "Error", AZ_WindowType_OK()) AZ_Excel_CloseFile(excelDoc) return- ・ Excelファイルが保存できない状態の場合はエラーメッセージを表示して終了
worksheet = AZ_Excel_OpenWorksheet(excelDoc, charID)- ・ キャラクターIDと同じ名前のシートを開く
if AZ_GetErrorCode() == 53: AZ_ShowMessageBox_Error("The worksheet does not exist.", "Error", AZ_WindowType_OK()) AZ_Excel_CloseFile(excelDoc) return- ・ シートが存在しない場合はエラーメッセージを表示して終了
for noteItem in itemList:- ・ 文字起こし結果のアイテムリストをループ
region = AZ_GetRegionMarkerListMediaItem(noteItem)[0]voiceID = region["Name"]- ・ アイテムに付いているリージョンの名前を取得(これがセリフIDになる想定)
rows = AZ_Excel_SearchRowsInWorksheet(worksheet, voiceID, C_id, tableRange)- ・ Excelのシートから、キャラクターIDと同じ値が入っている行を検索
cells = rows["Cells"]- ・検索した行からセルの値を取得
trsc = AZ_GetMediaItemNotes(noteItem)- ・ アイテムのノートから文字起こし結果を取得
exists = False- ・ ExcelのシートにセリフIDが存在するかどうかのフラグ
if cells:for j, row in cells.items():- ・セルの値があれば値をj、rowに取り出しつつループ
if row[C_id] == voiceID:- ・ Excelのシートからセリフを取得
AZ_Excel_SetCellValue(worksheet, C_trsc + str(j), trsc)- ・ Excelのシートに文字起こし結果を書き込む
Msg(voiceID + " transcription written to Excel.")- ・ 書き込み完了のメッセージを表示
exists = True- ・ セリフIDが存在するフラグを立てる
if not exists: Msg(voiceID + " was not found in the worksheet.")- ・ セリフIDが存在しない場合はメッセージを表示
AZ_Excel_SaveDocument(excelDoc) AZ_Excel_CloseFile(excelDoc)- ・ Excelファイルを保存して閉じる
- ******** AZSTOKE_TRSC_OutputToProject参照 ******
def main():excelDocPath = "D:\\reapdock\\voice\\Scripts.xlsx" threshold = 80retval, inputList = AZ_GetUserInputList("", 1, "Excel file path", excelDocPath) if not retval: returnexcelDocPath = inputList[0]voiceTrack = AZ_GetTrackItemSelect(0, 0, 1)if voiceTrack is None: AZ_ShowMessageBox_Error("No track is selected.", "Error", AZ_WindowType_OK()) return# Create region markers itemList = AZ_GetMediaItemListInTrackItem(voiceTrack) for item in itemList: AZ_AddRegionMarkerMediaItem(item)Transcription(voiceTrack)- ******** AZSTOKE_TRSC_OutputToProject参照 ここまで ******
scriptTable = OutputExcel(excelDocPath, voiceTrack)- ・ 文字起こし結果をExcelに出力して、台本のテーブルを取得
main()
Screens
APIs used
- AZ_InsertUniqueChildTrack
- AZ_GetMediaItemListInTrackItem
- AZ_TRSC_LoadModel
- AZ_TRSC_FullForMediaItem
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemLength
- AZ_InsertNoteItemToTrack
- AZ_TRSC_ReleaseModel
- AZ_ShowMessageBox_Info
- AZ_WindowType_OK
- AZ_GetTrackItemName
- AZ_GetTrackItemChildList
- AZ_Excel_OpenFile
- AZ_GetErrorCode
- AZ_ShowMessageBox_Error
- AZ_Excel_CloseFile
- AZ_Excel_SaveDocument
- AZ_Excel_OpenWorksheet
- AZ_Excel_SearchRowsInWorksheet
- AZ_GetRegionMarkerListMediaItem
- AZ_GetMediaItemNotes
- AZ_Excel_GetCellValue
- AZ_Excel_SetCellValue
- AZ_GetUserInputList
- AZ_AddRegionMarkerMediaItem
AZSTOKE_TRSC_CheckSimilarityCompare transcription results with the scriptBefore you run it
Reaperにボイスのメディアを並べる 台本用のExcelファイルを用意する
Script
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()Line by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ******** AZSTOKE_TRSC_OutputToProject参照 ******
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 trscTrackend- ******** AZSTOKE_TRSC_OutputToProject参照 ここまで ******
- ******** AZSTOKE_TRSC_OutputToExcel参照 ******
C_id = "B" C_serif = "C" C_trsc = "D" C_similarity = "E" R_header = 2tableRnage = "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"]) doif row[C_id] == voiceID thenserif = 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)- ・ Excelのシートに一致度を書き込む
- ・ 書き込み完了のメッセージを表示
- 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- ******** AZSTOKE_TRSC_OutputToExcel参照 ここまで******
function CheckSimilarity(voiceTrack, scriptTable, threshold)errorVoiceList = {}- ・ 台本と一致していない可能性のあるボイスを格納するリスト
mediaItemList = reaper.AZ_GetMediaItemListInTrackItem(voiceTrack)- ・ ボイストラックのアイテムのリストを取得
for i, voiceMedia in pairs(mediaItemList) do voiceID = reaper.AZ_GetMediaItemName(voiceMedia)- ・ アイテムの名前をセリフIDとして取得
for j, scriptItem in pairs(scriptTable) do if scriptItem["ID"] == voiceID then- ・ 台本のテーブルからセリフIDが一致するアイテムを探す
if scriptItem["Similarity"] < threshold then- ・ 一致度が閾値を下回っている場合
table.insert(errorVoiceList, voiceID)- ・ 一致していない可能性のあるボイスのリストにセリフIDを追加
region = reaper.AZ_GetRegionMarkerListMediaItem(voiceMedia)[1]- ・ アイテムに対応するリージョンを取得
reaper.AZ_SetRegionMarkerColor(0, region["Index"], 255)- ・ 一致していない可能性のあるボイスのリージョンの色を赤に変更
endend endendreturn errorVoiceList- ・ 一致していない可能性のあるボイスのリストを返す
endfunction 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("台本と相違があるボイスはありませんでした。")
endendmain()
Screens
APIs used
- AZ_InsertUniqueChildTrack
- AZ_GetMediaItemListInTrackItem
- AZ_TRSC_LoadModel
- AZ_TRSC_FullForMediaItem
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemLength
- AZ_InsertNoteItemToTrack
- AZ_TRSC_ReleaseModel
- AZ_ShowMessageBox_Info
- AZ_WindowType_OK
- AZ_GetTrackItemName
- AZ_GetTrackItemChildList
- AZ_Excel_OpenFile
- AZ_GetErrorCode
- AZ_ShowMessageBox_Error
- AZ_Excel_CloseFile
- AZ_Excel_SaveDocument
- AZ_Excel_OpenWorksheet
- AZ_Excel_SearchRowsInWorksheet
- AZ_GetRegionMarkerListMediaItem
- AZ_GetMediaItemNotes
- AZ_Excel_GetCellValue
- AZ_CalcStringSimilarity
- AZ_Excel_SetCellValue
- AZ_GetMediaItemName
- AZ_SetRegionMarkerColor
- AZ_GetUserInputList
- AZ_AddRegionMarkerMediaItem
Before you run it
Reaperにボイスのメディアを並べる 台本用のExcelファイルを用意する
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * def Transcription(track): trscTrack = AZ_InsertUniqueChildTrack(track, "Transcription")[0] itemList = AZ_GetMediaItemListInTrackItem(track) # Load model ctx = AZ_TRSC_LoadModel() for item in itemList: # Transciption Execute text = AZ_TRSC_FullForMediaItem(ctx, item, "ja") itemStart = AZ_GetMediaItemStartTimeSeconds(item)[1] itemLength = AZ_GetMediaItemLength(item)[1] AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text) # Release model AZ_TRSC_ReleaseModel(ctx) AZ_ShowMessageBox_Info("Transcription completed.", "", AZ_WindowType_OK()) return trscTrack C_id = "B" C_serif = "C" C_trsc = "D" C_similarity = "E" R_header = 2 tableRange = "3:100,B" def OutputExcel(excelDocPath, voiceTrack): scriptTable = [] charID = AZ_GetTrackItemName(voiceTrack)[1] childListResult = AZ_GetTrackItemChildList(voiceTrack) childrenList = childListResult[-2] trscTrack = childrenList[0] itemList = AZ_GetMediaItemListInTrackItem(trscTrack) excelDoc = AZ_Excel_OpenFile(excelDocPath) if AZ_GetErrorCode() != 0: AZ_ShowMessageBox_Error("Failed to open the Excel file.", "Error", AZ_WindowType_OK()) return AZ_Excel_SaveDocument(excelDoc) if AZ_GetErrorCode() != 0: AZ_ShowMessageBox_Error("Please close the Excel file.", "Error", AZ_WindowType_OK()) return worksheet = AZ_Excel_OpenWorksheet(excelDoc, charID) if AZ_GetErrorCode() == 53: AZ_ShowMessageBox_Error("The worksheet does not exist.", "Error", AZ_WindowType_OK()) return for noteItem in itemList: region = AZ_GetRegionMarkerListMediaItem(noteItem)[0] voiceID = region["Name"] rows = AZ_Excel_SearchRowsInWorksheet(worksheet, voiceID, C_id, tableRange) trsc = AZ_GetMediaItemNotes(noteItem) exists = False for j, row in rows["Cells"].items(): if row[C_id] == voiceID: serif = AZ_Excel_GetCellValue(worksheet, C_serif + str(j)) similarity = AZ_CalcStringSimilarity(trsc, serif) AZ_Excel_SetCellValue(worksheet, C_trsc + str(j), trsc) AZ_Excel_SetCellValue(worksheet, C_similarity + str(j), similarity) Msg(voiceID + " transcription written to Excel.") scriptItem = { "ID": voiceID, "NoteItem": noteItem, "Serif": serif, "Trsc": trsc, "Similarity": similarity } scriptTable.append(scriptItem) exists = True if not exists: Msg(voiceID + " was not found in the worksheet.") AZ_Excel_SaveDocument(excelDoc) AZ_Excel_CloseFile(excelDoc) return scriptTable def CheckSimilarity(voiceTrack, scriptTable, threshold): errorVoiceList = [] mediaItemList = AZ_GetMediaItemListInTrackItem(voiceTrack) for voiceMedia in mediaItemList: voiceID = AZ_GetMediaItemName(voiceMedia)[1] for scriptItem in scriptTable: if scriptItem["ID"] == voiceID: if scriptItem["Similarity"] < threshold: errorVoiceList.append(voiceID) region = AZ_GetRegionMarkerListMediaItem(voiceMedia)[0] AZ_SetRegionMarkerColor(0, region["Index"], 255) return errorVoiceList def main(): excelDocPath = "D:\reapdock\voice\Scripts.xlsx" threshold = 80 retval, inputList = AZ_GetUserInputList("", 2, "Excel file path,Consistency threshold", excelDocPath + "," + str(threshold)) if not retval: return excelDocPath = inputList[0] threshold = int(inputList[1]) voiceTrack = AZ_GetTrackItemSelect(0, 0, 1) if voiceTrack is None: AZ_ShowMessageBox_Error("No track is selected.", "Error", AZ_WindowType_OK()) return # Create region markers itemList = AZ_GetMediaItemListInTrackItem(voiceTrack) for item in itemList: AZ_AddRegionMarkerMediaItem(item) Transcription(voiceTrack) scriptTable = OutputExcel(excelDocPath, voiceTrack) if scriptTable is None: Msg("Failed to write to Excel.") elif len(scriptTable) > 0: errorVoiceList = CheckSimilarity(voiceTrack, scriptTable, threshold) Msg("The following voice lines may not match the script.") ShowObject(errorVoiceList) else: Msg("No mismatched voice lines were found.") main()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ******** AZSTOKE_TRSC_OutputToProject参照 ******
def Transcription(track):trscTrack = AZ_InsertUniqueChildTrack(track, "Transcription")[0]itemList = AZ_GetMediaItemListInTrackItem(track)# Load model ctx = AZ_TRSC_LoadModel()for item in itemList:# Transciption Execute text = AZ_TRSC_FullForMediaItem(ctx, item, "ja")itemStart = AZ_GetMediaItemStartTimeSeconds(item)[1] itemLength = AZ_GetMediaItemLength(item)[1]AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text)# Release model AZ_TRSC_ReleaseModel(ctx)AZ_ShowMessageBox_Info("Transcription completed.", "", AZ_WindowType_OK())return trscTrack- ******** AZSTOKE_TRSC_OutputToProject参照 ここまで ******
- ******** AZSTOKE_TRSC_OutputToExcel参照 ******
C_id = "B" C_serif = "C" C_trsc = "D" C_similarity = "E" R_header = 2tableRange = "3:100,B"def OutputExcel(excelDocPath, voiceTrack):scriptTable = []charID = AZ_GetTrackItemName(voiceTrack)[1] childListResult = AZ_GetTrackItemChildList(voiceTrack) childrenList = childListResult[-2]trscTrack = childrenList[0]itemList = AZ_GetMediaItemListInTrackItem(trscTrack)excelDoc = AZ_Excel_OpenFile(excelDocPath)if AZ_GetErrorCode() != 0: AZ_ShowMessageBox_Error("Failed to open the Excel file.", "Error", AZ_WindowType_OK()) returnAZ_Excel_SaveDocument(excelDoc)if AZ_GetErrorCode() != 0: AZ_ShowMessageBox_Error("Please close the Excel file.", "Error", AZ_WindowType_OK()) returnworksheet = AZ_Excel_OpenWorksheet(excelDoc, charID)if AZ_GetErrorCode() == 53: AZ_ShowMessageBox_Error("The worksheet does not exist.", "Error", AZ_WindowType_OK()) returnfor noteItem in itemList: region = AZ_GetRegionMarkerListMediaItem(noteItem)[0]voiceID = region["Name"]rows = AZ_Excel_SearchRowsInWorksheet(worksheet, voiceID, C_id, tableRange)trsc = AZ_GetMediaItemNotes(noteItem)exists = False for j, row in rows["Cells"].items():if row[C_id] == voiceID:serif = AZ_Excel_GetCellValue(worksheet, C_serif + str(j))similarity = AZ_CalcStringSimilarity(trsc, serif)- ・ 文字起こし結果と台詞の一致度を計算
AZ_Excel_SetCellValue(worksheet, C_trsc + str(j), trsc) AZ_Excel_SetCellValue(worksheet, C_similarity + str(j), similarity)- ・ Excelのシートに一致度を書き込む
Msg(voiceID + " transcription written to Excel.")- ・ 書き込み完了のメッセージを表示
scriptItem = { "ID": voiceID, "NoteItem": noteItem, "Serif": serif, "Trsc": trsc, "Similarity": similarity }- ・ 台本の行データを格納するアイテムを作成
scriptTable.append(scriptItem)- ・ 台本のテーブルにアイテムを追加
exists = Trueif not exists: Msg(voiceID + " was not found in the worksheet.")AZ_Excel_SaveDocument(excelDoc) AZ_Excel_CloseFile(excelDoc)return scriptTable- ******** AZSTOKE_TRSC_OutputToExcel参照 ここまで******
def CheckSimilarity(voiceTrack, scriptTable, threshold):errorVoiceList = []- ・ 台本と一致していない可能性のあるボイスを格納するリスト
mediaItemList = AZ_GetMediaItemListInTrackItem(voiceTrack)- ・ ボイストラックのアイテムのリストを取得
for voiceMedia in mediaItemList: voiceID = AZ_GetMediaItemName(voiceMedia)[1]- ・ アイテムの名前をセリフIDとして取得
for scriptItem in scriptTable: if scriptItem["ID"] == voiceID:- ・ 台本のテーブルからセリフIDが一致するアイテムを探す
if scriptItem["Similarity"] < threshold:- ・ 一致度が閾値を下回っている場合
errorVoiceList.append(voiceID)- ・ 一致していない可能性のあるボイスのリストにセリフIDを追加
region = AZ_GetRegionMarkerListMediaItem(voiceMedia)[0]- ・ アイテムに対応するリージョンを取得
AZ_SetRegionMarkerColor(0, region["Index"], 255)- ・ 一致していない可能性のあるボイスのリージョンの色を赤に変更
return errorVoiceList- ・ 一致していない可能性のあるボイスのリストを返す
def main():excelDocPath = "D:\reapdock\voice\Scripts.xlsx" threshold = 80retval, inputList = AZ_GetUserInputList("", 2, "Excel file path,Consistency threshold", excelDocPath + "," + str(threshold)) if not retval: returnexcelDocPath = inputList[0] threshold = int(inputList[1])voiceTrack = AZ_GetTrackItemSelect(0, 0, 1)if voiceTrack is None: AZ_ShowMessageBox_Error("No track is selected.", "Error", AZ_WindowType_OK()) return# Create region markers itemList = AZ_GetMediaItemListInTrackItem(voiceTrack) for item in itemList: AZ_AddRegionMarkerMediaItem(item)Transcription(voiceTrack)scriptTable = OutputExcel(excelDocPath, voiceTrack)if scriptTable is None: Msg("Failed to write to Excel.")elif len(scriptTable) > 0:errorVoiceList = CheckSimilarity(voiceTrack, scriptTable, threshold)- ・ 台本と一致していない可能性のあるボイスのリストを取得
Msg("The following voice lines may not match the script.") ShowObject(errorVoiceList)- ・ 一致していない可能性のあるボイスのリストを表示
else: Msg("No mismatched voice lines were found.")main()
Screens
APIs used
- AZ_InsertUniqueChildTrack
- AZ_GetMediaItemListInTrackItem
- AZ_TRSC_LoadModel
- AZ_TRSC_FullForMediaItem
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemLength
- AZ_InsertNoteItemToTrack
- AZ_TRSC_ReleaseModel
- AZ_ShowMessageBox_Info
- AZ_WindowType_OK
- AZ_GetTrackItemName
- AZ_GetTrackItemChildList
- AZ_Excel_OpenFile
- AZ_GetErrorCode
- AZ_ShowMessageBox_Error
- AZ_Excel_CloseFile
- AZ_Excel_SaveDocument
- AZ_Excel_OpenWorksheet
- AZ_Excel_SearchRowsInWorksheet
- AZ_GetRegionMarkerListMediaItem
- AZ_GetMediaItemNotes
- AZ_Excel_GetCellValue
- AZ_CalcStringSimilarity
- AZ_Excel_SetCellValue
- AZ_GetMediaItemName
- AZ_SetRegionMarkerColor
- AZ_GetUserInputList
- AZ_AddRegionMarkerMediaItem
AZSTOKE_TRSC_NoticeToSlackNotify Slack of the comparison results with the scriptBefore you run it
Reaperにボイスのメディアを並べる 台本用のExcelファイルを用意する
Script
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()Line by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ******** AZSTOKE_TRSC_OutputToProject参照 ******
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 trscTrackend- ******** AZSTOKE_TRSC_OutputToProject参照 ここまで ******
- ******** AZSTOKE_TRSC_OutputToExcel参照 ******
C_id = "B" C_serif = "C" C_trsc = "D" C_similarity = "E" R_header = 2tableRnage = "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"]) doif row[C_id] == voiceID thenserif = 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- ******** AZSTOKE_TRSC_OutputToExcel参照 ここまで******
- ******** AZSTOKE_TRSC_CheckSimilarity参照 ******
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 thenif scriptItem["Similarity"] < threshold thentable.insert(errorVoiceList, voiceID)region = reaper.AZ_GetRegionMarkerListMediaItem(voiceMedia)[1]reaper.AZ_SetRegionMarkerColor(0, region["Index"], 255)endend endendreturn errorVoiceListend- ******** AZSTOKE_TRSC_CheckSimilarity参照 ここまで******
function GetSlackUserData()- ・ Slackのトークンと通知先ユーザーを取得する関数
slackDataPath = reaper.GetResourcePath() .. "\\AZData\\Slack"- ・ Slackのトークンと通知先ユーザーを保存するパス
token = reaper.AZ_ReadFile(slackDataPath, "slackToken.txt")userName = reaper.AZ_ReadFile(slackDataPath, "slackUser.txt")- ・ Slackのトークンと通知先ユーザーをファイルから読み込む
- if userName == "" or token == "" then retval, obj = reaper.AZ_GetUserInputList("SlackInfo", 2, "slackトークン,通知先ユーザー", token..","..userName )
- ・ Slackのトークンと通知先ユーザーが保存されていない場合、ユーザーに入力を促すダイアログを表示
token = obj[1] userName = obj[2] reaper.AZ_WriteFile(slackDataPath, "slackToken.txt", token, 0) reaper.AZ_WriteFile(slackDataPath, "slackUser.txt", userName, 0)- ・ ユーザーが入力したSlackのトークンと通知先ユーザーをファイルに保存
else token = reaper.AZ_ReplaceSearchString(token, "\n", "") userName = reaper.AZ_ReplaceSearchString(userName, "\n", "")- ・ ファイルから読み込んだSlackのトークンと通知先ユーザーから改行コードを削除 end
return token, userName- ・ Slackのトークンと通知先ユーザーを返す end
function SendSlackMessage(token, userName, caption, body)- ・ Slackにメッセージを送信する関数
slackMessage = reaper.AZ_Slack_PostDirectMessage(token, userName, caption, false)- ・ SlackのAPIを使用して、指定されたユーザーにメッセージを送信
if slackMessage ~= nil then- ・ メッセージの送信に成功した場合
t0 = os.clock() while os.clock() - t0 <= 5 do end- ・ メッセージの送信後、一定時間待機(SlackのAPIの反映を待つため)
slackMessage = reaper.AZ_Slack_ReplayMessage(token, slackMessage["Channel"], slackMessage["TimeStamp"], body)- ・ 送信したメッセージに対して、さらに内容を追加するためのAPIを呼び出す
end endfunction 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)- ・ Excelの書き込みに失敗した場合、Slackにエラーメッセージを送信
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 .. "```"- ・ 台本と一致していない可能性のあるボイスのリストをSlackに送信するためのメッセージを作成 ・ メッセージのフォーマットは、コードブロック(``` ~ ```)を使用して見やすくする
SendSlackMessage(token, userName, caption, message)- ・ 台本と一致していない可能性のあるボイスのリストをSlackに送信
else Msg(caption)- message = "台本と相違があるボイスはありませんでした。" Msg(message)
SendSlackMessage(token, userName, caption, message)- ・ 台本と相違があるボイスがなかった場合、その旨をSlackに送信 end
endmain()
Screens
APIs used
- AZ_InsertUniqueChildTrack
- AZ_GetMediaItemListInTrackItem
- AZ_TRSC_LoadModel
- AZ_TRSC_FullForMediaItem
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemLength
- AZ_InsertNoteItemToTrack
- AZ_TRSC_ReleaseModel
- AZ_ShowMessageBox_Info
- AZ_WindowType_OK
- AZ_GetTrackItemName
- AZ_GetTrackItemChildList
- AZ_Excel_OpenFile
- AZ_GetErrorCode
- AZ_ShowMessageBox_Error
- AZ_Excel_CloseFile
- AZ_Excel_SaveDocument
- AZ_Excel_OpenWorksheet
- AZ_Excel_SearchRowsInWorksheet
- AZ_GetRegionMarkerListMediaItem
- AZ_GetMediaItemNotes
- AZ_Excel_GetCellValue
- AZ_CalcStringSimilarity
- AZ_Excel_SetCellValue
- AZ_GetMediaItemName
- AZ_SetRegionMarkerColor
- AZ_ReadFile
- AZ_GetUserInputList
- AZ_WriteFile
- AZ_ReplaceSearchString
- AZ_Slack_PostDirectMessage
- AZ_Slack_ReplayMessage
- AZ_AddRegionMarkerMediaItem
Before you run it
Reaperにボイスのメディアを並べる 台本用のExcelファイルを用意する
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * import time def Transcription(track): trscTrack = AZ_InsertUniqueChildTrack(track, "Transcription")[0] itemList = AZ_GetMediaItemListInTrackItem(track) # Load model ctx = AZ_TRSC_LoadModel() for item in itemList: # Transciption Execute text = AZ_TRSC_FullForMediaItem(ctx, item, "ja") itemStart = AZ_GetMediaItemStartTimeSeconds(item)[1] itemLength = AZ_GetMediaItemLength(item)[1] AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text) # Release model AZ_TRSC_ReleaseModel(ctx) AZ_ShowMessageBox_Info("Transcription completed.", "", AZ_WindowType_OK()) return trscTrack C_id = "B" C_serif = "C" C_trsc = "D" C_similarity = "E" R_header = 2 tableRange = "3:100,B" def OutputExcel(excelDocPath, voiceTrack): scriptTable = [] charID = AZ_GetTrackItemName(voiceTrack)[1] childListResult = AZ_GetTrackItemChildList(voiceTrack) childrenList = childListResult[-2] trscTrack = childrenList[0] itemList = AZ_GetMediaItemListInTrackItem(trscTrack) excelDoc = AZ_Excel_OpenFile(excelDocPath) if AZ_GetErrorCode() != 0: AZ_ShowMessageBox_Error("Failed to open the Excel file.", "Error", AZ_WindowType_OK()) return AZ_Excel_SaveDocument(excelDoc) if AZ_GetErrorCode() != 0: AZ_ShowMessageBox_Error("Please close the Excel file.", "Error", AZ_WindowType_OK()) return worksheet = AZ_Excel_OpenWorksheet(excelDoc, charID) if AZ_GetErrorCode() == 53: AZ_ShowMessageBox_Error("The worksheet does not exist.", "Error", AZ_WindowType_OK()) return for noteItem in itemList: region = AZ_GetRegionMarkerListMediaItem(noteItem)[0] voiceID = region["Name"] rows = AZ_Excel_SearchRowsInWorksheet(worksheet, voiceID, C_id, tableRange) trsc = AZ_GetMediaItemNotes(noteItem) exists = False for j, row in rows["Cells"].items(): if row[C_id] == voiceID: serif = AZ_Excel_GetCellValue(worksheet, C_serif + str(j)) similarity = AZ_CalcStringSimilarity(trsc, serif) AZ_Excel_SetCellValue(worksheet, C_trsc + str(j), trsc) AZ_Excel_SetCellValue(worksheet, C_similarity + str(j), similarity) Msg(voiceID + " transcription written to Excel.") scriptItem = { "ID": voiceID, "NoteItem": noteItem, "Serif": serif, "Trsc": trsc, "Similarity": similarity } scriptTable.append(scriptItem) exists = True if not exists: Msg(voiceID + " was not found in the worksheet.") AZ_Excel_SaveDocument(excelDoc) AZ_Excel_CloseFile(excelDoc) return scriptTable def CheckSimilarity(voiceTrack, scriptTable, threshold): errorVoiceList = [] mediaItemList = AZ_GetMediaItemListInTrackItem(voiceTrack) for voiceMedia in mediaItemList: voiceID = AZ_GetMediaItemName(voiceMedia)[1] for scriptItem in scriptTable: if scriptItem["ID"] == voiceID: if scriptItem["Similarity"] < threshold: errorVoiceList.append(voiceID) region = AZ_GetRegionMarkerListMediaItem(voiceMedia)[0] AZ_SetRegionMarkerColor(0, region["Index"], 255) return errorVoiceList def GetSlackUserData(): slackDataPath = RPR_GetResourcePath() + "\\AZData\\Slack" token = AZ_ReadFile(slackDataPath, "slackToken.txt")[2] userName = AZ_ReadFile(slackDataPath, "slackUser.txt")[2] if not userName or not token: retval, obj = AZ_GetUserInputList("SlackInfo", 2, "slackToken,User to notify", token + "," + userName) token = obj[0] userName = obj[1] AZ_WriteFile(slackDataPath, "slackToken.txt", token, 0) AZ_WriteFile(slackDataPath, "slackToken.txt", userName, 0) else: token = AZ_ReplaceSearchString(token, "\n", "")[3] userName = AZ_ReplaceSearchString(userName, "\n", "")[3] return token, userName def SendSlackMessage(token, userName, caption, body): slackMessage = AZ_Slack_PostDirectMessage(token, userName, caption, False) if slackMessage is not None: time.sleep(5) slackMessage = AZ_Slack_ReplayMessage(token, slackMessage["Channel"], slackMessage["TimeStamp"], body) def main(): excelDocPath = "D:\reapdock\voice\Scripts.xlsx" threshold = 80 retval, inputList = AZ_GetUserInputList("", 2, "Excel file path,Consistency threshold", excelDocPath + "," + str(threshold)) if not retval: return token, userName = GetSlackUserData() excelDocPath = inputList[0] threshold = int(inputList[1]) voiceTrack = AZ_GetTrackItemSelect(0, 0, 1) if voiceTrack is None: AZ_ShowMessageBox_Error("No track is selected.", "Error", AZ_WindowType_OK()) return # Create region markers itemList = AZ_GetMediaItemListInTrackItem(voiceTrack) for item in itemList: AZ_AddRegionMarkerMediaItem(item) Transcription(voiceTrack) scriptTable = OutputExcel(excelDocPath, voiceTrack) caption = "Voice transcription and script check completed." if scriptTable is None: Msg(caption) message = "Failed to write to Excel." Msg(message) SendSlackMessage(token, userName, caption, message) elif len(scriptTable) > 0: Msg(caption) errorVoiceList = CheckSimilarity(voiceTrack, scriptTable, threshold) message = "The following voice lines may not match the script." Msg(message) ShowObject(errorVoiceList) message += "\n```" for errorVoice in errorVoiceList: message += errorVoice + "\n" message += "```" SendSlackMessage(token, userName, caption, message) else: Msg(caption) message = "No mismatched voice lines were found." Msg(message) SendSlackMessage(token, userName, caption, message) main()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * import time- ******** AZSTOKE_TRSC_OutputToProject参照 ******
def Transcription(track):trscTrack = AZ_InsertUniqueChildTrack(track, "Transcription")[0]itemList = AZ_GetMediaItemListInTrackItem(track)# Load model ctx = AZ_TRSC_LoadModel()for item in itemList:# Transciption Execute text = AZ_TRSC_FullForMediaItem(ctx, item, "ja")itemStart = AZ_GetMediaItemStartTimeSeconds(item)[1] itemLength = AZ_GetMediaItemLength(item)[1]AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text)# Release model AZ_TRSC_ReleaseModel(ctx)AZ_ShowMessageBox_Info("Transcription completed.", "", AZ_WindowType_OK())return trscTrack- ******** AZSTOKE_TRSC_OutputToProject参照 ここまで ******
- ******** AZSTOKE_TRSC_OutputToExcel参照 ******
C_id = "B" C_serif = "C" C_trsc = "D" C_similarity = "E" R_header = 2tableRange = "3:100,B"def OutputExcel(excelDocPath, voiceTrack):scriptTable = []charID = AZ_GetTrackItemName(voiceTrack)[1] childListResult = AZ_GetTrackItemChildList(voiceTrack) childrenList = childListResult[-2]trscTrack = childrenList[0]itemList = AZ_GetMediaItemListInTrackItem(trscTrack)excelDoc = AZ_Excel_OpenFile(excelDocPath)if AZ_GetErrorCode() != 0: AZ_ShowMessageBox_Error("Failed to open the Excel file.", "Error", AZ_WindowType_OK()) returnAZ_Excel_SaveDocument(excelDoc)if AZ_GetErrorCode() != 0: AZ_ShowMessageBox_Error("Please close the Excel file.", "Error", AZ_WindowType_OK()) returnworksheet = AZ_Excel_OpenWorksheet(excelDoc, charID)if AZ_GetErrorCode() == 53: AZ_ShowMessageBox_Error("The worksheet does not exist.", "Error", AZ_WindowType_OK()) returnfor noteItem in itemList: region = AZ_GetRegionMarkerListMediaItem(noteItem)[0]voiceID = region["Name"]rows = AZ_Excel_SearchRowsInWorksheet(worksheet, voiceID, C_id, tableRange)trsc = AZ_GetMediaItemNotes(noteItem)exists = False for j, row in rows["Cells"].items():if row[C_id] == voiceID:serif = AZ_Excel_GetCellValue(worksheet, C_serif + str(j))similarity = AZ_CalcStringSimilarity(trsc, serif)AZ_Excel_SetCellValue(worksheet, C_trsc + str(j), trsc) AZ_Excel_SetCellValue(worksheet, C_similarity + str(j), similarity)Msg(voiceID + " transcription written to Excel.")scriptItem = { "ID": voiceID, "NoteItem": noteItem, "Serif": serif, "Trsc": trsc, "Similarity": similarity }scriptTable.append(scriptItem)exists = Trueif not exists: Msg(voiceID + " was not found in the worksheet.")AZ_Excel_SaveDocument(excelDoc) AZ_Excel_CloseFile(excelDoc)return scriptTable- ******** AZSTOKE_TRSC_OutputToExcel参照 ここまで******
- ******** AZSTOKE_TRSC_CheckSimilarity参照 ******
def CheckSimilarity(voiceTrack, scriptTable, threshold):errorVoiceList = []mediaItemList = AZ_GetMediaItemListInTrackItem(voiceTrack)for voiceMedia in mediaItemList: voiceID = AZ_GetMediaItemName(voiceMedia)[1]for scriptItem in scriptTable: if scriptItem["ID"] == voiceID:if scriptItem["Similarity"] < threshold:errorVoiceList.append(voiceID)region = AZ_GetRegionMarkerListMediaItem(voiceMedia)[0]AZ_SetRegionMarkerColor(0, region["Index"], 255)return errorVoiceList- ******** AZSTOKE_TRSC_CheckSimilarity参照 ここまで******
def GetSlackUserData():- ・ Slackのトークンと通知先ユーザーを取得する関数
slackDataPath = RPR_GetResourcePath() + "\\AZData\\Slack"- ・ Slackのトークンと通知先ユーザーを保存するパス
token = AZ_ReadFile(slackDataPath, "slackToken.txt")[2]userName = AZ_ReadFile(slackDataPath, "slackUser.txt")[2]- ・ Slackのトークンと通知先ユーザーをファイルから読み込む
if not userName or not token: retval, obj = AZ_GetUserInputList("SlackInfo", 2, "slackToken,User to notify", token + "," + userName)- ・ Slackのトークンと通知先ユーザーが保存されていない場合、ユーザーに入力を促すダイアログを表示
token = obj[0] userName = obj[1] AZ_WriteFile(slackDataPath, "slackToken.txt", token, 0) AZ_WriteFile(slackDataPath, "slackToken.txt", userName, 0)- ・ ユーザーが入力したSlackのトークンと通知先ユーザーをファイルに保存
else: token = AZ_ReplaceSearchString(token, "\n", "")[3] userName = AZ_ReplaceSearchString(userName, "\n", "")[3]- ・ ファイルから読み込んだSlackのトークンと通知先ユーザーから改行コードを削除
return token, userName- ・ Slackのトークンと通知先ユーザーを返す
def SendSlackMessage(token, userName, caption, body):- ・ Slackにメッセージを送信する関数
slackMessage = AZ_Slack_PostDirectMessage(token, userName, caption, False)- ・ SlackのAPIを使用して、指定されたユーザーにメッセージを送信
if slackMessage is not None:- ・ メッセージの送信に成功した場合
time.sleep(5)- ・ メッセージの送信後、一定時間待機(SlackのAPIの反映を待つため)
slackMessage = AZ_Slack_ReplayMessage(token, slackMessage["Channel"], slackMessage["TimeStamp"], body)- ・ 送信したメッセージに対して、さらに内容を追加するためのAPIを呼び出す
def main():excelDocPath = "D:\reapdock\voice\Scripts.xlsx" threshold = 80retval, inputList = AZ_GetUserInputList("", 2, "Excel file path,Consistency threshold", excelDocPath + "," + str(threshold)) if not retval: returntoken, userName = GetSlackUserData()excelDocPath = inputList[0] threshold = int(inputList[1])voiceTrack = AZ_GetTrackItemSelect(0, 0, 1)if voiceTrack is None: AZ_ShowMessageBox_Error("No track is selected.", "Error", AZ_WindowType_OK()) return# Create region markers itemList = AZ_GetMediaItemListInTrackItem(voiceTrack) for item in itemList: AZ_AddRegionMarkerMediaItem(item)Transcription(voiceTrack)scriptTable = OutputExcel(excelDocPath, voiceTrack)caption = "Voice transcription and script check completed."- ・ ボイスの文字起こしと台本チェックが完了したことを知らせるキャプション
if scriptTable is None: Msg(caption)message = "Failed to write to Excel." Msg(message)SendSlackMessage(token, userName, caption, message)- ・ Excelの書き込みに失敗した場合、Slackにエラーメッセージを送信
elif len(scriptTable) > 0: Msg(caption)errorVoiceList = CheckSimilarity(voiceTrack, scriptTable, threshold)message = "The following voice lines may not match the script." Msg(message) ShowObject(errorVoiceList)- ・ 台本と一致していない可能性のあるボイスのリストをコンソール表示
message += "\n```" for errorVoice in errorVoiceList: message += errorVoice + "\n"message += "```"- ・ 台本と一致していない可能性のあるボイスのリストをSlackに送信するためのメッセージを作成 ・ メッセージのフォーマットは、コードブロック(``` ~ ```)を使用して見やすくする
SendSlackMessage(token, userName, caption, message)- ・ 台本と一致していない可能性のあるボイスのリストをSlackに送信
else: Msg(caption)message = "No mismatched voice lines were found." Msg(message)SendSlackMessage(token, userName, caption, message)- ・ 台本と相違があるボイスがなかった場合、その旨をSlackに送信
main()
Screens
APIs used
- AZ_InsertUniqueChildTrack
- AZ_GetMediaItemListInTrackItem
- AZ_TRSC_LoadModel
- AZ_TRSC_FullForMediaItem
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemLength
- AZ_InsertNoteItemToTrack
- AZ_TRSC_ReleaseModel
- AZ_ShowMessageBox_Info
- AZ_WindowType_OK
- AZ_GetTrackItemName
- AZ_GetTrackItemChildList
- AZ_Excel_OpenFile
- AZ_GetErrorCode
- AZ_ShowMessageBox_Error
- AZ_Excel_CloseFile
- AZ_Excel_SaveDocument
- AZ_Excel_OpenWorksheet
- AZ_Excel_SearchRowsInWorksheet
- AZ_GetRegionMarkerListMediaItem
- AZ_GetMediaItemNotes
- AZ_Excel_GetCellValue
- AZ_CalcStringSimilarity
- AZ_Excel_SetCellValue
- AZ_GetMediaItemName
- AZ_SetRegionMarkerColor
- AZ_ReadFile
- AZ_GetUserInputList
- AZ_WriteFile
- AZ_ReplaceSearchString
- AZ_Slack_PostDirectMessage
- AZ_Slack_ReplayMessage
- AZ_AddRegionMarkerMediaItem
AZSTOKE_TRSC_CutSilentExtract audio segments and transcribeBefore you run it
Reaperに音声ファイルを配置しておく
Script
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()Line by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER")- ・ RIGDOCKSをインポート
function CutSilent(mediaItem)- ・ 音声の無音部分を切り出す関数
cutItemList = {} silentSectionList = reaper.AZ_GetAudioSectionListInMediaItem(mediaItem, 0.2)- ・ 音声の無音部分を取得(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)- ・ 切り出したアイテムをリストに追加
endreaper.AZ_DeleteMediaItem(currentItem)- ・ 最後に残ったアイテムも削除(無音部分の最後のアイテム)
return cutItemList- ・ 切り出したアイテムのリストを返す
endfunction 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)
- ・ モデルを解放
returnendfunction main() mediaItemList = reaper.AZ_GetSelectedMediaItemList(0)- ・ 選択されているメディアイテムのリストを取得
cutAllItemList = {}- ・ 切り出したアイテムを格納するリストを初期化
for i, item in pairs(mediaItemList) docutItemList = CutSilent(item)- ・ 各アイテムに対して無音部分を切り出す関数を呼び出し、切り出したアイテムのリストを取得
for j, cutItem in pairs(cutItemList) do table.insert(cutAllItemList, cutItem) end- ・ 切り出したアイテムを全てのアイテムのリストに追加
endTranscription(cutAllItemList)- ・ 切り出したアイテムのリストに対して文字起こしを実行
- reaper.AZ_ShowMessageBox_Info("音声の切り出しが完了しました。", "", reaper.AZ_WindowType_OK())
- ・ 処理が完了したことをユーザーに通知
endmain()- ・ メイン関数を呼び出して処理を開始
Screens
APIs used
Before you run it
Reaperに音声ファイルを配置しておく
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * def CutSilent(mediaItem): cutItemList = [] silentSectionList = AZ_GetAudioSectionListInMediaItem(mediaItem, 0.2) currentItem = mediaItem prevSplitPos = 0 for i, section in enumerate(silentSectionList): leftItem, rigthItem = AZ_SplitMediaItem(currentItem, section["StartTime"] - prevSplitPos) prevSplitPos = section["StartTime"] AZ_DeleteMediaItem(leftItem) leftItem, rigthItem = AZ_SplitMediaItem(rigthItem, section["EndTime"] - prevSplitPos) prevSplitPos = section["EndTime"] currentItem = rigthItem cutItemList.append(leftItem) AZ_DeleteMediaItem(currentItem) return cutItemList def Transcription(mediaItemList): # Load Models ctx = AZ_TRSC_LoadModel() for i, item in enumerate(mediaItemList): track = RPR_GetMediaItemTrack(item) trscTrack = AZ_InsertUniqueChildTrack(track, "Transcription")[0] # Execute Transcription text = AZ_TRSC_FullForMediaItem(ctx, item, "ja") itemStart = AZ_GetMediaItemStartTimeSeconds(item)[1] itemLength = AZ_GetMediaItemLength(item)[1] AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text) # Release Models AZ_TRSC_ReleaseModel(ctx) return def main(): mediaItemList = AZ_GetSelectedMediaItemList(0) cutAllItemList = [] for i, item in enumerate(mediaItemList): cutItemList = CutSilent(item) for j, cutItem in enumerate(cutItemList): cutAllItemList.append(cutItem) Transcription(cutAllItemList) AZ_ShowMessageBox_Info("The audio extraction is complete.", "", AZ_WindowType_OK()) main()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import *- ・ RIGDOCKSをインポート
def CutSilent(mediaItem):- ・ 音声の無音部分を切り出す関数
cutItemList = [] silentSectionList = AZ_GetAudioSectionListInMediaItem(mediaItem, 0.2)- ・ 音声の無音部分を取得(0.2秒以上の無音部分を検出)
currentItem = mediaItem prevSplitPos = 0- ・ 現在のアイテムと前回の分割位置を初期化
for i, section in enumerate(silentSectionList):- ・ 無音部分のリストをループ
leftItem, rigthItem = AZ_SplitMediaItem(currentItem, section["StartTime"] - prevSplitPos)- ・ 無音部分の開始位置でアイテムを分割し、左側のアイテムと右側のアイテムを取得
prevSplitPos = section["StartTime"]- ・ 前回の分割位置を更新
AZ_DeleteMediaItem(leftItem)- ・ 左側のアイテムは無音部分なので削除
leftItem, rigthItem = AZ_SplitMediaItem(rigthItem, section["EndTime"] - prevSplitPos)- ・ 右側のアイテムを無音部分の終了位置で分割し、左側のアイテムと右側のアイテムを取得
prevSplitPos = section["EndTime"]- ・ 前回の分割位置を更新
currentItem = rigthItem- ・ 現在のアイテムを右側のアイテムに更新(次のループでこのアイテムを分割するため)
cutItemList.append(leftItem)- ・ 切り出したアイテムをリストに追加
AZ_DeleteMediaItem(currentItem)- ・ 最後に残ったアイテムも削除(無音部分の最後のアイテム)
return cutItemList- ・ 切り出したアイテムのリストを返す
def Transcription(mediaItemList):- ・ 文字起こしを実行する関数
# Load Models ctx = AZ_TRSC_LoadModel()- ・ モデルを読み込む
for i, item in enumerate(mediaItemList):- ・ メディアイテムのリストをループ
track = RPR_GetMediaItemTrack(item)- ・ アイテムのトラックを取得
trscTrack = AZ_InsertUniqueChildTrack(track, "Transcription")[0]- ・ トラックに文字起こし用の子トラックを追加
# Execute Transcription text = AZ_TRSC_FullForMediaItem(ctx, item, "ja")- ・ アイテムに対して文字起こしを実行(日本語で)
itemStart = AZ_GetMediaItemStartTimeSeconds(item)[1] itemLength = AZ_GetMediaItemLength(item)[1]- ・ アイテムの開始時間と長さを取得
AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text)- ・ 文字起こしの結果をノートアイテムとしてトラックに挿入
# Release Models AZ_TRSC_ReleaseModel(ctx)- ・ モデルを解放
returndef main(): mediaItemList = AZ_GetSelectedMediaItemList(0)- ・ 選択されているメディアイテムのリストを取得
cutAllItemList = []- ・ 切り出したアイテムを格納するリストを初期化
for i, item in enumerate(mediaItemList):cutItemList = CutSilent(item)- ・ 各アイテムに対して無音部分を切り出す関数を呼び出し、切り出したアイテムのリストを取得
for j, cutItem in enumerate(cutItemList): cutAllItemList.append(cutItem)- ・ 切り出したアイテムを全てのアイテムのリストに追加
Transcription(cutAllItemList)- ・ 切り出したアイテムのリストに対して文字起こしを実行
AZ_ShowMessageBox_Info("The audio extraction is complete.", "", AZ_WindowType_OK())- ・ 処理が完了したことをユーザーに通知
main()- ・ メイン関数を呼び出して処理を開始
Screens
APIs used
AZSTOKE_TRSC_OutputToGoogleSheetsWrite transcription results to a spreadsheetBefore you run it
Reaperに音声ファイルを配置しておく 台本用のスプレッドシートファイルを用意する
Script
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()Line by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ・ RIGDOCKSをインポート
function CutSilent(mediaItem)- ・ 音声の無音部分を切り出す関数
cutItemList = {} silentSectionList = reaper.AZ_GetAudioSectionListInMediaItem(mediaItem, 0.2) currentItem = mediaItem prevSplitPos = 0- ・ 現在のアイテムと前回の分割位置を初期化
baseName = reaper.AZ_GetMediaItemName(mediaItem)- ・ メディアの名前を取得してbaseNameに保存
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)- ・ baseNameに番号をつけて切り出したアイテムに名前を設定
- -- リージョン作成 reaper.AZ_AddRegionMarkerMediaItem(leftItem)
- ・ アイテム名をもとにリージョンを作成
table.insert(cutItemList, leftItem)- ・ 切り出したアイテムをリストに追加
endreaper.AZ_DeleteMediaItem(currentItem)- ・ 最後に残ったアイテムも削除(無音部分の最後のアイテム)
return cutItemList- ・ 切り出したアイテムのリストを返す
end- -------- ここから REAPDOCK AZSTOKE_TRSC_CutSilentを参照 --------
function Transcription(mediaItemList)- -- モデルを読み込み ctx = reaper.AZ_TRSC_LoadModel()
trscTrackList = {}exists = {}for i, item in pairs(mediaItemList) dotrack = 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- -------- ここまで REAPDOCK AZSTOKE_TRSC_CutSilentを参照 --------
C_id = "B" C_serif = "C" C_trsc = "D"- ・ スプレッドシートの列を定義
R_header = 2- ・ スプレッドシートのヘッダー行を定義
tableRange = "B3:B100"- ・ スプレッドシートの検索範囲を定義(3行目から100行目までのB列)
function OutputGSheet(spreadSheetId, sheetId, trscTrackList)- ・ スプレッドシートに文字起こし結果を出力する関数
connection = reaper.AZ_GSheet_Connect_UserAccount(spreadSheetId)- ・ スプレッドシートIDを指定して接続
- 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"]- ・ リージョン名からvoiceIDを取得(これがセリフIDになる想定)
trsc = reaper.AZ_GetMediaItemNotes(noteItem)- ・ アイテムのノートから文字起こし結果を取得
rows = reaper.AZ_GSheet_SearchRowsInWorksheet(connection, sheetId, voiceID, C_id, tableRange)- ・ シートの指定範囲からセリフIDと一致する行を検索
if #rows["Cells"] == 0 then- Msg(voiceID .. " : 存在しません。")
- ・ 検索結果が0件の場合、存在しない旨をメッセージ表示
elserowNumber = rows["Cells"][1]["RowNumber"]- ・ 検索結果が存在する場合、最初の一致行の行番号を取得
reaper.AZ_GSheet_SetCellValue(connection, sheetId, C_trsc .. rowNumber, trsc)- ・ 取得したD列の行番号のセルに文字起こし結果を書き込む
- Msg(voiceID .. " : 文字起こしを書き込みました。")
- ・ 書き込み完了のメッセージ表示
end end endreaper.AZ_GSheet_Disconnect(connection)- ・ シートから切断
endfunction 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)- ・ スプレッドシートIDとシートIDを取得し、シートIDを数値に変換
mediaItemList = reaper.AZ_GetSelectedMediaItemList(0)- ・ 選択されているメディアイテムのリストを取得
cutAllItemList = {}- ・ 切り出したアイテムを格納するリストを初期化
for i, item in pairs(mediaItemList) docutItemList = CutSilent(item)- ・ 各アイテムに対して無音部分を切り出す関数を呼び出し、切り出したアイテムのリストを取得
for j, cutItem in pairs(cutItemList) do table.insert(cutAllItemList, cutItem) end- ・ 切り出したアイテムを全てのアイテムのリストに追加
endtrscTrackList = Transcription(cutAllItemList)- ・ 切り出したアイテムのリストに対して文字起こしを実行
OutputGSheet(spreadSheetId, sheetId, trscTrackList)- ・ 文字起こしした結果をスプレッドシートに出力
endmain()- ・ メイン関数を呼び出して処理を開始
Screens
APIs used
- AZ_GetAudioSectionListInMediaItem
- AZ_SplitMediaItem
- AZ_DeleteMediaItem
- AZ_GetMediaItemName
- AZ_FormatNumDigit
- AZ_SetMediaItemName
- AZ_AddRegionMarkerMediaItem
- AZ_TRSC_LoadModel
- AZ_TRSC_FullForMediaItem
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemLength
- AZ_InsertUniqueChildTrack
- AZ_InsertNoteItemToTrack
- AZ_TRSC_ReleaseModel
- AZ_GSheet_Connect_UserAccount
- AZ_GetMediaItemListInTrackItem
- AZ_GetRegionMarkerListMediaItem
- AZ_GetMediaItemNotes
- AZ_GSheet_SearchRowsInWorksheet
- AZ_GSheet_SetCellValue
- AZ_GSheet_Disconnect
- AZ_GetUserInputList
- AZ_GetSelectedMediaItemList
Before you run it
Reaperに音声ファイルを配置しておく 台本用のスプレッドシートファイルを用意する
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * def CutSilent(mediaItem): cutItemList = [] silentSectionList = AZ_GetAudioSectionListInMediaItem(mediaItem, 0.2) currentItem = mediaItem prevSplitPos = 0 baseName = AZ_GetMediaItemName(mediaItem)[1] number = 1 for section in silentSectionList: leftItem, rightItem = AZ_SplitMediaItem(currentItem, section["StartTime"] - prevSplitPos) prevSplitPos = section["StartTime"] AZ_DeleteMediaItem(leftItem) leftItem, rightItem = AZ_SplitMediaItem(rightItem, section["EndTime"] - prevSplitPos) prevSplitPos = section["EndTime"] currentItem = rightItem name = baseName + "_" + AZ_FormatNumDigit(number, 2)[2] AZ_SetMediaItemName(leftItem, name) AZ_AddRegionMarkerMediaItem(leftItem) cutItemList.append(leftItem) number = number + 1 AZ_DeleteMediaItem(currentItem) return cutItemList def Transcription(mediaItemList): ctx = AZ_TRSC_LoadModel() trscTrackList = [] for item in mediaItemList: track = RPR_GetMediaItemTrack(item) trscTrack = AZ_InsertUniqueChildTrack(track, "Transcription")[0] text = AZ_TRSC_FullForMediaItem(ctx, item, "ja") itemStart = AZ_GetMediaItemStartTimeSeconds(item)[1] itemLength = AZ_GetMediaItemLength(item)[1] AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text) if trscTrack not in trscTrackList: trscTrackList.append(trscTrack) AZ_TRSC_ReleaseModel(ctx) return trscTrackList C_id = "B" C_serif = "C" C_trsc = "D" R_header = 2 tableRange = "B3:B100" def OutputGSheet(spreadSheetId, sheetId, trscTrackList): connection = AZ_GSheet_Connect_UserAccount(spreadSheetId) for trscTrack in trscTrackList: itemList = AZ_GetMediaItemListInTrackItem(trscTrack) for noteItem in itemList: region = AZ_GetRegionMarkerListMediaItem(noteItem)[0] voiceID = region["Name"] trsc = AZ_GetMediaItemNotes(noteItem) rows = AZ_GSheet_SearchRowsInWorksheet(connection, sheetId, voiceID, C_id, tableRange) if len(rows["Cells"]) == 0: Msg(voiceID + " : is not existed") else: rowNumber = rows["Cells"][0]["RowNumber"] AZ_GSheet_SetCellValue(connection, sheetId, C_trsc + str(rowNumber), trsc) Msg(voiceID + " : Transcription has been written") AZ_GSheet_Disconnect(connection) def main(): retval, inputList = AZ_GetUserInputList("", 2, "SpreadSheetID,SheetID", ",") if not retval: return spreadSheetId = inputList[0] sheetId = int(inputList[1]) mediaItemList = AZ_GetSelectedMediaItemList(0) cutAllItemList = [] trscTrackList = [] for item in mediaItemList: cutItemList = CutSilent(item) for cutItem in cutItemList: cutAllItemList.append(cutItem) trscTrackList = Transcription(cutAllItemList) OutputGSheet(spreadSheetId, sheetId, trscTrackList) main()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ・ RIGDOCKSをインポート
def CutSilent(mediaItem):- ・ 音声の無音部分を切り出す関数
cutItemList = [] silentSectionList = AZ_GetAudioSectionListInMediaItem(mediaItem, 0.2) currentItem = mediaItem prevSplitPos = 0- ・ 現在のアイテムと前回の分割位置を初期化
baseName = AZ_GetMediaItemName(mediaItem)[1]- ・ メディアの名前を取得してbaseNameに保存
number = 1 for section in silentSectionList:- ・ 無音部分のリストをループ
leftItem, rightItem = AZ_SplitMediaItem(currentItem, section["StartTime"] - prevSplitPos)- ・ 無音部分の開始位置でアイテムを分割し、左側のアイテムと右側のアイテムを取得
prevSplitPos = section["StartTime"]- ・ 前回の分割位置を更新
AZ_DeleteMediaItem(leftItem)- ・ 左側のアイテムは無音部分なので削除
leftItem, rightItem = AZ_SplitMediaItem(rightItem, section["EndTime"] - prevSplitPos)- ・ 右側のアイテムを無音部分の終了位置で分割し、左側のアイテムと右側のアイテムを取得
prevSplitPos = section["EndTime"]- ・ 前回の分割位置を更新
currentItem = rightItem- ・ 現在のアイテムを右側のアイテムに更新(次のループでこのアイテムを分割するため)
name = baseName + "_" + AZ_FormatNumDigit(number, 2)[2] AZ_SetMediaItemName(leftItem, name)- ・ baseNameに番号をつけて切り出したアイテムに名前を設定
AZ_AddRegionMarkerMediaItem(leftItem)- ・ アイテム名をもとにリージョンを作成
cutItemList.append(leftItem)- ・ 切り出したアイテムをリストに追加
number = number + 1AZ_DeleteMediaItem(currentItem)- ・ 最後に残ったアイテムも削除(無音部分の最後のアイテム)
return cutItemList- ・ 切り出したアイテムのリストを返す
- -------- ここから REAPDOCK AZSTOKE_TRSC_CutSilentを参照 --------
def Transcription(mediaItemList):ctx = AZ_TRSC_LoadModel()trscTrackList = []for item in mediaItemList:track = RPR_GetMediaItemTrack(item)trscTrack = AZ_InsertUniqueChildTrack(track, "Transcription")[0]text = AZ_TRSC_FullForMediaItem(ctx, item, "ja")itemStart = AZ_GetMediaItemStartTimeSeconds(item)[1] itemLength = AZ_GetMediaItemLength(item)[1]AZ_InsertNoteItemToTrack(trscTrack, itemStart, itemLength, text)if trscTrack not in trscTrackList: trscTrackList.append(trscTrack)AZ_TRSC_ReleaseModel(ctx)return trscTrackList- -------- ここまで REAPDOCK AZSTOKE_TRSC_CutSilentを参照 --------
C_id = "B" C_serif = "C" C_trsc = "D"- ・ スプレッドシートの列を定義
R_header = 2- ・ スプレッドシートのヘッダー行を定義
tableRange = "B3:B100"- ・ スプレッドシートの検索範囲を定義(3行目から100行目までのB列)
def OutputGSheet(spreadSheetId, sheetId, trscTrackList):- ・ スプレッドシートに文字起こし結果を出力する関数
connection = AZ_GSheet_Connect_UserAccount(spreadSheetId)- ・ スプレッドシートIDを指定して接続
for trscTrack in trscTrackList:- ・ 文字起こし結果のトラックリストをループ
itemList = AZ_GetMediaItemListInTrackItem(trscTrack)- ・ 文字起こしトラック内にあるアイテムのリストを取得
for noteItem in itemList:- ・ 文字起こしアイテムリストをループ
region = AZ_GetRegionMarkerListMediaItem(noteItem)[0] voiceID = region["Name"]- ・ リージョン名からvoiceIDを取得(これがセリフIDになる想定)
trsc = AZ_GetMediaItemNotes(noteItem)- ・ アイテムのノートから文字起こし結果を取得
rows = AZ_GSheet_SearchRowsInWorksheet(connection, sheetId, voiceID, C_id, tableRange)- ・ シートの指定範囲からセリフIDと一致する行を検索
if len(rows["Cells"]) == 0:Msg(voiceID + " : is not existed")- ・ 検索結果が0件の場合、存在しない旨をメッセージ表示
else:rowNumber = rows["Cells"][0]["RowNumber"]- ・ 検索結果が存在する場合、最初の一致行の行番号を取得
AZ_GSheet_SetCellValue(connection, sheetId, C_trsc + str(rowNumber), trsc)- ・ 取得したD列の行番号のセルに文字起こし結果を書き込む
Msg(voiceID + " : Transcription has been written")- ・ 書き込み完了のメッセージ表示
AZ_GSheet_Disconnect(connection)- ・ シートから切断
def main():- ・ メイン関数
retval, inputList = AZ_GetUserInputList("", 2, "SpreadSheetID,SheetID", ",") if not retval: return- ・ ユーザー入力を取得(キャンセルの場合は終了)
spreadSheetId = inputList[0] sheetId = int(inputList[1])- ・ スプレッドシートIDとシートIDを取得し、シートIDを数値に変換
mediaItemList = AZ_GetSelectedMediaItemList(0)- ・ 選択されているメディアイテムのリストを取得
cutAllItemList = []- ・ 切り出したアイテムを格納するリストを初期化
trscTrackList = [] for item in mediaItemList:cutItemList = CutSilent(item)- ・ 各アイテムに対して無音部分を切り出す関数を呼び出し、切り出したアイテムのリストを取得
for cutItem in cutItemList: cutAllItemList.append(cutItem)- ・ 切り出したアイテムを全てのアイテムのリストに追加
trscTrackList = Transcription(cutAllItemList)- ・ 切り出したアイテムのリストに対して文字起こしを実行
OutputGSheet(spreadSheetId, sheetId, trscTrackList)- ・ 文字起こしした結果をスプレッドシートに出力
main()- ・ メイン関数を呼び出して処理を開始
Screens
APIs used
- AZ_GetAudioSectionListInMediaItem
- AZ_SplitMediaItem
- AZ_DeleteMediaItem
- AZ_GetMediaItemName
- AZ_FormatNumDigit
- AZ_SetMediaItemName
- AZ_AddRegionMarkerMediaItem
- AZ_TRSC_LoadModel
- AZ_TRSC_FullForMediaItem
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemLength
- AZ_InsertUniqueChildTrack
- AZ_InsertNoteItemToTrack
- AZ_TRSC_ReleaseModel
- AZ_GSheet_Connect_UserAccount
- AZ_GetMediaItemListInTrackItem
- AZ_GetRegionMarkerListMediaItem
- AZ_GetMediaItemNotes
- AZ_GSheet_SearchRowsInWorksheet
- AZ_GSheet_SetCellValue
- AZ_GSheet_Disconnect
- AZ_GetUserInputList
- AZ_GetSelectedMediaItemList
Excel9
AZSTOKE_Excel_InsertLength_1Import audio files into Reaper and record their lengths in ExcelBefore you run it
Excelファイルを用意する インポートする音声ファイルを用意する
Script
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) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ・RIGDOCKSをインポート
retval, inputList = reaper.AZ_GetUserInputList("", 2, "Source Path,Excel Path", ",")- ・必要事項の入力を要求
if retval thensourceParentPath = inputList[1]- ・入力値から音声ファイルの親フォルダのパスを取得
excelPath = inputList[2]- ・入力値からExcelファイルのパスを取得
track = reaper.AZ_InsertTrackSearchUniqueOnly(0, "work")- ・「work」という名前のトラックを作成
sourcePathList = reaper.AZ_GetFilePathList(sourceParentPath, "wav")- ・親フォルダの配下にある音声ファイルのパスを全て取得
items = reaper.AZ_InsertMediaItems(track, sourcePathList, 0, 1)- ・音声ファイルを「work」トラックに挿入
excel = reaper.AZ_Excel_OpenFile(excelPath)- ・エクセルファイルを開く
worksheet = reaper.AZ_Excel_OpenWorksheet(excel, "items")- ・エクセルファイルの「items」ワークシートを開く
for i, item in pairs(items)doitemName = 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"]) doresultRow = k end- ・検索結果の行番号を取得
if resultRow == "" then- ・検索結果の行番号がない→対応する行がない場合
searchResult = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, ".+", "A", ",A", true)- ・A列が空欄でない行を取得
newRow = 1for k, v in pairs(searchResult["Cells"]) do newRow = newRow + 1 end- ・A列が空欄の行の行番号を取得
reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 1, itemName)reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 2, itemLength)- ・新しい行として、メディアアイテム名と長さを記載
else- ・対応する行がある場合
cell = "B" .. resultRowreaper.AZ_Excel_SetCellValue(worksheet, cell, itemLength)- ・B列に長さを記載
endendreaper.AZ_Excel_SaveDocument(excel)- ・Excelファイルを保存
reaper.AZ_Excel_CloseFile(excel)- ・Excelファイルを閉じる
end
Screens
Before you run it
Excelファイルを用意する インポートする音声ファイルを用意する
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * retval, inputList = AZ_GetUserInputList("", 2, "Source Path,Excel Path", ",") if retval: sourceParentPath = inputList[0] excelPath = inputList[1] track = AZ_InsertTrackSearchUniqueOnly(0, "work")[0] sourcePathList = AZ_GetFilePathList(sourceParentPath, "wav") items = AZ_InsertMediaItems(track, sourcePathList, 0, 1, 0) excel = AZ_Excel_OpenFile(excelPath) worksheet = AZ_Excel_OpenWorksheet(excel, "items") for item in items: _,itemName,_ = AZ_GetMediaItemName(item) _,itemLength = AZ_GetMediaItemLength(item) searchResult = AZ_Excel_SearchRowsInWorksheet(worksheet, itemName, "A") resultRow = "" if searchResult["Cells"] is not None: for k in searchResult["Cells"]: resultRow = k if resultRow == "": searchResult = AZ_Excel_SearchRowsInWorksheet(worksheet, ".+", "A", ",A", True) newRow = 1 if searchResult["Cells"] is not None: for _ in searchResult["Cells"]: newRow += 1 AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 1, itemName) AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 2, itemLength) else: cell = "B" + str(resultRow) AZ_Excel_SetCellValue(worksheet, cell, itemLength) AZ_Excel_SaveDocument(excel) AZ_Excel_CloseFile(excel)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ・RIGDOCKSをインポート
retval, inputList = AZ_GetUserInputList("", 2, "Source Path,Excel Path", ",")- ・必要事項の入力を要求
if retval: sourceParentPath = inputList[0]- ・入力値から音声ファイルの親フォルダのパスを取得
excelPath = inputList[1]- ・入力値からExcelファイルのパスを取得
track = AZ_InsertTrackSearchUniqueOnly(0, "work")[0]- ・「work」という名前のトラックを作成
sourcePathList = AZ_GetFilePathList(sourceParentPath, "wav")- ・親フォルダの配下にある音声ファイルのパスを全て取得
items = AZ_InsertMediaItems(track, sourcePathList, 0, 1, 0)- ・音声ファイルを「work」トラックに挿入
excel = AZ_Excel_OpenFile(excelPath)- ・エクセルファイルを開く
worksheet = AZ_Excel_OpenWorksheet(excel, "items")- ・エクセルファイルの「items」ワークシートを開く
for item in items:_,itemName,_ = AZ_GetMediaItemName(item) _,itemLength = AZ_GetMediaItemLength(item)- ・メディアアイテムの名前と長さを取得
searchResult = AZ_Excel_SearchRowsInWorksheet(worksheet, itemName, "A")- ・ワークシート内にメディアアイテム名に対応する行があるか検索
resultRow = ""if searchResult["Cells"] is not None: for k in searchResult["Cells"]: resultRow = kif resultRow == "":- ・検索結果の行番号を取得
searchResult = AZ_Excel_SearchRowsInWorksheet(worksheet, ".+", "A", ",A", True)- ・A列が空欄でない行を取得
newRow = 1 if searchResult["Cells"] is not None: for _ in searchResult["Cells"]: newRow += 1- ・A列が空欄の行の行番号を取得
AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 1, itemName) AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 2, itemLength)- ・新しい行として、メディアアイテム名と長さを記載
else:- ・対応する行がある場合
cell = "B" + str(resultRow) AZ_Excel_SetCellValue(worksheet, cell, itemLength)- ・B列に長さを記載
AZ_Excel_SaveDocument(excel)- ・Excelファイルを保存
AZ_Excel_CloseFile(excel)- ・Excelファイルを閉じる
Screens
AZSTOKE_Excel_SetVolume_1Import audio files into Reaper and match volume values to the data in an Excel fileBefore you run it
Excelファイルを用意する インポートする音声ファイルを用意する
Script
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) endLine by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ・RIGDOCKSをインポート
retval, inputList = reaper.AZ_GetUserInputList("", 2, "Source Path,Excel Path", ",")- ・必要事項の入力を要求
if retval thensourceParentPath = inputList[1]- ・入力値から音声ファイルの親フォルダのパスを取得
excelPath = inputList[2]- ・入力値からExcelファイルのパスを取得
track = reaper.AZ_InsertTrackSearchUniqueOnly(0, "work")- ・「work」という名前のトラックを作成
sourcePathList = reaper.AZ_GetFilePathList(sourceParentPath, "wav")- ・親フォルダの配下にある音声ファイルのパスを全て取得
items = reaper.AZ_InsertMediaItems(track, sourcePathList, 0, 1)- ・音声ファイルを「work」トラックに挿入
excel = reaper.AZ_Excel_OpenFile(excelPath)- ・エクセルファイルを開く
worksheet = reaper.AZ_Excel_OpenWorksheet(excel, "volume")- ・エクセルファイルの「volume」ワークシートを開く
for i, item in pairs(items)doitemName = reaper.AZ_GetMediaItemName(item)- ・メディアアイテムの名前を取得
searchResult = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, itemName, "A")- ・ワークシート内にメディアアイテム名に対応する行があるか検索
volume = 0for k, v in pairs(searchResult["Cells"]) dovolume = v["B"]- ・対応する行がある場合、B列に記載された音量値を取得する
endif volume ~= 0 thenreaper.AZ_SetMediaItemVolume(item, volume)- ・音量値が取得できた場合のみ、メディアアイテムの音量値をその値に設定する
endendreaper.AZ_Excel_CloseFile(excel)- ・Excelファイルを閉じる
end
Screens
Before you run it
Excelファイルを用意する インポートする音声ファイルを用意する
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * retval, inputList = AZ_GetUserInputList("", 2, "Source Path,Excel Path", ",") if retval: sourceParentPath = inputList[0] excelPath = inputList[1] track = AZ_InsertTrackSearchUniqueOnly(0, "work")[0] sourcePathList = AZ_GetFilePathList(sourceParentPath, "wav") items = AZ_InsertMediaItems(track, sourcePathList, 0, 1, 0) excel = AZ_Excel_OpenFile(excelPath) worksheet = AZ_Excel_OpenWorksheet(excel, "volume") for item in items: _, itemName, _ = AZ_GetMediaItemName(item) searchResult = AZ_Excel_SearchRowsInWorksheet(worksheet, itemName, "A") volume = 0 for k, v in (searchResult.get("Cells") or {}).items(): volume = float(v.get("B") or 0) if volume != 0: AZ_SetMediaItemVolume(item, volume) AZ_Excel_CloseFile(excel)Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins")from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ・RIGDOCKSをインポート
retval, inputList = AZ_GetUserInputList("", 2, "Source Path,Excel Path", ",")- ・必要事項の入力を要求
if retval: sourceParentPath = inputList[0]- ・入力値から音声ファイルの親フォルダのパスを取得
excelPath = inputList[1]- ・入力値からExcelファイルのパスを取得
track = AZ_InsertTrackSearchUniqueOnly(0, "work")[0]- ・「work」という名前のトラックを作成
sourcePathList = AZ_GetFilePathList(sourceParentPath, "wav")- ・親フォルダの配下にある音声ファイルのパスを全て取得
items = AZ_InsertMediaItems(track, sourcePathList, 0, 1, 0)- ・音声ファイルを「work」トラックに挿入
excel = AZ_Excel_OpenFile(excelPath)- ・エクセルファイルを開く
worksheet = AZ_Excel_OpenWorksheet(excel, "volume")- ・エクセルファイルの「volume」ワークシートを開く
for item in items: _, itemName, _ = AZ_GetMediaItemName(item)- ・メディアアイテムの名前を取得
searchResult = AZ_Excel_SearchRowsInWorksheet(worksheet, itemName, "A")- ・ワークシート内にメディアアイテム名に対応する行があるか検索
volume = 0for k, v in (searchResult.get("Cells") or {}).items(): volume = float(v.get("B") or 0)- ・対応する行がある場合、B列に記載された音量値を取得する
if volume != 0: AZ_SetMediaItemVolume(item, volume)- ・音量値が取得できた場合のみ、メディアアイテムの音量値をその値に設定する
AZ_Excel_CloseFile(excel)- ・Excelファイルを閉じる
Screens
AZSTOKE_Excel_InsertAndSetLoudnessConfigure Perforce-managed audio files based on an Excel table and auto-implement them into Wwise (1)Before you run it
Excelファイルを用意する インポートする音声ファイルを用意する
Script
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()Line by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ・RIGDOCKSをインポート
p4URL = "********" p4UserName = "********" p4Password = "********" p4Workspace = "********"- ・perforceの接続情報を設定
function InsertAndSetLoudness(depotPath, excelPath)- ・関数定義、引数はデポパスとExcelパス
track, trackID = reaper.AZ_InsertTrackSearchUniqueOnly(0, "voice")- ・「voice」という名前のトラックを作成
trackCount = reaper.CountTrackMediaItems(track)- ・「voice」トラック内のメディアアイテム数を取得
endTime = reaper.AZ_GetTrackMediaEndTime(0, trackID, trackCount - 1)- ・最後のメディアアイテムの終了時間を取得
startPos = endTime + 3- ・新規挿入位置を最後のメディアアイテム終了時間の3秒後に設定
if reaper.AZ_P4_Connect(p4URL, p4UserName, p4Password)then- ・perforceに接続
filePathList = reaper.AZ_P4_ExportAudioToProject(p4Workspace, depotPath, "", -1, "wav")- ・デポパス配下の音声ファイルを全てプロジェクトにエクスポートし、パスのリストを取得
itemList = reaper.AZ_InsertMediaItems(track, filePathList, startPos, 1)- ・音声ファイルを「voice」トラックに挿入し、メディアアイテムのリストを取得
reaper.AZ_P4_Disconnect()- ・perforceから切断
endreaper.AZ_SetMediaItemListHANDAUTOMER(itemList, 2)- ・挿入したメディアアイテム全てにHANDAUTOMERを実行
excelDoc = reaper.AZ_Excel_OpenFile(excelPath)- ・Excelファイルを開く
sheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, "script")- ・「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 = trueMsg("name: " .. row["A"]) Msg("Loudness: " .. row["C"]) Msg("")- ・コンソールにメディアアイテム名とラウドネス値を表示
loudness = tonumber(row["C"])- ・対応する行がある場合、C列に記載されたラウドネス値を取得
endif exists == true then reaper.AZ_SetMediaItemLoudnessMaxMomentary(item, loudness)- ・ラウドネス値が取得できた場合のみ、メディアアイテムのラウドネス値をその値に設定する
end endreaper.AZ_Excel_CloseFile(excelDoc)- ・Excelファイルを閉じる
endfunction main()- ・メイン関数定義
retval, inputList = reaper.AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")- ・必要事項の入力を要求
if retval == false then return end- ・キャンセルされた場合、処理を中断
deptPath = inputList[1] excelPath = inputList[2]- ・入力値からデポパスとExcelパスを取得
InsertAndSetLoudness(deptPath, excelPath)- ・関数を実行
endmain()- ・メイン関数を実行
Screens
APIs used
- AZ_InsertTrackSearchUniqueOnly
- AZ_GetTrackMediaEndTime
- AZ_P4_Connect
- AZ_P4_ExportAudioToProject
- AZ_InsertMediaItems
- AZ_P4_Disconnect
- AZ_SetMediaItemListHANDAUTOMER
- AZ_Excel_OpenFile
- AZ_Excel_OpenWorksheet
- AZ_GetRandomColor
- AZ_GetMediaItemName
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemEndTime
- AZ_AddRegionMarker
- AZ_Excel_SearchRowsInWorksheet
- AZ_SetMediaItemLoudnessMaxMomentary
- AZ_Excel_CloseFile
- AZ_GetUserInputList
Before you run it
Excelファイルを用意する インポートする音声ファイルを用意する
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * p4URL = "********" p4UserName = "********" p4Password = "********" p4Workspace = "********" def InsertAndSetLoudness(depotPath, excelPath): track, _, _, trackID = AZ_InsertTrackSearchUniqueOnly(0, "voice") trackCount = RPR_CountTrackMediaItems(track) endTime = AZ_GetTrackMediaEndTime(0, trackID, trackCount - 1)[3] startPos = endTime + 3 if AZ_P4_Connect(p4URL, p4UserName, p4Password): filePathList = AZ_P4_ExportAudioToProject(p4Workspace, depotPath, "", -1, "wav") itemList = AZ_InsertMediaItems(track, filePathList, startPos, 1, 0) AZ_P4_Disconnect() AZ_SetMediaItemListHANDAUTOMER(itemList, 2) excelDoc = AZ_Excel_OpenFile(excelPath) sheet = AZ_Excel_OpenWorksheet(excelDoc, "script") color, _, _, _ = AZ_GetRandomColor() for item in itemList: itemName = AZ_GetMediaItemName(item)[1] itemStartPos = AZ_GetMediaItemStartTimeSeconds(item)[1] itemEndPos = AZ_GetMediaItemEndTime(item)[1] AZ_AddRegionMarker(0, itemStartPos, itemEndPos, itemName, -1, color) result = AZ_Excel_SearchRowsInWorksheet(sheet, itemName, "A", "", False) exists = False for row_num, row_data in result["Cells"].items(): exists = True Msg("name: " + row_data["A"]) Msg("Loudness: " + row_data["C"]) Msg("") loudness = float(row_data["C"]) if exists: AZ_SetMediaItemLoudnessMaxMomentary(item, loudness) AZ_Excel_CloseFile(excelDoc) def main(): retval, inputList = AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "") if not retval: return deptPath = inputList[0] excelPath = inputList[1] InsertAndSetLoudness(deptPath, excelPath) main()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ・RIGDOCKSをインポート
p4URL = "********" p4UserName = "********" p4Password = "********" p4Workspace = "********"- ・perforceの接続情報を設定
def InsertAndSetLoudness(depotPath, excelPath):- ・関数定義、引数はデポパスとExcelパス
track, _, _, trackID = AZ_InsertTrackSearchUniqueOnly(0, "voice")- ・「voice」という名前のトラックを作成
trackCount = RPR_CountTrackMediaItems(track)- ・「voice」トラック内のメディアアイテム数を取得
endTime = AZ_GetTrackMediaEndTime(0, trackID, trackCount - 1)[3]- ・最後のメディアアイテムの終了時間を取得
startPos = endTime + 3- ・新規挿入位置を最後のメディアアイテム終了時間の3秒後に設定
if AZ_P4_Connect(p4URL, p4UserName, p4Password):- ・perforceに接続
filePathList = AZ_P4_ExportAudioToProject(p4Workspace, depotPath, "", -1, "wav")- ・デポパス配下の音声ファイルを全てプロジェクトにエクスポートし、パスのリストを取得
itemList = AZ_InsertMediaItems(track, filePathList, startPos, 1, 0)- ・音声ファイルを「voice」トラックに挿入し、メディアアイテムのリストを取得
AZ_P4_Disconnect()- ・perforceから切断
AZ_SetMediaItemListHANDAUTOMER(itemList, 2)- ・挿入したメディアアイテム全てにHANDAUTOMERを実行
excelDoc = AZ_Excel_OpenFile(excelPath)- ・Excelファイルを開く
sheet = AZ_Excel_OpenWorksheet(excelDoc, "script")- ・「script」ワークシートを開く
color, _, _, _ = AZ_GetRandomColor()- ・ランダムな色を取得
for item in itemList:- ・挿入したメディアアイテム全てに対してループ
itemName = AZ_GetMediaItemName(item)[1]- ・メディアアイテムの名前を取得
itemStartPos = AZ_GetMediaItemStartTimeSeconds(item)[1] itemEndPos = AZ_GetMediaItemEndTime(item)[1]AZ_AddRegionMarker(0, itemStartPos, itemEndPos, itemName, -1, color)- ・メディアアイテムの範囲にリージョンを追加
result = AZ_Excel_SearchRowsInWorksheet(sheet, itemName, "A", "", False)- ・ワークシート内にメディアアイテム名に対応する行があるか検索
exists = Falsefor row_num, row_data in result["Cells"].items():- ・検索結果の最初の行を取得
exists = TrueMsg("name: " + row_data["A"]) Msg("Loudness: " + row_data["C"]) Msg("")- ・コンソールにメディアアイテム名とラウドネス値を表示
loudness = float(row_data["C"])if exists: AZ_SetMediaItemLoudnessMaxMomentary(item, loudness)- ・ラウドネス値が取得できた場合のみ、メディアアイテムのラウドネス値をその値に設定する
AZ_Excel_CloseFile(excelDoc)- ・Excelファイルを閉じる
def main():- ・メイン関数定義
retval, inputList = AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")- ・必要事項の入力を要求
if not retval: return- ・キャンセルされた場合、処理を中断
deptPath = inputList[0] excelPath = inputList[1]- ・入力値からデポパスとExcelパスを取得
InsertAndSetLoudness(deptPath, excelPath)- ・関数を実行
main()- ・メイン関数を実行
Screens
APIs used
- AZ_InsertTrackSearchUniqueOnly
- AZ_GetTrackMediaEndTime
- AZ_P4_Connect
- AZ_P4_ExportAudioToProject
- AZ_InsertMediaItems
- AZ_P4_Disconnect
- AZ_SetMediaItemListHANDAUTOMER
- AZ_Excel_OpenFile
- AZ_Excel_OpenWorksheet
- AZ_GetRandomColor
- AZ_GetMediaItemName
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemEndTime
- AZ_AddRegionMarker
- AZ_Excel_SearchRowsInWorksheet
- AZ_SetMediaItemLoudnessMaxMomentary
- AZ_Excel_CloseFile
- AZ_GetUserInputList
AZSTOKE_Excel_ImportToWwiseConfigure Perforce-managed audio files based on an Excel table and auto-implement them into Wwise (2)Before you run it
Excelファイルを用意する インポートする音声ファイルを用意する Wwiseプロジェクトを用意する
Script
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()Line by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- -------- ここから REAPDOCK InsertAndSetLoudnessを参照 --------
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 + 3if reaper.AZ_P4_Connect(p4URL, p4UserName, p4Password)thenfilePathList = reaper.AZ_P4_ExportAudioToProject(p4Workspace, depotPath, "", -1, "wav")itemList = reaper.AZ_InsertMediaItems(track, filePathList, startPos, 1)reaper.AZ_P4_Disconnect() endreaper.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 = trueMsg("name: " .. row["A"]) Msg("Loudness: " .. row["C"]) Msg("")loudness = tonumber(row["C"]) endif exists == true then reaper.AZ_SetMediaItemLoudnessMaxMomentary(item, loudness)end endreaper.AZ_Excel_CloseFile(excelDoc)end- -------- ここまで REAPDOCK InsertAndSetLoudnessを参照 --------
function ImportToWwise(excelPath)- ・リージョンをレンダリングし、Wwiseにインポートする関数を定義、引数はExcelパス
path = reaper.AZ_SetProjectPathFolder("Rec", 3)- ・プロジェクトフォルダ内に「Rec」フォルダを作成し、そのパスを取得
renderOptions = { OutputDir = path, Channels = 1, FileName = "$region", RenderingRangeType = 5, }- ・レンダリングオプションを設定
renderedFiles = reaper.AZ_RenderToAudioFile(0, renderOptions)- ・リージョンごとに音声ファイルをレンダリングし、そのパスのリストを取得
excelDoc = reaper.AZ_Excel_OpenFile(excelPath)- ・Excelファイルを開く
sheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, "script")- ・「script」ワークシートを開く
if reaper.AZ_Wwise_Connect("127.0.0.1", 8080)then- ・Wwiseに接続
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"]- ・対応する行がある場合、D~F列に記載されたWwiseパス情報を取得
sound = reaper.AZ_Wwise_CreateSoundSFX(wSoundPath, filePath, fileName, wSubFolder, true)- ・Wwiseにサウンドオブジェクトを作成
reaper.AZ_Wwise_DeleteObject(wEventPath .. "\\" .. sound["Name"])- ・既に同名のイベントオブジェクトが存在する場合は削除
event = reaper.AZ_Wwise_CreateEvent(wEventPath, sound["Name"], -1)- ・Wwiseにイベントオブジェクトを作成
reaper.AZ_Wwise_AddActionToEvent(event["ID"], 2, sound["ID"])- ・イベントにStopアクションを追加
reaper.AZ_Wwise_AddActionToEvent(event["ID"], 1, sound["ID"])- ・イベントにPlayアクションを追加
Msg("SoundPath: " .. sound["Path"]) Msg("EventPath: " .. event["Path"]) Msg("")- ・コンソールにWwiseパス情報を表示
end endendreaper.AZ_Wwise_SaveProject()- ・Wwiseプロジェクトを保存
reaper.AZ_Wwise_Disconnect()- ・Wwiseから切断
endreaper.AZ_Excel_CloseFile(excelDoc)- ・Excelファイルを閉じる
returnendfunction main()retval, inputList = reaper.AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")if retval == false then return enddeptPath = inputList[1] excelPath = inputList[2]InsertAndSetLoudness(deptPath, excelPath)ImportToWwise(excelPath)- ・リージョンをレンダリングし、Wwiseにインポートする関数を実行
endmain()
Screens
APIs used
- AZ_GetUserInputList
- AZ_InsertTrackSearchUniqueOnly
- AZ_GetTrackMediaEndTime
- AZ_P4_Connect
- AZ_P4_ExportAudioToProject
- AZ_InsertMediaItems
- AZ_P4_Disconnect
- AZ_SetMediaItemListHANDAUTOMER
- AZ_Excel_OpenFile
- AZ_Excel_OpenWorksheet
- AZ_GetRandomColor
- AZ_GetMediaItemName
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemEndTime
- AZ_AddRegionMarker
- AZ_Excel_SearchRowsInWorksheet
- AZ_SetMediaItemLoudnessMaxMomentary
- AZ_Excel_CloseFile
- AZ_SetProjectPathFolder
- AZ_RenderToAudioFile
- AZ_Wwise_Connect
- AZ_GetPathInfo
- AZ_Wwise_CreateSoundSFX
- AZ_Wwise_DeleteObject
- AZ_Wwise_CreateEvent
- AZ_Wwise_AddActionToEvent
- AZ_Wwise_SaveProject
- AZ_Wwise_Disconnect
Before you run it
Excelファイルを用意する インポートする音声ファイルを用意する Wwiseプロジェクトを用意する
Script
import sys, os sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * p4URL = "********" p4UserName = "********" p4Password = "********" p4Workspace = "********" def InsertAndSetLoudness(depotPath, excelPath): track, _, _, trackID = AZ_InsertTrackSearchUniqueOnly(0, "voice") trackCount = RPR_CountTrackMediaItems(track) endTime = AZ_GetTrackMediaEndTime(0, trackID, trackCount - 1)[3] startPos = endTime + 3 if AZ_P4_Connect(p4URL, p4UserName, p4Password): filePathList = AZ_P4_ExportAudioToProject(p4Workspace, depotPath, "", -1, "wav") itemList = AZ_InsertMediaItems(track, filePathList, startPos, 1, 0) AZ_P4_Disconnect() AZ_SetMediaItemListHANDAUTOMER(itemList, 2) excelDoc = AZ_Excel_OpenFile(excelPath) sheet = AZ_Excel_OpenWorksheet(excelDoc, "script") color, _, _, _ = AZ_GetRandomColor() for item in itemList: itemName = AZ_GetMediaItemName(item)[1] itemStartPos = AZ_GetMediaItemStartTimeSeconds(item)[1] itemEndPos = AZ_GetMediaItemEndTime(item)[1] AZ_AddRegionMarker(0, itemStartPos, itemEndPos, itemName, -1, color) result = AZ_Excel_SearchRowsInWorksheet(sheet, itemName, "A", "", False) key, row = next(iter(result["Cells"].items())) Msg("name: " + row["A"]) Msg("Loudness: " + row["C"]) Msg("") loudness = float(row["C"]) AZ_SetMediaItemLoudnessMaxMomentary(item, loudness) AZ_Excel_CloseFile(excelDoc) def ImportToWwise(excelPath): path = AZ_SetProjectPathFolder("Rec",3)[2] renderOptions = { "OutputDir": path, "Channels": 1, "FileName": "$region", "RenderingRangeType": 5, } renderedFiles = AZ_RenderToAudioFile(0, renderOptions)[0] excelDoc = AZ_Excel_OpenFile(excelPath) sheet = AZ_Excel_OpenWorksheet(excelDoc, "script") if AZ_Wwise_Connect("127.0.0.1",8080)[0]: for filePath in renderedFiles: fileName = AZ_GetPathInfo(filePath)["FileNameWithoutExtension"] result = AZ_Excel_SearchRowsInWorksheet(sheet, fileName, "A", "", False) exists = False key, row = next(iter(result["Cells"].items())) wSoundPath = row["D"] wEventPath = row["E"] wSubFolder = row["F"] sound = AZ_Wwise_CreateSoundSFX(wSoundPath, filePath, fileName, wSubFolder, True) AZ_Wwise_DeleteObject(wEventPath + "\\" + sound["Name"]) event = AZ_Wwise_CreateEvent(wEventPath, sound["Name"], -1) AZ_Wwise_AddActionToEvent(event["ID"], 2, sound["ID"]) AZ_Wwise_AddActionToEvent(event["ID"], 1, sound["ID"]) Msg("SoundPath: " + sound["Path"]) Msg("EventPath: " + event["Path"]) Msg("") AZ_Wwise_SaveProject() AZ_Wwise_Disconnect() AZ_Excel_CloseFile(excelDoc) def main(): retval, inputList = AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "") if not retval: return deptPath = inputList[0] excelPath = inputList[1] InsertAndSetLoudness(deptPath, excelPath) ImportToWwise(excelPath) main()Line by line日本語
import sys, os sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- -------- ここから REAPDOCK InsertAndSetLoudnessを参照 --------
p4URL = "********" p4UserName = "********" p4Password = "********" p4Workspace = "********"def InsertAndSetLoudness(depotPath, excelPath):track, _, _, trackID = AZ_InsertTrackSearchUniqueOnly(0, "voice")trackCount = RPR_CountTrackMediaItems(track)endTime = AZ_GetTrackMediaEndTime(0, trackID, trackCount - 1)[3]startPos = endTime + 3if AZ_P4_Connect(p4URL, p4UserName, p4Password):filePathList = AZ_P4_ExportAudioToProject(p4Workspace, depotPath, "", -1, "wav")itemList = AZ_InsertMediaItems(track, filePathList, startPos, 1, 0)AZ_P4_Disconnect()AZ_SetMediaItemListHANDAUTOMER(itemList, 2)excelDoc = AZ_Excel_OpenFile(excelPath)sheet = AZ_Excel_OpenWorksheet(excelDoc, "script")color, _, _, _ = AZ_GetRandomColor()for item in itemList: itemName = AZ_GetMediaItemName(item)[1] itemStartPos = AZ_GetMediaItemStartTimeSeconds(item)[1] itemEndPos = AZ_GetMediaItemEndTime(item)[1]AZ_AddRegionMarker(0, itemStartPos, itemEndPos, itemName, -1, color)result = AZ_Excel_SearchRowsInWorksheet(sheet, itemName, "A", "", False)key, row = next(iter(result["Cells"].items()))Msg("name: " + row["A"]) Msg("Loudness: " + row["C"]) Msg("")loudness = float(row["C"])AZ_SetMediaItemLoudnessMaxMomentary(item, loudness)AZ_Excel_CloseFile(excelDoc)- -------- ここまで REAPDOCK InsertAndSetLoudnessを参照 --------
def ImportToWwise(excelPath):- ・リージョンをレンダリングし、Wwiseにインポートする関数を定義、引数はExcelパス
path = AZ_SetProjectPathFolder("Rec",3)[2]- ・プロジェクトフォルダ内に「Rec」フォルダを作成し、そのパスを取得
renderOptions = { "OutputDir": path, "Channels": 1, "FileName": "$region", "RenderingRangeType": 5, }- ・レンダリングオプションを設定
renderedFiles = AZ_RenderToAudioFile(0, renderOptions)[0]- ・リージョンごとに音声ファイルをレンダリングし、そのパスのリストを取得
excelDoc = AZ_Excel_OpenFile(excelPath)- ・Excelファイルを開く
sheet = AZ_Excel_OpenWorksheet(excelDoc, "script")- ・「script」ワークシートを開く
if AZ_Wwise_Connect("127.0.0.1",8080)[0]:- ・Wwiseに接続
for filePath in renderedFiles:- ・レンダリングした音声ファイル全てに対してループ
fileName = AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]- ・音声ファイル名を取得
result = AZ_Excel_SearchRowsInWorksheet(sheet, fileName, "A", "", False)- ・ワークシート内に音声ファイル名に対応する行があるか検索
key, row = next(iter(result["Cells"].items()))- ・検索結果の最初の行を取得
wSoundPath = row["D"] wEventPath = row["E"] wSubFolder = row["F"]- ・対応する行がある場合、D~F列に記載されたWwiseパス情報を取得
sound = AZ_Wwise_CreateSoundSFX(wSoundPath, filePath, fileName, wSubFolder, True)- ・Wwiseにサウンドオブジェクトを作成
AZ_Wwise_DeleteObject(wEventPath + "\\" + sound["Name"])- ・既に同名のイベントオブジェクトが存在する場合は削除
event = AZ_Wwise_CreateEvent(wEventPath, sound["Name"], -1)- ・Wwiseにイベントオブジェクトを作成
AZ_Wwise_AddActionToEvent(event["ID"], 2, sound["ID"])- ・イベントにStopアクションを追加
AZ_Wwise_AddActionToEvent(event["ID"], 1, sound["ID"])- ・イベントにPlayアクションを追加
Msg("SoundPath: " + sound["Path"]) Msg("EventPath: " + event["Path"]) Msg("")- ・コンソールにWwiseパス情報を表示
AZ_Wwise_SaveProject()- ・Wwiseプロジェクトを保存
AZ_Wwise_Disconnect()- ・Wwiseから切断
AZ_Excel_CloseFile(excelDoc)- ・Excelファイルを閉じる
def main(): retval, inputList = AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")if not retval: returndeptPath = inputList[0] excelPath = inputList[1]InsertAndSetLoudness(deptPath, excelPath)ImportToWwise(excelPath)- ・リージョンをレンダリングし、Wwiseにインポートする関数を実行
main()
Screens
APIs used
- AZ_GetUserInputList
- AZ_InsertTrackSearchUniqueOnly
- AZ_GetTrackMediaEndTime
- AZ_P4_Connect
- AZ_P4_ExportAudioToProject
- AZ_InsertMediaItems
- AZ_P4_Disconnect
- AZ_SetMediaItemListHANDAUTOMER
- AZ_Excel_OpenFile
- AZ_Excel_OpenWorksheet
- AZ_GetRandomColor
- AZ_GetMediaItemName
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemEndTime
- AZ_AddRegionMarker
- AZ_Excel_SearchRowsInWorksheet
- AZ_SetMediaItemLoudnessMaxMomentary
- AZ_Excel_CloseFile
- AZ_SetProjectPathFolder
- AZ_RenderToAudioFile
- AZ_Wwise_Connect
- AZ_GetPathInfo
- AZ_Wwise_CreateSoundSFX
- AZ_Wwise_DeleteObject
- AZ_Wwise_CreateEvent
- AZ_Wwise_AddActionToEvent
- AZ_Wwise_SaveProject
- AZ_Wwise_Disconnect
AZSTOKE_Excel_GenerateAndSlackConfigure Perforce-managed audio files based on an Excel table and auto-implement them into Wwise (3)Before you run it
Excelファイルを用意する インポートする音声ファイルを用意する Wwiseプロジェクトを用意する
Script
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()Line by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- -------- ここから REAPDOCK InsertAndSetLoudnessを参照 --------
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 + 3if reaper.AZ_P4_Connect(p4URL, p4UserName, p4Password)thenfilePathList = reaper.AZ_P4_ExportAudioToProject(p4Workspace, depotPath, "", -1, "wav")itemList = reaper.AZ_InsertMediaItems(track, filePathList, startPos, 1)reaper.AZ_P4_Disconnect() endreaper.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 = trueMsg("name: " .. row["A"]) Msg("Loudness: " .. row["C"]) Msg("")loudness = tonumber(row["C"]) endif exists == true then reaper.AZ_SetMediaItemLoudnessMaxMomentary(item, loudness)end endreaper.AZ_Excel_CloseFile(excelDoc)end- -------- ここまで REAPDOCK InsertAndSetLoudnessを参照 --------
- -------- ここから REAPDOCK InsertAndSetLoudnessを参照 --------
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)thenfor i, filePath in pairs(renderedFiles) dofileName = 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 = truewSoundPath = 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 endendreaper.AZ_Wwise_SaveProject()reaper.AZ_Wwise_Disconnect()endreaper.AZ_Excel_CloseFile(excelDoc)returnend- -------- ここまで REAPDOCK InsertAndSetLoudness を参照 --------
function GenerateSoundBank()- ・サウンドバンクを生成する関数を定義
generatedLog = ""- ・生成ログ用の変数を初期化
if reaper.AZ_Wwise_Connect("127.0.0.1", 8080)then- ・Wwiseに接続
generatedLog = reaper.AZ_Wwise_GenerateSoundBank({"Voice"}, {"Windows"}, {"Japanese"})- ・「Voice」サウンドバンクを「Windows」プラットフォーム、「Japanese」言語で生成し、ログを取得
reaper.AZ_Wwise_Disconnect()- ・Wwiseから切断
endreturn generatedLog- ・生成ログを返す
endfunction GetSlackUserData()- ・Slackのユーザーデータを取得する関数を定義
slackDataPath = reaper.GetResourcePath() .. "\\AZData\\Slack"- ・Slackデータの保存先パスを設定
token = reaper.AZ_ReadFile(slackDataPath, "slackToken.txt")- ・Slackトークンをファイルから読み込み
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", "")- ・読み込んだ情報から改行コードを削除
endreturn token, userName- ・トークンとユーザー名を返す
endfunction SendSlackMessage(token, userName, caption, body)- ・Slackにメッセージを送信する関数を定義
slackMessage = reaper.AZ_Slack_PostDirectMessage(token, userName, caption, false)- ・指定したユーザーにダイレクトメッセージを送信し、メッセージ情報を取得
if slackMessage ~= nil then- ・メッセージ情報が取得できた場合
t0 = os.clock() while os.clock() - t0 <= 5 do end- ・5秒待機(Slackの仕様により、メッセージの編集が反映されるまで時間がかかるため)
slackMessage = reaper.AZ_Slack_ReplayMessage(token, slackMessage["Channel"], slackMessage["TimeStamp"], body)- ・取得したメッセージに対して返信メッセージを送信
end endfunction main()token, userName = GetSlackUserData()retval, inputList = reaper.AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")if retval == false then return enddeptPath = inputList[1] excelPath = inputList[2]InsertAndSetLoudness(deptPath, excelPath)ImportToWwise(excelPath)Msg("Generate Bank...")- ・サウンドバンク生成開始のメッセージを表示
generatedLog = GenerateSoundBank()- ・サウンドバンクを生成し、ログを取得
if #generatedLog == 0 then body = "Success!"- ・生成ログが存在しない場合、成功メッセージを設定
elsefor i, line in pairs(generatedLog) dobody = body .. line .. "\n"- ・生成ログが存在する場合、ログ内容をメッセージ本文に設定
endendMsg(body)- ・コンソールに生成結果を表示
SendSlackMessage(token, userName, "Wwise Generate Result", body)- ・Slackに生成結果を送信
endmain()
Screens
APIs used
- AZ_InsertTrackSearchUniqueOnly
- AZ_GetTrackMediaEndTime
- AZ_P4_Connect
- AZ_P4_ExportAudioToProject
- AZ_InsertMediaItems
- AZ_P4_Disconnect
- AZ_SetMediaItemListHANDAUTOMER
- AZ_Excel_OpenFile
- AZ_Excel_OpenWorksheet
- AZ_GetRandomColor
- AZ_GetMediaItemName
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemEndTime
- AZ_AddRegionMarker
- AZ_Excel_SearchRowsInWorksheet
- AZ_SetMediaItemLoudnessMaxMomentary
- AZ_Excel_CloseFile
- AZ_SetProjectPathFolder
- AZ_RenderToAudioFile
- AZ_Wwise_Connect
- AZ_GetPathInfo
- AZ_Wwise_CreateSoundSFX
- AZ_Wwise_DeleteObject
- AZ_Wwise_CreateEvent
- AZ_Wwise_AddActionToEvent
- AZ_Wwise_SaveProject
- AZ_Wwise_Disconnect
- AZ_Wwise_GenerateSoundBank
- AZ_ReadFile
- AZ_GetUserInputList
- AZ_WriteFile
- AZ_ReplaceSearchString
- AZ_Slack_PostDirectMessage
- AZ_Slack_ReplayMessage
Before you run it
Excelファイルを用意する インポートする音声ファイルを用意する Wwiseプロジェクトを用意する
Script
import sys, os sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * import time p4URL = "**********" p4UserName = "**********" p4Password = "**********" p4Workspace = "**********" slackProfilePath = RPR_GetResourcePath() + "\\AZData\\Slack" def InsertAndSetLoudness(depotPath, excelPath): track, _, _, trackID = AZ_InsertTrackSearchUniqueOnly(0, "voice") trackCount = RPR_CountTrackMediaItems(track) endTime = AZ_GetTrackMediaEndTime(0, trackID, trackCount - 1)[3] startPos = endTime + 3 if AZ_P4_Connect(p4URL, p4UserName, p4Password): filePathList = AZ_P4_ExportAudioToProject(p4Workspace, depotPath, "", -1, "wav") itemList = AZ_InsertMediaItems(track, filePathList, startPos, 1, 0) AZ_P4_Disconnect() AZ_SetMediaItemListHANDAUTOMER(itemList, 2) excelDoc = AZ_Excel_OpenFile(excelPath) sheet = AZ_Excel_OpenWorksheet(excelDoc, "script") color, _, _, _ = AZ_GetRandomColor() for item in itemList: itemName = AZ_GetMediaItemName(item)[1] itemStartPos = AZ_GetMediaItemStartTimeSeconds(item)[1] itemEndPos = AZ_GetMediaItemEndTime(item)[1] AZ_AddRegionMarker(0, itemStartPos, itemEndPos, itemName, -1, color) result = AZ_Excel_SearchRowsInWorksheet(sheet, itemName, "A", "", False) key, row = next(iter(result["Cells"].items())) Msg("name: " + row["A"]) Msg("Loudness: " + row["C"]) Msg("") loudness = float(row["C"]) AZ_SetMediaItemLoudnessMaxMomentary(item, loudness) AZ_Excel_CloseFile(excelDoc) def ImportToWwise(excelPath): path = AZ_SetProjectPathFolder("Rec",3)[2] renderOptions = { "OutputDir": path, "Channels": 1, "FileName": "$region", "RenderingRangeType": 5, } renderedFiles = AZ_RenderToAudioFile(0, renderOptions)[0] excelDoc = AZ_Excel_OpenFile(excelPath) sheet = AZ_Excel_OpenWorksheet(excelDoc, "script") if AZ_Wwise_Connect("127.0.0.1",8080)[0]: for filePath in renderedFiles: fileName = AZ_GetPathInfo(filePath)["FileNameWithoutExtension"] result = AZ_Excel_SearchRowsInWorksheet(sheet, fileName, "A", "", False) exists = False key, row = next(iter(result["Cells"].items())) wSoundPath = row["D"] wEventPath = row["E"] wSubFolder = row["F"] sound = AZ_Wwise_CreateSoundSFX(wSoundPath, filePath, fileName, wSubFolder, True) AZ_Wwise_DeleteObject(wEventPath + "\\" + sound["Name"]) event = AZ_Wwise_CreateEvent(wEventPath, sound["Name"], -1) AZ_Wwise_AddActionToEvent(event["ID"], 2, sound["ID"]) AZ_Wwise_AddActionToEvent(event["ID"], 1, sound["ID"]) Msg("SoundPath: " + sound["Path"]) Msg("EventPath: " + event["Path"]) Msg("") AZ_Wwise_SaveProject() AZ_Wwise_Disconnect() AZ_Excel_CloseFile(excelDoc) def GenerateSoundBank(): generatedLog = "" if AZ_Wwise_Connect("127.0.0.1", 8080)[0]: generatedLog = AZ_Wwise_GenerateSoundBank(["Voice"], ["Windows"], ["Japanese"]) AZ_Wwise_Disconnect() return generatedLog def GetSlackUserData(): slackDataPath = RPR_GetResourcePath() + "\\AZData\\Slack" token = AZ_ReadFile(slackDataPath, "slackToken.txt")[2] userName = AZ_ReadFile(slackDataPath, "slackUser.txt")[2] if token == "" or userName == "": retval, obj = AZ_GetUserInputList("SlackInfo", 2, "slackToken,SlackUser", token + "," + userName) token = obj[0] userName = obj[1] AZ_WriteFile(slackDataPath, "slackToken.txt", token, 0) AZ_WriteFile(slackDataPath, "slackUser.txt", userName, 0) else: token = AZ_ReplaceSearchString(token, "\n", "")[3] userName = AZ_ReplaceSearchString(userName, "\n", "")[3] return token, userName def SendSlackMessage(token, userName, caption, body): slackMessage = AZ_Slack_PostDirectMessage(token, userName, caption, False) if slackMessage is not None: t0 = time.perf_counter() while time.perf_counter() - t0 <= 5: time.sleep(0.01) AZ_Slack_ReplayMessage(token, slackMessage["Channel"], slackMessage["TimeStamp"], body) def main(): token, userName = GetSlackUserData() retval, inputList = AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "") if not retval: return deptPath = inputList[0] excelPath = inputList[1] InsertAndSetLoudness(deptPath, excelPath) ImportToWwise(excelPath) Msg("Generate Bank...") generatedLog = GenerateSoundBank() body = "" if len(generatedLog) == 0: body = "Success!" else: for line in generatedLog: body += line + "\n" Msg(body) SendSlackMessage(token, userName, "Wwise Generate Result", body) main()Line by line日本語
import sys, os sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * import time- ・timeをインポート
- -------- ここから REAPDOCK InsertAndSetLoudnessを参照 --------
p4URL = "**********" p4UserName = "**********" p4Password = "**********" p4Workspace = "**********"slackProfilePath = RPR_GetResourcePath() + "\\AZData\\Slack"def InsertAndSetLoudness(depotPath, excelPath):track, _, _, trackID = AZ_InsertTrackSearchUniqueOnly(0, "voice")trackCount = RPR_CountTrackMediaItems(track)endTime = AZ_GetTrackMediaEndTime(0, trackID, trackCount - 1)[3]startPos = endTime + 3if AZ_P4_Connect(p4URL, p4UserName, p4Password):filePathList = AZ_P4_ExportAudioToProject(p4Workspace, depotPath, "", -1, "wav")itemList = AZ_InsertMediaItems(track, filePathList, startPos, 1, 0)AZ_P4_Disconnect()AZ_SetMediaItemListHANDAUTOMER(itemList, 2)excelDoc = AZ_Excel_OpenFile(excelPath)sheet = AZ_Excel_OpenWorksheet(excelDoc, "script")color, _, _, _ = AZ_GetRandomColor()for item in itemList: itemName = AZ_GetMediaItemName(item)[1] itemStartPos = AZ_GetMediaItemStartTimeSeconds(item)[1] itemEndPos = AZ_GetMediaItemEndTime(item)[1]AZ_AddRegionMarker(0, itemStartPos, itemEndPos, itemName, -1, color)result = AZ_Excel_SearchRowsInWorksheet(sheet, itemName, "A", "", False)key, row = next(iter(result["Cells"].items()))Msg("name: " + row["A"]) Msg("Loudness: " + row["C"]) Msg("")loudness = float(row["C"])AZ_SetMediaItemLoudnessMaxMomentary(item, loudness)AZ_Excel_CloseFile(excelDoc)- -------- ここまで REAPDOCK InsertAndSetLoudnessを参照 --------
- -------- ここから REAPDOCK ImportToWwiseを参照 --------
def ImportToWwise(excelPath):path = AZ_SetProjectPathFolder("Rec",3)[2] renderOptions = { "OutputDir": path, "Channels": 1, "FileName": "$region", "RenderingRangeType": 5, }renderedFiles = AZ_RenderToAudioFile(0, renderOptions)[0]excelDoc = AZ_Excel_OpenFile(excelPath)sheet = AZ_Excel_OpenWorksheet(excelDoc, "script")if AZ_Wwise_Connect("127.0.0.1",8080)[0]:for filePath in renderedFiles:fileName = AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]result = AZ_Excel_SearchRowsInWorksheet(sheet, fileName, "A", "", False)exists = Falsekey, row = next(iter(result["Cells"].items()))wSoundPath = row["D"] wEventPath = row["E"] wSubFolder = row["F"]sound = AZ_Wwise_CreateSoundSFX(wSoundPath, filePath, fileName, wSubFolder, True)AZ_Wwise_DeleteObject(wEventPath + "\\" + sound["Name"]) event = AZ_Wwise_CreateEvent(wEventPath, sound["Name"], -1)AZ_Wwise_AddActionToEvent(event["ID"], 2, sound["ID"]) AZ_Wwise_AddActionToEvent(event["ID"], 1, sound["ID"])Msg("SoundPath: " + sound["Path"]) Msg("EventPath: " + event["Path"]) Msg("")AZ_Wwise_SaveProject()AZ_Wwise_Disconnect()AZ_Excel_CloseFile(excelDoc)- -------- ここまで REAPDOCK ImportToWwiseを参照 --------
def GenerateSoundBank():- ・サウンドバンクを生成する関数を定義
generatedLog = ""- ・生成ログ用の変数を初期化
if AZ_Wwise_Connect("127.0.0.1", 8080)[0]:- ・Wwiseに接続
generatedLog = AZ_Wwise_GenerateSoundBank(["Voice"], ["Windows"], ["Japanese"])- ・「Voice」サウンドバンクを「Windows」プラットフォーム、「Japanese」言語で生成し、ログを取得
AZ_Wwise_Disconnect()- ・Wwiseから切断
return generatedLog- ・生成ログを返す
def GetSlackUserData():- ・Slackのユーザーデータを取得する関数を定義
slackDataPath = RPR_GetResourcePath() + "\\AZData\\Slack"- ・Slackデータの保存先パスを設定
token = AZ_ReadFile(slackDataPath, "slackToken.txt")[2]- ・Slackトークンをファイルから読み込み
userName = AZ_ReadFile(slackDataPath, "slackUser.txt")[2]- ・通知先ユーザー名をファイルから読み込み
if token == "" or userName == "":- ・どちらかが空の場合、ユーザーに入力を促す
retval, obj = AZ_GetUserInputList("SlackInfo", 2, "slackToken,SlackUser", token + "," + userName) token = obj[0] userName = obj[1] AZ_WriteFile(slackDataPath, "slackToken.txt", token, 0) AZ_WriteFile(slackDataPath, "slackUser.txt", userName, 0)- ・入力された情報をファイルに保存
else: token = AZ_ReplaceSearchString(token, "\n", "")[3] userName = AZ_ReplaceSearchString(userName, "\n", "")[3]- ・読み込んだ情報から改行コードを削除
return token, userName- ・トークンとユーザー名を返す
def SendSlackMessage(token, userName, caption, body):- ・Slackにメッセージを送信する関数を定義
slackMessage = AZ_Slack_PostDirectMessage(token, userName, caption, False)- ・指定したユーザーにダイレクトメッセージを送信し、メッセージ情報を取得
if slackMessage is not None:- ・メッセージ情報が取得できた場合
t0 = time.perf_counter()while time.perf_counter() - t0 <= 5: time.sleep(0.01)- ・5秒待機(Slackの仕様により、メッセージの編集が反映されるまで時間がかかるため)
AZ_Slack_ReplayMessage(token, slackMessage["Channel"], slackMessage["TimeStamp"], body)- ・取得したメッセージに対して返信メッセージを送信
def main():token, userName = GetSlackUserData()retval, inputList = AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")if not retval: returndeptPath = inputList[0] excelPath = inputList[1]InsertAndSetLoudness(deptPath, excelPath)ImportToWwise(excelPath)Msg("Generate Bank...")- ・サウンドバンク生成開始のメッセージを表示
generatedLog = GenerateSoundBank()- ・サウンドバンクを生成し、ログを取得
body = ""- ・body変数を初期化
if len(generatedLog) == 0: body = "Success!"- ・生成ログが存在しない場合、成功メッセージを設定
else:for line in generatedLog: body += line + "\n"- ・生成ログが存在する場合、ログ内容をメッセージ本文に設定
Msg(body)- ・コンソールに生成結果を表示
SendSlackMessage(token, userName, "Wwise Generate Result", body)- ・Slackに生成結果を送信
main()
Screens
APIs used
- AZ_InsertTrackSearchUniqueOnly
- AZ_GetTrackMediaEndTime
- AZ_P4_Connect
- AZ_P4_ExportAudioToProject
- AZ_InsertMediaItems
- AZ_P4_Disconnect
- AZ_SetMediaItemListHANDAUTOMER
- AZ_Excel_OpenFile
- AZ_Excel_OpenWorksheet
- AZ_GetRandomColor
- AZ_GetMediaItemName
- AZ_GetMediaItemStartTimeSeconds
- AZ_GetMediaItemEndTime
- AZ_AddRegionMarker
- AZ_Excel_SearchRowsInWorksheet
- AZ_SetMediaItemLoudnessMaxMomentary
- AZ_Excel_CloseFile
- AZ_SetProjectPathFolder
- AZ_RenderToAudioFile
- AZ_Wwise_Connect
- AZ_GetPathInfo
- AZ_Wwise_CreateSoundSFX
- AZ_Wwise_DeleteObject
- AZ_Wwise_CreateEvent
- AZ_Wwise_AddActionToEvent
- AZ_Wwise_SaveProject
- AZ_Wwise_Disconnect
- AZ_Wwise_GenerateSoundBank
- AZ_ReadFile
- AZ_GetUserInputList
- AZ_WriteFile
- AZ_ReplaceSearchString
- AZ_Slack_PostDirectMessage
- AZ_Slack_ReplayMessage
AZSTOKE_Excel_GetP4FilesRecord Perforce-managed audio files in Excel and verify whether they are implemented in Wwise (1)Before you run it
Excelファイルを用意する 音声ファイルを用意する
Script
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()Line by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ・RIGDOCKSをインポート
p4URL = "********" p4UserName = "********" p4Password = "********" p4Workspace = "********"- ・Perforce接続情報を設定
function GetP4Files(depotPath, excelPath, sheetName)- ・P4からファイルを取得してExcelに書き出す関数を定義
filePathList = {}- ・ファイルパスリストの初期化
if reaper.AZ_P4_Connect(p4URL, p4UserName, p4Password)then- ・Perforceに接続
filePathList = reaper.AZ_P4_SyncFiles(p4Workspace, depotPath, -1, "wav")- ・WAVファイルを同期
reaper.AZ_P4_Disconnect()- ・Perforceから切断 end
excelDoc = reaper.AZ_Excel_OpenFile(excelPath)- ・Excelファイルを開く
worksheet = reaper.AZ_Excel_AddWorksheet(excelDoc, sheetName)- ・新しいワークシートを追加
row = 1reaper.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 + 1fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]- ・拡張子なしのファイル名を取得
reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, fileName)- ・ファイル名をExcelに記載
reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, filePath)- ・ローカルパスをExcelに記載
endreaper.AZ_Excel_SaveDocument(excelDoc)- ・Excelファイルを保存
reaper.AZ_Excel_CloseFile(excelDoc)- ・Excelファイルを閉じる
endfunction main()- ・メイン関数を定義
retval, inputList = reaper.AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")if retval == false then return enddeptPath = inputList[1] excelPath = inputList[2]- ・ユーザー入力を取得
sheetName = "voices_" ..os.date("%Y%m%d_%H%M%S", ts)- ・シート名を生成
GetP4Files(deptPath, excelPath, sheetName)- ・P4からファイルを取得してExcelに書き出す関数を実行
endmain()- ・メイン関数を実行
Screens
Before you run it
Excelファイルを用意する 音声ファイルを用意する
Script
import sys import time sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * p4URL = "**********" p4UserName = "**********" p4Password = "**********" p4Workspace = "**********" def GetP4Files(depotPath, excelPath, sheetName): filePathList = [] if AZ_P4_Connect(p4URL, p4UserName, p4Password): filePathList = AZ_P4_SyncFiles(p4Workspace, depotPath, -1, "wav") AZ_P4_Disconnect() excelDoc = AZ_Excel_OpenFile(excelPath) worksheet = AZ_Excel_AddWorksheet(excelDoc, sheetName) row = 1 AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, "Name") AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, "Local Path") for filePath in filePathList: row += 1 fileName = AZ_GetPathInfo(filePath)["FileNameWithoutExtension"] AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, fileName) AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, filePath) AZ_Excel_SaveDocument(excelDoc) AZ_Excel_CloseFile(excelDoc) def main(): retval, inputList = AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "") if not retval: return deptPath = inputList[0] excelPath = inputList[1] sheetName = "voices_" + time.strftime("%Y%m%d_%H%M%S") GetP4Files(deptPath, excelPath, sheetName) main()Line by line日本語
import sys import time- ・timeをインポート
sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ・RIGDOCKSをインポート
p4URL = "**********" p4UserName = "**********" p4Password = "**********" p4Workspace = "**********"- ・Perforce接続情報を設定
def GetP4Files(depotPath, excelPath, sheetName):- ・P4からファイルを取得してExcelに書き出す関数を定義
filePathList = []- ・ファイルパスリストの初期化
if AZ_P4_Connect(p4URL, p4UserName, p4Password):- ・Perforceに接続
filePathList = AZ_P4_SyncFiles(p4Workspace, depotPath, -1, "wav")- ・WAVファイルを同期
AZ_P4_Disconnect()- ・Perforceから切断
excelDoc = AZ_Excel_OpenFile(excelPath)- ・Excelファイルを開く
worksheet = AZ_Excel_AddWorksheet(excelDoc, sheetName)- ・新しいワークシートを追加
row = 1AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, "Name")AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, "Local Path")- ・ヘッダー行を設定
for filePath in filePathList:- ・ファイルパスリストをループ
row += 1fileName = AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]- ・拡張子なしのファイル名を取得
AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, fileName)- ・ファイル名をExcelに記載
AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, filePath)- ・ローカルパスをExcelに記載
AZ_Excel_SaveDocument(excelDoc)- ・Excelファイルを保存
AZ_Excel_CloseFile(excelDoc)- ・Excelファイルを閉じる
def main():- ・メイン関数を定義
retval, inputList = AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")if not retval: returndeptPath = inputList[0] excelPath = inputList[1]- ・ユーザー入力を取得
sheetName = "voices_" + time.strftime("%Y%m%d_%H%M%S")- ・シート名を生成
GetP4Files(deptPath, excelPath, sheetName)- ・P4からファイルを取得してExcelに書き出す関数を実行
main()- ・メイン関数を実行
Screens
AZSTOKE_Excel_SearchVoicesInWwiseRecord Perforce-managed audio files in Excel and verify whether they are implemented in Wwise (2)Before you run it
Excelファイルを用意する 音声ファイルを用意する
Script
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()Line by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ・RIGDOCKSをインポート
- -------- ここから REAPDOCK AZSTOKE_Excel_GetP4Filesを参照 --------
p4URL = "********" p4UserName = "********" p4Password = "********" p4Workspace = "********"function GetP4Files(depotPath, excelPath, sheetName)filePathList = {}if reaper.AZ_P4_Connect(p4URL, p4UserName, p4Password)thenfilePathList = reaper.AZ_P4_SyncFiles(p4Workspace, depotPath, -1, "wav")reaper.AZ_P4_Disconnect() endexcelDoc = reaper.AZ_Excel_OpenFile(excelPath)worksheet = reaper.AZ_Excel_AddWorksheet(excelDoc, sheetName)row = 1reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, "Name")reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, "Local Path")for i, filePath in pairs(filePathList) dorow = row + 1fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, fileName)reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, filePath)endreaper.AZ_Excel_SaveDocument(excelDoc)reaper.AZ_Excel_CloseFile(excelDoc)end- -------- ここまで REAPDOCK AZSTOKE_Excel_GetP4Filesを参照 --------
function SearchVoicesInWwise(excelPath, sheetName)- ・Wwise内のサウンドとイベントを検索し、Excelと照合する関数を定義
voiceSoundPath = "\\Actor-Mixer Hierarchy\\VOICE" voiceEventPath = "\\Events\\VOICE"- ・Wwise内のサウンドとイベントの親パスを設定
if reaper.AZ_Wwise_Connect("127.0.0.1", 8080) then- ・Wwiseに接続
soundTable = {} eventTable = {}- ・サウンドとイベントのテーブルを初期化
soundItemList = reaper.AZ_Wwise_SearchSoundItemFromName(voiceSoundPath, "")- ・親パス配下のサウンドオブジェクトを全て取得
for k, sound in pairs(soundItemList) dosoundTable[sound["Name"]] = trueend- ・サウンドオブジェクト名をテーブルに格納
eventList = reaper.AZ_Wwise_GetChildrenList(voiceEventPath, true)- ・親パス配下のイベントオブジェクトを全て取得
for k, event in pairs(eventList) doeventTable[event["Name"]] = trueend- ・イベントオブジェクト名をテーブルに格納
reaper.AZ_Wwise_Disconnect()- ・Wwiseから切断
endexcelDoc = reaper.AZ_Excel_OpenFile(excelPath)worksheet = reaper.AZ_Excel_OpenWorksheet(excelDoc, sheetName)- ・Excelファイルを開き、ワークシートを開く
rows = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, ".+", "A", "2:5000,A", true)- ・ワークシートのA列からサウンド名リストを取得
unimportedSoundList = {} unimportedEventList = {}- ・未実装サウンドリストと未実装イベントリストを初期化
for i, row in pairs(rows["Cells"]) do- ・各行をループ
if soundTable[row["A"]] ~= true thentable.insert(unimportedSoundList, row["A"]) end- ・サウンドテーブルに存在しない場合、未実装サウンドリストに追加
if eventTable[row["A"]] ~= true thentable.insert(unimportedEventList, row["A"]) end- ・イベントテーブルに存在しない場合、未実装イベントリストに追加
endreaper.AZ_Excel_CloseFile(excelDoc)- ・Excelファイルを閉じる
- Msg("以下のサウンドが実装されていません") ShowObject(unimportedSoundList) Msg("") Msg("以下のイベントが実装されていません") ShowObject(unimportedEventList)
- ・未実装サウンドとイベントをログ出力
return unimportedSoundList- ・未実装サウンドリストを返す
endfunction main()retval, inputList = reaper.AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")if retval == false then return enddeptPath = inputList[1] excelPath = inputList[2]sheetName = "voices_" ..os.date("%Y%m%d_%H%M%S", ts)GetP4Files(deptPath, excelPath, sheetName)unimportedSoundList = SearchVoicesInWwise(excelPath, sheetName)- ・メイン関数を定義し、P4からファイルを取得してExcelに書き出し、Wwise内のサウンドとイベントを検索して照合する関数を実行
reaper.AZ_ShowMessageBox_Info("success!", "", reaper.AZ_WindowType_OK())- ・完了メッセージを表示
endmain()
Screens
APIs used
- AZ_P4_Connect
- AZ_P4_SyncFiles
- AZ_P4_Disconnect
- AZ_Excel_OpenFile
- AZ_Excel_AddWorksheet
- AZ_Excel_SetCellValue_ByNumber
- AZ_GetPathInfo
- AZ_Excel_SaveDocument
- AZ_Excel_CloseFile
- AZ_Wwise_Connect
- AZ_Wwise_SearchSoundItemFromName
- AZ_Wwise_GetChildrenList
- AZ_Excel_OpenWorksheet
- AZ_Excel_SearchRowsInWorksheet
- AZ_GetUserInputList
- AZ_ShowMessageBox_Info
Before you run it
Excelファイルを用意する 音声ファイルを用意する
Script
import sys import time sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * p4URL = "**********" p4UserName = "**********" p4Password = "**********" p4Workspace = "**********" def GetP4Files(depotPath, excelPath, sheetName): filePathList = [] if AZ_P4_Connect(p4URL, p4UserName, p4Password): filePathList = AZ_P4_SyncFiles(p4Workspace, depotPath, -1, "wav") AZ_P4_Disconnect() excelDoc = AZ_Excel_OpenFile(excelPath) worksheet = AZ_Excel_AddWorksheet(excelDoc, sheetName) row = 1 AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, "Name") AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, "Local Path") for filePath in filePathList: row += 1 fileName = AZ_GetPathInfo(filePath)["FileNameWithoutExtension"] AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, fileName) AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, filePath) AZ_Excel_SaveDocument(excelDoc) AZ_Excel_CloseFile(excelDoc) def SearchVoicesInWwise(excelPath, sheetName): voiceSoundPath = "\\Actor-Mixer Hierarchy\\VOICE" voiceEventPath = "\\Events\\VOICE" soundTable = {} eventTable = {} if AZ_Wwise_Connect("127.0.0.1", 8080)[0]: soundItemList = AZ_Wwise_SearchSoundItemFromName(voiceSoundPath, "", True) for sound in soundItemList: soundTable[sound["Name"]] = True eventList = AZ_Wwise_GetChildrenList(voiceEventPath, True) for event in eventList: eventTable[event["Name"]] = True AZ_Wwise_Disconnect() excelDoc = AZ_Excel_OpenFile(excelPath) worksheet = AZ_Excel_OpenWorksheet(excelDoc, sheetName) rows = AZ_Excel_SearchRowsInWorksheet(worksheet, ".+", "A", "2:5000,A", True) unimportedSoundList = [] unimportedEventList = [] for key, row in rows["Cells"].items(): if soundTable.get(row["A"]) != True: unimportedSoundList.append(row["A"]) if eventTable.get(row["A"]) != True: unimportedEventList.append(row["A"]) AZ_Excel_CloseFile(excelDoc) Msg("The following Sounds are not implemented.") ShowObject(unimportedSoundList) Msg("") Msg("The following Events are not implemented.") ShowObject(unimportedEventList) return unimportedSoundList def main(): retval, inputList = AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "") if not retval: return deptPath = inputList[0] excelPath = inputList[1] sheetName = "voices_" + time.strftime("%Y%m%d_%H%M%S") GetP4Files(deptPath, excelPath, sheetName) unimportedSoundList = SearchVoicesInWwise(excelPath, sheetName) AZ_ShowMessageBox_Info("success!", "", AZ_WindowType_OK()) main()Line by line日本語
import sys import time sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ・RIGDOCKSをインポート
- -------- ここから REAPDOCK AZSTOKE_Excel_GetP4Filesを参照 --------
p4URL = "**********" p4UserName = "**********" p4Password = "**********" p4Workspace = "**********"def GetP4Files(depotPath, excelPath, sheetName):filePathList = []if AZ_P4_Connect(p4URL, p4UserName, p4Password):filePathList = AZ_P4_SyncFiles(p4Workspace, depotPath, -1, "wav")AZ_P4_Disconnect()excelDoc = AZ_Excel_OpenFile(excelPath)worksheet = AZ_Excel_AddWorksheet(excelDoc, sheetName)row = 1AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, "Name")AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, "Local Path")for filePath in filePathList:row += 1fileName = AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, fileName)AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, filePath)AZ_Excel_SaveDocument(excelDoc)AZ_Excel_CloseFile(excelDoc)- -------- ここまで REAPDOCK AZSTOKE_Excel_GetP4Filesを参照 --------
def SearchVoicesInWwise(excelPath, sheetName):- ・Wwise内のサウンドとイベントを検索し、Excelと照合する関数を定義
voiceSoundPath = "\\Actor-Mixer Hierarchy\\VOICE" voiceEventPath = "\\Events\\VOICE"- ・Wwise内のサウンドとイベントの親パスを設定
soundTable = {} eventTable = {}- ・サウンドとイベントのテーブルを初期化
if AZ_Wwise_Connect("127.0.0.1", 8080)[0]:- ・Wwiseに接続
soundItemList = AZ_Wwise_SearchSoundItemFromName(voiceSoundPath, "", True)- ・親パス配下のサウンドオブジェクトを全て取得
for sound in soundItemList: soundTable[sound["Name"]] = True- ・サウンドオブジェクト名をテーブルに格納
eventList = AZ_Wwise_GetChildrenList(voiceEventPath, True)- ・親パス配下のイベントオブジェクトを全て取得
for event in eventList: eventTable[event["Name"]] = True- ・イベントオブジェクト名をテーブルに格納
AZ_Wwise_Disconnect()- ・Wwiseから切断
excelDoc = AZ_Excel_OpenFile(excelPath)worksheet = AZ_Excel_OpenWorksheet(excelDoc, sheetName)- ・Excelファイルを開き、ワークシートを開く
rows = AZ_Excel_SearchRowsInWorksheet(worksheet, ".+", "A", "2:5000,A", True)- ・ワークシートのA列からサウンド名リストを取得
unimportedSoundList = [] unimportedEventList = []- ・未実装サウンドリストと未実装イベントリストを初期化
for key, row in rows["Cells"].items():- ・各行をループ
if soundTable.get(row["A"]) != True: unimportedSoundList.append(row["A"])- ・サウンドテーブルに存在しない場合、未実装サウンドリストに追加
if eventTable.get(row["A"]) != True: unimportedEventList.append(row["A"])- ・イベントテーブルに存在しない場合、未実装イベントリストに追加
AZ_Excel_CloseFile(excelDoc)- ・Excelファイルを閉じる
Msg("The following Sounds are not implemented.") ShowObject(unimportedSoundList) Msg("") Msg("The following Events are not implemented.") ShowObject(unimportedEventList)- ・未実装サウンドとイベントをログ出力
return unimportedSoundList- ・未実装サウンドリストを返す
def main():retval, inputList = AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")if not retval: returndeptPath = inputList[0] excelPath = inputList[1]sheetName = "voices_" + time.strftime("%Y%m%d_%H%M%S")GetP4Files(deptPath, excelPath, sheetName)unimportedSoundList = SearchVoicesInWwise(excelPath, sheetName)- ・メイン関数を定義し、P4からファイルを取得してExcelに書き出し、Wwise内のサウンドとイベントを検索して照合する関数を実行
AZ_ShowMessageBox_Info("success!", "", AZ_WindowType_OK())- ・完了メッセージを表示
main()
Screens
APIs used
- AZ_P4_Connect
- AZ_P4_SyncFiles
- AZ_P4_Disconnect
- AZ_Excel_OpenFile
- AZ_Excel_AddWorksheet
- AZ_Excel_SetCellValue_ByNumber
- AZ_GetPathInfo
- AZ_Excel_SaveDocument
- AZ_Excel_CloseFile
- AZ_Wwise_Connect
- AZ_Wwise_SearchSoundItemFromName
- AZ_Wwise_GetChildrenList
- AZ_Excel_OpenWorksheet
- AZ_Excel_SearchRowsInWorksheet
- AZ_GetUserInputList
- AZ_ShowMessageBox_Info
AZSTOKE_Excel_ImportunimportedFilesRecord Perforce-managed audio files in Excel and verify whether they are implemented in Wwise (3)Before you run it
Excelファイルを用意する 音声ファイルを用意する
Script
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()Line by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ・RIGDOCKSをインポート
- -------- ここから REAPDOCK AZSTOKE_Excel_GetP4Filesを参照 --------
p4URL = "********" p4UserName = "********" p4Password = "********" p4Workspace = "********"function GetP4Files(depotPath, excelPath, sheetName)filePathList = {}if reaper.AZ_P4_Connect(p4URL, p4UserName, p4Password)thenfilePathList = reaper.AZ_P4_SyncFiles(p4Workspace, depotPath, -1, "wav")reaper.AZ_P4_Disconnect() endexcelDoc = reaper.AZ_Excel_OpenFile(excelPath)worksheet = reaper.AZ_Excel_AddWorksheet(excelDoc, sheetName)row = 1reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, "Name")reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, "Local Path")for i, filePath in pairs(filePathList) dorow = row + 1fileName = reaper.AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, fileName)reaper.AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, filePath)endreaper.AZ_Excel_SaveDocument(excelDoc)reaper.AZ_Excel_CloseFile(excelDoc)end- -------- ここまで REAPDOCK AZSTOKE_Excel_GetP4Filesを参照 --------
- -------- ここから REAPDOCK AZSTOKE_Excel_SearchVoicesInWwiseを参照 --------
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) dosoundTable[sound["Name"]] = trueendeventList = reaper.AZ_Wwise_GetChildrenList(voiceEventPath, true) for k, event in pairs(eventList) doeventTable[event["Name"]] = trueendreaper.AZ_Wwise_Disconnect()endexcelDoc = 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"]) doif soundTable[row["A"]] ~= true thentable.insert(unimportedSoundList, row["A"]) end if eventTable[row["A"]] ~= true thentable.insert(unimportedEventList, row["A"]) endendreaper.AZ_Excel_CloseFile(excelDoc)- Msg("以下のサウンドが実装されていません") ShowObject(unimportedSoundList) Msg("") Msg("以下のイベントが実装されていません") ShowObject(unimportedEventList)
return unimportedSoundListend- -------- ここまで REAPDOCK AZSTOKE_Excel_SearchVoicesInWwiseを参照 --------
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)- ・Excelファイルを開き、ワークシートを開く
filePathList = {}- ・ファイルパスリストを初期化
for i, sound in pairs(unimportedSoundList) dorows = reaper.AZ_Excel_SearchRowsInWorksheet(worksheet, sound, "A", ",A:B")- ・未実装サウンド名で行を検索
for j, row in pairs(rows["Cells"]) do table.insert(filePathList, row["B"]) end- ・該当行のローカルパスをファイルパスリストに追加
endreaper.AZ_Excel_CloseFile(excelDoc)- ・Excelファイルを閉じる
mediaItems = reaper.AZ_InsertMediaItems(track, filePathList, 0, 1, 0)- ・未実装ファイルをReaperにインポート
reaper.AZ_SetMediaItemListHANDAUTOMER(mediaItems, 2)- ・HANDAUTOMERを実行
middlewareInfo = reaper.AZ_MIDDLESCANNER_Wwise_GetVolumeForMediaItemList(mediaItems, "SFX", "")- ・MIDDLESCANNERでWwiseの音量設定情報を取得
reaper.AZ_LOUDMATCHIFY_SetVolumeForMediaItemList(mediaItems, LoudnessTable, 0, middlewareInfo)- ・LOUDMATCHIFYで音量調整
endfunction main()retval, inputList = reaper.AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")if retval == false then return enddeptPath = 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())endmain()
Screens
APIs used
- AZ_P4_Connect
- AZ_P4_SyncFiles
- AZ_P4_Disconnect
- AZ_Excel_OpenFile
- AZ_Excel_AddWorksheet
- AZ_Excel_SetCellValue_ByNumber
- AZ_GetPathInfo
- AZ_Excel_SaveDocument
- AZ_Excel_CloseFile
- AZ_Wwise_Connect
- AZ_Wwise_SearchSoundItemFromName
- AZ_Wwise_GetChildrenList
- AZ_Excel_OpenWorksheet
- AZ_Excel_SearchRowsInWorksheet
- AZ_InsertTrackId
- AZ_InsertMediaItems
- AZ_SetMediaItemListHANDAUTOMER
- AZ_MIDDLESCANNER_Wwise_GetVolumeForMediaItemList
- AZ_LOUDMATCHIFY_SetVolumeForMediaItemList
- AZ_GetUserInputList
- AZ_ShowMessageBox_Info
Before you run it
Excelファイルを用意する 音声ファイルを用意する
Script
import sys import time sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * p4URL = "**********" p4UserName = "**********" p4Password = "**********" p4Workspace = "**********" def GetP4Files(depotPath, excelPath, sheetName): filePathList = [] if AZ_P4_Connect(p4URL, p4UserName, p4Password): filePathList = AZ_P4_SyncFiles(p4Workspace, depotPath, -1, "wav") AZ_P4_Disconnect() excelDoc = AZ_Excel_OpenFile(excelPath) worksheet = AZ_Excel_AddWorksheet(excelDoc, sheetName) row = 1 AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, "Name") AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, "Local Path") for filePath in filePathList: row += 1 fileName = AZ_GetPathInfo(filePath)["FileNameWithoutExtension"] AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, fileName) AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, filePath) AZ_Excel_SaveDocument(excelDoc) AZ_Excel_CloseFile(excelDoc) def SearchVoicesInWwise(excelPath, sheetName): voiceSoundPath = "\\Actor-Mixer Hierarchy\\VOICE" voiceEventPath = "\\Events\\VOICE" soundTable = {} eventTable = {} if AZ_Wwise_Connect("127.0.0.1", 8080)[0]: soundItemList = AZ_Wwise_SearchSoundItemFromName(voiceSoundPath, "", True) for sound in soundItemList: soundTable[sound["Name"]] = True eventList = AZ_Wwise_GetChildrenList(voiceEventPath, True) for event in eventList: eventTable[event["Name"]] = True AZ_Wwise_Disconnect() excelDoc = AZ_Excel_OpenFile(excelPath) worksheet = AZ_Excel_OpenWorksheet(excelDoc, sheetName) rows = AZ_Excel_SearchRowsInWorksheet(worksheet, ".+", "A", "2:5000,A", True) unimportedSoundList = [] unimportedEventList = [] for key, row in rows["Cells"].items(): if soundTable.get(row["A"]) != True: unimportedSoundList.append(row["A"]) if eventTable.get(row["A"]) != True: unimportedEventList.append(row["A"]) AZ_Excel_CloseFile(excelDoc) Msg("The following Sounds are not implemented.") ShowObject(unimportedSoundList) Msg("") Msg("The following Events are not implemented.") ShowObject(unimportedEventList) return unimportedSoundList LoudnessTable = [ {"Name": "AZ_vo", "Loudness": -24} ] def ImportunimportedFiles(excelPath, sheetName, unimportedSoundList): track = AZ_InsertTrackId(0, RPR_CountTracks(0), "unimported") excelDoc = AZ_Excel_OpenFile(excelPath) worksheet = AZ_Excel_OpenWorksheet(excelDoc, sheetName) filePathList = [] for sound in unimportedSoundList: rows = AZ_Excel_SearchRowsInWorksheet(worksheet, sound, "A", ",A:B") if not rows or "Cells" not in rows: continue for key, row in rows["Cells"].items(): filePathList.append(row["B"]) AZ_Excel_CloseFile(excelDoc) mediaItems = AZ_InsertMediaItems(track, filePathList, 0, 1, 0) AZ_SetMediaItemListHANDAUTOMER(mediaItems, 2) middlewareInfo = AZ_MIDDLESCANNER_Wwise_GetVolumeForMediaItemList(mediaItems, "SFX", "") AZ_LOUDMATCHIFY_SetVolumeForMediaItemList(mediaItems, LoudnessTable, 0, middlewareInfo) def main(): retval, inputList = AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "") if not retval: return deptPath = inputList[0] excelPath = inputList[1] sheetName = "voices_" + time.strftime("%Y%m%d_%H%M%S") GetP4Files(deptPath, excelPath, sheetName) unimportedSoundList = SearchVoicesInWwise(excelPath, sheetName) ImportunimportedFiles(excelPath, sheetName, unimportedSoundList) AZ_ShowMessageBox_Info("success!", "", AZ_WindowType_OK()) main()Line by line日本語
import sys import time sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ・RIGDOCKSをインポート
- -------- ここから REAPDOCK AZSTOKE_Excel_GetP4Filesを参照 --------
p4URL = "**********" p4UserName = "**********" p4Password = "**********" p4Workspace = "**********"def GetP4Files(depotPath, excelPath, sheetName):filePathList = []if AZ_P4_Connect(p4URL, p4UserName, p4Password):filePathList = AZ_P4_SyncFiles(p4Workspace, depotPath, -1, "wav")AZ_P4_Disconnect()excelDoc = AZ_Excel_OpenFile(excelPath)worksheet = AZ_Excel_AddWorksheet(excelDoc, sheetName)row = 1AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, "Name")AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, "Local Path")for filePath in filePathList:row += 1fileName = AZ_GetPathInfo(filePath)["FileNameWithoutExtension"]AZ_Excel_SetCellValue_ByNumber(worksheet, row, 1, fileName)AZ_Excel_SetCellValue_ByNumber(worksheet, row, 2, filePath)AZ_Excel_SaveDocument(excelDoc)AZ_Excel_CloseFile(excelDoc)- -------- ここまで REAPDOCK AZSTOKE_Excel_GetP4Filesを参照 --------
- -------- ここから REAPDOCK AZSTOKE_Excel_SearchVoicesInWwiseを参照 --------
def SearchVoicesInWwise(excelPath, sheetName):voiceSoundPath = "\\Actor-Mixer Hierarchy\\VOICE" voiceEventPath = "\\Events\\VOICE"soundTable = {} eventTable = {}if AZ_Wwise_Connect("127.0.0.1", 8080)[0]:soundItemList = AZ_Wwise_SearchSoundItemFromName(voiceSoundPath, "", True)for sound in soundItemList: soundTable[sound["Name"]] = TrueeventList = AZ_Wwise_GetChildrenList(voiceEventPath, True)for event in eventList: eventTable[event["Name"]] = TrueAZ_Wwise_Disconnect()excelDoc = AZ_Excel_OpenFile(excelPath)worksheet = AZ_Excel_OpenWorksheet(excelDoc, sheetName)rows = AZ_Excel_SearchRowsInWorksheet(worksheet, ".+", "A", "2:5000,A", True)unimportedSoundList = [] unimportedEventList = []for key, row in rows["Cells"].items():if soundTable.get(row["A"]) != True: unimportedSoundList.append(row["A"])if eventTable.get(row["A"]) != True: unimportedEventList.append(row["A"])AZ_Excel_CloseFile(excelDoc)Msg("The following Sounds are not implemented.") ShowObject(unimportedSoundList) Msg("") Msg("The following Events are not implemented.") ShowObject(unimportedEventList)return unimportedSoundList- -------- ここまで REAPDOCK AZSTOKE_Excel_SearchVoicesInWwiseを参照 --------
LoudnessTable = [ {"Name": "AZ_vo", "Loudness": -24} ]- ・ラウドネス設定テーブルを定義
def ImportunimportedFiles(excelPath, sheetName, unimportedSoundList):- ・未実装サウンドファイルをインポートする関数を定義
track = AZ_InsertTrackId(0, RPR_CountTracks(0), "unimported")- ・新しいトラックを挿入
excelDoc = AZ_Excel_OpenFile(excelPath)worksheet = AZ_Excel_OpenWorksheet(excelDoc, sheetName)- ・Excelファイルを開き、ワークシートを開く
filePathList = []- ・ファイルパスリストを初期化
for sound in unimportedSoundList:rows = AZ_Excel_SearchRowsInWorksheet(worksheet, sound, "A", ",A:B")- ・未実装サウンド名で行を検索
if not rows or "Cells" not in rows: continuefor key, row in rows["Cells"].items(): filePathList.append(row["B"])- ・該当行のローカルパスをファイルパスリストに追加
AZ_Excel_CloseFile(excelDoc)- ・Excelファイルを閉じる
mediaItems = AZ_InsertMediaItems(track, filePathList, 0, 1, 0)- ・未実装ファイルをReaperにインポート
AZ_SetMediaItemListHANDAUTOMER(mediaItems, 2)- ・HANDAUTOMERを実行
middlewareInfo = AZ_MIDDLESCANNER_Wwise_GetVolumeForMediaItemList(mediaItems, "SFX", "")- ・MIDDLESCANNERでWwiseの音量設定情報を取得
AZ_LOUDMATCHIFY_SetVolumeForMediaItemList(mediaItems, LoudnessTable, 0, middlewareInfo)- ・LOUDMATCHIFYで音量調整
def main():retval, inputList = AZ_GetUserInputList("", 2, "DeptPath,ExcelPath", "")if not retval: returndeptPath = inputList[0] excelPath = inputList[1]sheetName = "voices_" + time.strftime("%Y%m%d_%H%M%S")GetP4Files(deptPath, excelPath, sheetName)unimportedSoundList = SearchVoicesInWwise(excelPath, sheetName)ImportunimportedFiles(excelPath, sheetName, unimportedSoundList)- ・未実装サウンドファイルをインポートする関数を実行
AZ_ShowMessageBox_Info("success!", "", AZ_WindowType_OK())main()
Screens
APIs used
- AZ_P4_Connect
- AZ_P4_SyncFiles
- AZ_P4_Disconnect
- AZ_Excel_OpenFile
- AZ_Excel_AddWorksheet
- AZ_Excel_SetCellValue_ByNumber
- AZ_GetPathInfo
- AZ_Excel_SaveDocument
- AZ_Excel_CloseFile
- AZ_Wwise_Connect
- AZ_Wwise_SearchSoundItemFromName
- AZ_Wwise_GetChildrenList
- AZ_Excel_OpenWorksheet
- AZ_Excel_SearchRowsInWorksheet
- AZ_InsertTrackId
- AZ_InsertMediaItems
- AZ_SetMediaItemListHANDAUTOMER
- AZ_MIDDLESCANNER_Wwise_GetVolumeForMediaItemList
- AZ_LOUDMATCHIFY_SetVolumeForMediaItemList
- AZ_GetUserInputList
- AZ_ShowMessageBox_Info
AZSTOKE_Recording_OutputMediasToExcelExport the exported media info to ExcelBefore you run it
Excelファイルを用意する 収録に使用したプロジェクトを用意する
Script
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()Line by line日本語
dofile(reaper.AZ_GetLuaInitPath()) require("reaper_AZSTOKE_BRONZE") require("reaper_AZSTOKE_SILVER") require("reaper_AZSTOKE_GOLD")- ・RIGDOCKSをインポート
defaultExcelPath = "D:\\reapdock\\voice\\Recording.xlsx"- ・Excelファイルのパス(デフォルト)
function InsertTrackInfo(excelPath)- ・トラック情報を収録内容シートに出力する関数
- excel = reaper.AZ_Excel_OpenFile(excelPath) worksheet = reaper.AZ_Excel_OpenWorksheet(excel, "収録内容")
- ・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- ・トラックの深さが0の場合(サウンドトラックの場合)に処理を行う
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 endendreaper.AZ_Excel_SaveDocument(excel) reaper.AZ_Excel_CloseFile(excel)- ・Excelファイルを保存して閉じる
endfunction InsertFileInfo(excelPath)- ・ファイル名を波形名シートに出力する関数
- excel = reaper.AZ_Excel_OpenFile(excelPath) worksheet = reaper.AZ_Excel_OpenWorksheet(excel, "波形名")
- ・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 + 1table.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- ・ファイル名の最後の要素が"ng"でない場合に処理を行う
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 endreaper.AZ_Excel_SaveDocument(excel) reaper.AZ_Excel_CloseFile(excel)- ・Excelファイルを保存して閉じる
endfunction main()- retval, inputList = reaper.AZ_GetUserInputList("", 1, "Excelパス", defaultExcelPath) if retval == false then return end
- ・ユーザーにExcelファイルのパスを入力してもらう。デフォルトでdefaultExcelPathが入力されている状態にする
- retval, pushedButton = reaper.AZ_ShowMessageBox_Warn("出力先のExcelファイルを閉じていますか?", "", reaper.AZ_WindowType_OK_Cancel()) if retval == false then return end
- ・ユーザーにExcelファイルを閉じているか確認する。OKが押された場合は処理を続行し、キャンセルが押された場合は処理を中止する
excelPath = inputList[1]- ・ユーザーが入力したExcelファイルのパスを変数に保存
- -- 収録内容 InsertTrackInfo(excelPath)
- ・ 収録内容シートにトラック情報を出力する関数を呼び出す
- -- ファイル名 InsertFileInfo(excelPath)
- ・ 波形名シートにファイル名を出力する関数を呼び出す
- reaper.AZ_ShowMessageBox_Info("Excelへの出力が完了しました。", "", reaper.AZ_WindowType_OK())
- ・ユーザーに出力完了のメッセージを表示
endmain()- ・main関数を呼び出す
Screens
APIs used
- AZ_Excel_OpenFile
- AZ_Excel_OpenWorksheet
- AZ_Excel_SearchRowsInWorksheet
- AZ_GetTrackItemList
- AZ_GetTrackItemDepth
- AZ_GetTrackItemName
- AZ_Excel_SetCellValue_ByNumber
- AZ_Excel_SaveDocument
- AZ_Excel_CloseFile
- AZ_GetMediaItemList
- AZ_GetMediaItemName
- AZ_GetStringSplitList
- AZ_GetUserInputList
- AZ_ShowMessageBox_Warn
- AZ_ShowMessageBox_Info
Before you run it
Excelファイルを用意する 収録に使用したプロジェクトを用意する
Script
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import * defaultExcelPath = "D:\\reapdock\\voice\\Recording.xlsx" def InsertTrackInfo(excelPath): excel = AZ_Excel_OpenFile(excelPath) worksheet = AZ_Excel_OpenWorksheet(excel, "Contents") # Specifying the starting row in Excel newRow = 4 searchResult = AZ_Excel_SearchRowsInWorksheet(worksheet, ".+", "B", str(newRow) + ":1000,B", True) cells = searchResult["Cells"] if cells: for k, v in cells.items(): newRow += 1 trackList = AZ_GetTrackItemList(0) for track in trackList: if AZ_GetTrackItemDepth(track) == 0: trackName = AZ_GetTrackItemName(track)[1] searchResult = AZ_Excel_SearchRowsInWorksheet(worksheet, trackName, "B") resultRow = "" cells = searchResult["Cells"] if cells: for k, v in cells.items(): resultRow = k if resultRow == "": AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 2, trackName) newRow += 1 AZ_Excel_SaveDocument(excel) AZ_Excel_CloseFile(excel) def InsertFileInfo(excelPath): excel = AZ_Excel_OpenFile(excelPath) worksheet = AZ_Excel_OpenWorksheet(excel, "Waveform Name") # Specifying the starting row in Excel newRow = 4 existRows = [] searchResult = AZ_Excel_SearchRowsInWorksheet(worksheet, ".+", "D", str(newRow) + ":5000,D", True) cells = searchResult["Cells"] if cells: for i, line in cells.items(): newRow += 1 existRows.append(line["D"]) mediaItemList = AZ_GetMediaItemList(0) for media in mediaItemList: fileName = AZ_GetMediaItemName(media)[1] filenameComponent = AZ_GetStringSplitList(fileName, "_") if filenameComponent[-1] != "ng": exist = False for val in existRows: if val == fileName: exist = True if exist == False: mikeTrack = RPR_GetMediaItemTrack(media) mikeName = AZ_GetTrackItemName(mikeTrack)[1] soundTrack = RPR_GetParentTrack(mikeTrack) soundName = AZ_GetTrackItemName(soundTrack)[1] AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 2, soundName) AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 3, mikeName) AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 4, fileName) newRow += 1 AZ_Excel_SaveDocument(excel) AZ_Excel_CloseFile(excel) def main(): retval, inputList = AZ_GetUserInputList("", 1, "ExcelPath", defaultExcelPath) if retval == False: return retval, pushedButton = AZ_ShowMessageBox_Warn("Closed the output Excel file?", "", AZ_WindowType_OK_Cancel()) if retval == False: return excelPath = inputList[0] # Contents InsertTrackInfo(excelPath) # FileName InsertFileInfo(excelPath) AZ_ShowMessageBox_Info("The output to Excel is complete.", "", AZ_WindowType_OK()) main()Line by line日本語
import sys sys.path.append(RPR_GetResourcePath() + r"/UserPlugins") from RIGDOCKS_python import * from AZSTOKE_BRONZE_python import * from AZSTOKE_SILVER_python import * from AZSTOKE_GOLD_python import *- ・RIGDOCKSをインポート
defaultExcelPath = "D:\\reapdock\\voice\\Recording.xlsx"- ・Excelファイルのパス(デフォルト)
def InsertTrackInfo(excelPath):- ・トラック情報を収録内容シートに出力する関数
excel = AZ_Excel_OpenFile(excelPath) worksheet = AZ_Excel_OpenWorksheet(excel, "Contents")- ・Excelファイルを開き、収録内容シートを開く
# Specifying the starting row in Excel newRow = 4- ・トラック情報の出力を開始する行を指定
searchResult = AZ_Excel_SearchRowsInWorksheet(worksheet, ".+", "B", str(newRow) + ":1000,B", True)cells = searchResult["Cells"] if cells: for k, v in cells.items(): newRow += 1- ・ 既にトラック情報が出力されている場合は、次の行から出力するように開始行を更新
trackList = AZ_GetTrackItemList(0)- ・プロジェクト内の全トラックを取得
for track in trackList:- ・全トラックをループ
if AZ_GetTrackItemDepth(track) == 0:- ・トラックの深さが0の場合(サウンドトラックの場合)に処理を行う
trackName = AZ_GetTrackItemName(track)[1]- ・トラックの名前を取得
searchResult = AZ_Excel_SearchRowsInWorksheet(worksheet, trackName, "B")- ・トラック名が既に収録内容シートに出力されているか検索
resultRow = ""cells = searchResult["Cells"] if cells: for k, v in cells.items(): resultRow = k- ・検索結果から行番号を取得
if resultRow == "": AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 2, trackName) newRow += 1- ・トラック名が収録内容シートに出力されていない場合は、次の行にトラック名を出力
AZ_Excel_SaveDocument(excel) AZ_Excel_CloseFile(excel)- ・Excelファイルを保存して閉じる
def InsertFileInfo(excelPath):- ・ファイル名を波形名シートに出力する関数
excel = AZ_Excel_OpenFile(excelPath) worksheet = AZ_Excel_OpenWorksheet(excel, "Waveform Name")- ・Excelファイルを開き、波形名シートを開く
# Specifying the starting row in Excel newRow = 4 existRows = []- ・ファイル名の出力を開始する行を指定
searchResult = AZ_Excel_SearchRowsInWorksheet(worksheet, ".+", "D", str(newRow) + ":5000,D", True)cells = searchResult["Cells"] if cells: for i, line in cells.items(): newRow += 1 existRows.append(line["D"])- ・既にファイル名が出力されている場合は、次の行から出力するように開始行を更新し、既に出力されているファイル名をリストに保存
mediaItemList = AZ_GetMediaItemList(0)- ・プロジェクト内の全てのメディアアイテムを取得
for media in mediaItemList:- ・全てのメディアアイテムをループ
fileName = AZ_GetMediaItemName(media)[1]- ・メディアアイテムの名前を取得
filenameComponent = AZ_GetStringSplitList(fileName, "_")- ・メディアアイテムの名前を"_"で分割してリストにする
if filenameComponent[-1] != "ng":- ・ファイル名の最後の要素が"ng"でない場合に処理を行う
exist = Falsefor val in existRows: if val == fileName: exist = True- ・既にファイル名が出力されているかリストから検索
if exist == False:- ・ファイル名が既に出力されていない場合に処理を行う
mikeTrack = RPR_GetMediaItemTrack(media) mikeName = AZ_GetTrackItemName(mikeTrack)[1]- ・メディアアイテムのトラックを取得し、トラックの名前(マイク名)を取得
soundTrack = RPR_GetParentTrack(mikeTrack) soundName = AZ_GetTrackItemName(soundTrack)[1]- ・マイクトラックの親トラックを取得し、トラックの名前(サウンド名)を取得
AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 2, soundName) AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 3, mikeName) AZ_Excel_SetCellValue_ByNumber(worksheet, newRow, 4, fileName)- ・次の行にサウンド名、マイク名、ファイル名を出力
newRow += 1- ・次の行に出力するために行番号を更新
AZ_Excel_SaveDocument(excel) AZ_Excel_CloseFile(excel)- ・Excelファイルを保存して閉じる
def main():retval, inputList = AZ_GetUserInputList("", 1, "ExcelPath", defaultExcelPath)if retval == False: return- ・ユーザーにExcelファイルのパスを入力してもらう。デフォルトでdefaultExcelPathが入力されている状態にする
retval, pushedButton = AZ_ShowMessageBox_Warn("Closed the output Excel file?", "", AZ_WindowType_OK_Cancel())if retval == False: return- ・ユーザーにExcelファイルを閉じているか確認する。OKが押された場合は処理を続行し、キャンセルが押された場合は処理を中止する
excelPath = inputList[0]- ・ユーザーが入力したExcelファイルのパスを変数に保存
# Contents InsertTrackInfo(excelPath)- ・ 収録内容シートにトラック情報を出力する関数を呼び出す
# FileName InsertFileInfo(excelPath)- ・ 波形名シートにファイル名を出力する関数を呼び出す
AZ_ShowMessageBox_Info("The output to Excel is complete.", "", AZ_WindowType_OK())- ・ユーザーに出力完了のメッセージを表示
main()- ・main関数を呼び出す
Screens
APIs used
- AZ_Excel_OpenFile
- AZ_Excel_OpenWorksheet
- AZ_Excel_SearchRowsInWorksheet
- AZ_GetTrackItemList
- AZ_GetTrackItemDepth
- AZ_GetTrackItemName
- AZ_Excel_SetCellValue_ByNumber
- AZ_Excel_SaveDocument
- AZ_Excel_CloseFile
- AZ_GetMediaItemList
- AZ_GetMediaItemName
- AZ_GetStringSplitList
- AZ_GetUserInputList
- AZ_ShowMessageBox_Warn
- AZ_ShowMessageBox_Info

































































































































































































































































































































































































































































































































