top of page
- Script Code -

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

- Warm Up -

  • Excelファイルを用意する

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

  • Wwiseプロジェクトを用意する

- Script Detail -

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


--------  ここまで 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)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


--------  ここまで 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から切断


    end

    

    return generatedLog


・生成ログを返す


end


function 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", "")


・読み込んだ情報から改行コードを削除


    end

    

    return token, userName


・トークンとユーザー名を返す


end


function 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

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)


・Slackに生成結果を送信

    

end


main()

- API LINK -

Excel

AZSTOKE_Excel_GenerateAndSlack

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

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