top of page
- 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)

   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.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)
   
   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のシートからセリフを取得

                

                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ファイルを保存して閉じる

    

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 -
- API LINK -

Transcription

AZSTOKE_TRSC_OutputToExcel

文字起こし結果をExcelに記載

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