- Script Code -
dofile(reaper.AZ_GetLuaInitPath())
require("reaper_AZSTOKE_BRONZE")
require("reaper_AZSTOKE_SILVER")
require("reaper_AZSTOKE_GOLD")
function CutSilent(mediaItem)
cutItemList = {}
silentSectionList = reaper.AZ_GetAudioSectionListInMediaItem(mediaItem, 0.2)
currentItem = mediaItem
prevSplitPos = 0
baseName = reaper.AZ_GetMediaItemName(mediaItem)
for i, section in pairs(silentSectionList) do
leftItem, rightItem = reaper.AZ_SplitMediaItem(currentItem, section["StartTime"] - prevSplitPos)
prevSplitPos = section["StartTime"]
reaper.AZ_DeleteMediaItem(leftItem)
leftItem, rightItem = reaper.AZ_SplitMediaItem(rightItem, section["EndTime"] - prevSplitPos)
prevSplitPos = section["EndTime"]
currentItem = rightItem
name = baseName .. "_" .. reaper.AZ_FormatNumDigit(i, 2)
reaper.AZ_SetMediaItemName(leftItem, name)
-- リージョン作成
reaper.AZ_AddRegionMarkerMediaItem(leftItem)
table.insert(cutItemList, leftItem)
end
reaper.AZ_DeleteMediaItem(currentItem)
return cutItemList
end
function Transcription(mediaItemList)
-- モデルを読み込み
ctx = reaper.AZ_TRSC_LoadModel()
trscTrackList = {}
exists = {}
for i, item in pairs(mediaItemList) do
track = reaper.GetMediaItemTrack(item)
trscTrack = reaper.AZ_InsertUniqueChildTrack(track, "Transcription")
-- 文字起こし実行
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)
if not exists[trscTrack] then
exists[trscTrack] = true
table.insert(trscTrackList, trscTrack)
end
end
-- モデルを解放
reaper.AZ_TRSC_ReleaseModel(ctx)
return trscTrackList
end
C_id = "B"
C_serif = "C"
C_trsc = "D"
R_header = 2
tableRange = "B3:B100"
function OutputGSheet(spreadSheetId, sheetId, trscTrackList)
connection = reaper.AZ_GSheet_Connect_UserAccount(spreadSheetId)
for _, trscTrack in pairs(trscTrackList) do -- トラックをループ
itemList = reaper.AZ_GetMediaItemListInTrackItem(trscTrack)
for i, noteItem in pairs(itemList) do
region = reaper.AZ_GetRegionMarkerListMediaItem(noteItem)[1]
voiceID = region["Name"]
trsc = reaper.AZ_GetMediaItemNotes(noteItem)
rows = reaper.AZ_GSheet_SearchRowsInWorksheet(connection, sheetId, voiceID, C_id, tableRange)
if #rows["Cells"] == 0 then
Msg(voiceID .. " : 存在しません。")
else
rowNumber = rows["Cells"][1]["RowNumber"]
reaper.AZ_GSheet_SetCellValue(connection, sheetId, C_trsc .. rowNumber, trsc)
Msg(voiceID .. " : 文字起こしを書き込みました。")
end
end
end
reaper.AZ_GSheet_Disconnect(connection)
end
function main()
retval, inputList = reaper.AZ_GetUserInputList("", 2, "スプレッドシートID,シートID", "**********,**********")
if retval == false then return end
spreadSheetId = inputList[1]
sheetId_str = inputList[2]
sheetId = tonumber(sheetId_str)
mediaItemList = reaper.AZ_GetSelectedMediaItemList(0)
cutAllItemList = {}
for i, item in pairs(mediaItemList) do
cutItemList = CutSilent(item)
for j, cutItem in pairs(cutItemList) do
table.insert(cutAllItemList, cutItem)
end
end
trscTrackList = Transcription(cutAllItemList)
OutputGSheet(spreadSheetId, sheetId, trscTrackList)
end
main()
- Warm Up -
Place audio files in Reaper in advance
Prepare a spreadsheet file for the script
- Script Detail -
dofile(reaper.AZ_GetLuaInitPath())
require("reaper_AZSTOKE_BRONZE")
require("reaper_AZSTOKE_SILVER")
require("reaper_AZSTOKE_GOLD")
・ Import RIGDOCKS
function CutSilent(mediaItem)
・ Function to extract silent parts of the audio
cutItemList = {}
silentSectionList = reaper.AZ_GetAudioSectionListInMediaItem(mediaItem, 0.2)
currentItem = mediaItem
prevSplitPos = 0
・ Initialize the current item and the previous split position
baseName = reaper.AZ_GetMediaItemName(mediaItem)
・ Get the media name and save it to baseName
for i, section in pairs(silentSectionList) do
・ Loop over the list of silent regions
leftItem, rightItem = reaper.AZ_SplitMediaItem(currentItem, section["StartTime"] - prevSplitPos)
・ Split the item at the start of the silent part and get the left and right items
prevSplitPos = section["StartTime"]
・ Update the previous split position
reaper.AZ_DeleteMediaItem(leftItem)
・ The left item is a silent part, so delete it
leftItem, rightItem = reaper.AZ_SplitMediaItem(rightItem, section["EndTime"] - prevSplitPos)
・ Split the right item at the end of the silent part and get the left and right items
prevSplitPos = section["EndTime"]
・ Update the previous split position
currentItem = rightItem
・ Update the current item to the right item (to split this item in the next loop)
name = baseName .. "_" .. reaper.AZ_FormatNumDigit(i, 2)
reaper.AZ_SetMediaItemName(leftItem, name)
・ Set a name on the extracted item using baseName with a number
-- リージョン作成
reaper.AZ_AddRegionMarkerMediaItem(leftItem)
・ Create a region based on the item name
table.insert(cutItemList, leftItem)
・ Add the extracted item to the list
end
reaper.AZ_DeleteMediaItem(currentItem)
・ Also delete the last remaining item (the last item of the silent part)
return cutItemList
・ Return the list of extracted items
end
-------- ここから REAPDOCK AZSTOKE_TRSC_CutSilentを参照 --------
function Transcription(mediaItemList)
-- モデルを読み込み
ctx = reaper.AZ_TRSC_LoadModel()
trscTrackList = {}
exists = {}
for i, item in pairs(mediaItemList) do
track = reaper.GetMediaItemTrack(item)
trscTrack = reaper.AZ_InsertUniqueChildTrack(track, "Transcription")
-- 文字起こし実行
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)
if not exists[trscTrack] then
exists[trscTrack] = true
table.insert(trscTrackList, trscTrack)
end
end
-- モデルを解放
reaper.AZ_TRSC_ReleaseModel(ctx)
return trscTrackList
end
-------- ここまで REAPDOCK AZSTOKE_TRSC_CutSilentを参照 --------
C_id = "B"
C_serif = "C"
C_trsc = "D"
・ Define the spreadsheet columns
R_header = 2
・ Define the spreadsheet header row
tableRange = "B3:B100"
・ Define the spreadsheet search range (column B from row 3 to row 100)
function OutputGSheet(spreadSheetId, sheetId, trscTrackList)
・ Function to output transcription results to a spreadsheet
connection = reaper.AZ_GSheet_Connect_UserAccount(spreadSheetId)
・ Connect by specifying the spreadsheet ID
for _, trscTrack in pairs(trscTrackList) do -- トラックをループ
・ Loop over the track list of transcription results
itemList = reaper.AZ_GetMediaItemListInTrackItem(trscTrack)
・ Get the list of items in the transcription track
for i, noteItem in pairs(itemList) do
・ Loop over the transcription item list
region = reaper.AZ_GetRegionMarkerListMediaItem(noteItem)[1]
voiceID = region["Name"]
・ Get voiceID from the region name (this is assumed to be the line ID)
trsc = reaper.AZ_GetMediaItemNotes(noteItem)
・ Get the transcription result from the item's note
rows = reaper.AZ_GSheet_SearchRowsInWorksheet(connection, sheetId, voiceID, C_id, tableRange)
・ Search the specified range of the sheet for the row matching the line ID
if #rows["Cells"] == 0 then
Msg(voiceID .. " : 存在しません。")
・ If there are 0 search results, show a message that it does not exist
else
rowNumber = rows["Cells"][1]["RowNumber"]
・ If search results exist, get the row number of the first matching row
reaper.AZ_GSheet_SetCellValue(connection, sheetId, C_trsc .. rowNumber, trsc)
・ Write the transcription result into the cell at the retrieved column D row number
Msg(voiceID .. " : 文字起こしを書き込みました。")
・ Show the write-complete message
end
end
end
reaper.AZ_GSheet_Disconnect(connection)
・ Disconnect from the sheet
end
function main()
・ Main function
retval, inputList = reaper.AZ_GetUserInputList("", 2, "スプレッドシートID,シートID", "**********,**********")
if retval == false then return end
・ Get user input (exit if canceled)
spreadSheetId = inputList[1]
sheetId_str = inputList[2]
sheetId = tonumber(sheetId_str)
・ Get the spreadsheet ID and sheet ID, and convert the sheet ID to a number
mediaItemList = reaper.AZ_GetSelectedMediaItemList(0)
・ Get the list of selected media items
cutAllItemList = {}
・ Initialize the list to hold the extracted items
for i, item in pairs(mediaItemList) do
cutItemList = CutSilent(item)
・ Call the function to extract silent parts for each item and get the list of extracted items
for j, cutItem in pairs(cutItemList) do
table.insert(cutAllItemList, cutItem)
end
・ Add the extracted item to the list of all items
end
trscTrackList = Transcription(cutAllItemList)
・ Run transcription on the list of extracted items
OutputGSheet(spreadSheetId, sheetId, trscTrackList)
・ Output the transcription results to a spreadsheet
end
main()
・ Call the main function to start the process
- API LINK -
- API LINK -
Transcription
AZSTOKE_TRSC_OutputToGoogleSheets
Write transcription results to a spreadsheet













