- 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に自動実装③








