top of page
- Script Code -

dofile(reaper.AZ_GetLuaInitPath())


require("reaper_AZSTOKE_BRONZE")

require("reaper_AZSTOKE_SILVER")

require("reaper_AZSTOKE_GOLD")


reaper.AZ_DeleteAllRegion(0)

cancelType, inputList = reaper.AZ_GetUserInputList("Insert",1,"Path:","D://")


if cancelType then

   --file import HANDAUTOMER

   fileList = reaper.AZ_GetFilePathList(inputList[1],"wav")

   

   startPos = 0

   itemList = {}

   

   for i, value in pairs(fileList) do

       itemList[i] = {}

       itemList[i]["item"] = reaper.AZ_InsertMediaTrackIdSecond(0,0,value,0,startPos)

       reaper.AZ_SetMediaItemHANDAUTOMER(itemList[i].item,3)

       itemList[i]["name"] = reaper.AZ_GetMediaItemName(itemList[i].item)

       

       --get parent

       itemList[i]["parent"] = ""

       splitList = reaper.AZ_GetStringSplitList(itemList[i].name,"_")

       table.remove(splitList)

       for e, value in pairs(splitList) do

           if e == 1 then

              itemList[i]["parent"] = itemList[i].parent..value

           else

              itemList[i]["parent"] = itemList[i].parent.."_"..value

           end

       end

       

       --next start pos setting + regionMarker

       endPos = reaper.AZ_GetMediaItemEndTime(itemList[i].item)

       reaper.AZ_AddRegionMarker(0,startPos,endPos,itemList[i].name,0,0)

       startPos = endPos + 1 

   end

   

   --render setting

   renderPath = "D:\\script\\renderdata"

   renderFileName = "render"

   

   jsonStr = reaper.AZ_ReadFile(renderPath,renderFileName..".txt")

   render = reaper.AZ_Json_Deserialize(jsonStr)

   path = reaper.AZ_SetProjectPathFolder("Rec",3)

   render.OutputDir = path

   

   --render

   fileList = reaper.AZ_RenderToAudioFile(0,render)

   

   --wwise intro

   wwisePath = "\\Actor-Mixer Hierarchy\\Default Work Unit\\Master\\VOICE"

   parent = ""

   

   if (reaper.AZ_Wwise_Connect("127.0.0.1",8080)) then

       

       --wwise object create

       for i, value in pairs(fileList) do

           

           if parent ~= itemList[i].parent then

              parent = itemList[i].parent

              containerList = reaper.AZ_Wwise_CreateContainer(wwisePath,0,itemList[i].parent)

           end

           soundVoiceList = reaper.AZ_Wwise_CreateSoundVoice(containerList.ID,value,itemList[i].name)

           itemList[i]["soundVoiceID"] = soundVoiceList.ID

       end

       

       --LOUDMATCHIFY Savedata

       jsonStr = reaper.AZ_ReadFile("D:\\script\\savedata\\savedata","savedata.txt")

       loudmatchifyList = reaper.AZ_Json_Deserialize(jsonStr)

       

       --loudness 

       for i, value in pairs(itemList) do

           wwiseVol = reaper.AZ_MIDDLESCANNER_Wwise_GetVolumeForMediaItem(itemList[i].item,"English(US)")

           reaper.AZ_LOUDMATCHIFY_SetVolumeForMediaItem(itemList[i].item,loudmatchifyList,1,wwiseVol.Volume)

           Msg(itemList[i].name)

           Msg(wwiseVol.Volume)

           Msg(reaper.AZ_GetMediaItemLoudnessMaxMomentary(itemList[i].item))

       end

       

       path = reaper.AZ_SetProjectPathFolder("Rec",3)

       render.OutputDir = path

       fileList = reaper.AZ_RenderToAudioFile(0,render)

       

       for i, value in pairs(fileList) do

           reaper.AZ_Wwise_ImportAudioFile(itemList[i].soundVoiceID,value,"English(US)")

       end

       

       reaper.AZ_Wwise_Disconnect() 

   end

end

- Warm Up -

  1. Trackを作成しておく

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

  3. LOUDMATCHIFYで利用可能なセーブデータを生成しておく

  4. レンダー設定を用意しておく

  5. WwiseにインサートしたいWorkUnitを作成しておく

- Script Detail -

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))


・処理の結果をコンソールに出力

       

       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

      

・レンダリングしたファイルを対応するWwiseオブジェクトにインポート(置き換え)


       reaper.AZ_Wwise_Disconnect() 


・Wwiseから切断する


   end

end

- API LINK -

Wwise

AZSTOKE_CEDEC_KYUSHU2024

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

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