- Script Code -
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)
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)
reaper.AZ_Excel_SetCellValue(worksheet, C_trsc .. j, trsc)
Msg(voiceID .. "文字起こしを書き込みました。")
scriptItem = {
ID = voiceID,
NoteItem = noteItem,
Serif = serif,
Trsc = trsc,
}
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 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.GetSelectedTrack(0, 0)
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)
end
main()
- Warm Up -
Reaperにボイスのメディアを並べる
台本用のExcelファイルを用意する
- Script Detail -
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 trscTrack
end
******** 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"]) do
if row[C_id] == voiceID then
・ ExcelのシートにセリフIDが存在する場合
serif = reaper.AZ_Excel_GetCellValue(worksheet, C_serif .. j)
・ Excelのシートからセリフを取得
reaper.AZ_Excel_SetCellValue(worksheet, C_trsc .. j, trsc)
・ Excelのシートに文字起こし結果を書き込む
Msg(voiceID .. "文字起こしを書き込みました。")
・ 書き込み完了のメッセージを表示
scriptItem = {
ID = voiceID,
NoteItem = noteItem,
Serif = serif,
Trsc = trsc,
}
・ 台本の行データを格納するアイテムを作成
table.insert(scriptTable, scriptItem)
・ 台本のテーブルにアイテムを追加
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ファイルを保存して閉じる
return scriptTable
・ 台本のテーブルを返す
end
function 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.GetSelectedTrack(0, 0)
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に出力して、台本のテーブルを取得
end
main()
- API LINK -
- RigYouTube -
Transcription
AZSTOKE_TRSC_OutputToExcel
文字起こし結果をExcelに記載









