Экшен: Переименование айтемов по имени треков

Anatoly Sh

New Member
10 Дек 2021
2
0
1
52
Здравствуйте, друзья Reaper!

В Reaper влюбился с первого взгляда!
Программа удивительной гибкости и не затуманивает мозг излишествами,
а по функциональности нисколько не уступает другим.
Обычно работаю в двух программах:
Sibelius - для написания оркестровых партитур,
и, непосредственно, Reaper - для озвучивания этих партитур.
Во многом работу в этой удивительной программе облегчают экшены.

И теперь огромная к вам просьба о помощи.
Есть замечательный lua-скрипт переименования выделенных айтемов по имени треков:

Set selected items active takes name to track name

(Благодарю его создателя Mordi).
Но хотелось бы немного усовершенствовать этот код, а именно:
Добавить к именам позицию айтемов в beats (например, такой вид: 4.1.75_Fagotto II ).
В секундах это не сложно - примерно так:

it_pos = reaper.GetMediaItemInfo_Value(item, "D_POSITION")

Хотя при большом количестве тактов уже необходимо как-то переводить секунды в минуты.

А вот, с beats у меня возникли затруднения.
Толку с TimeMap2_timeToBeats не добился.

Простите, я не виртуоз в программировании. И все мои скромные познания сводятся к Visual Basic для Excel и Word.
Язык ReaScript (Lua) только начал изучать.

Возможно ли программно извлечь из TextBox "Position" окна "Media Item Properties" информацию,
чтобы использовать ее в имени айтема, дополнив код скрипта?
Оговорюсь, что имя с секундами, поскольку работаю и в "тактовом" Sibelius, несколько запутывает.

Привожу сам код скрипта:

-- Made by Mordi, Dec 2016

-- Begin undo-block
reaper.Undo_BeginBlock2(0)

-- Print function
function print(str)
reaper.ShowConsoleMsg(tostring(str) .. "\n")
end

-- Loop through all selected items
for i = 0, reaper.CountSelectedMediaItems()-1 do

-- Get item
item = reaper.GetSelectedMediaItem(0, i)

-- Get active take of item
active_take = reaper.GetActiveTake(item)

-- Get track
track = reaper.GetMediaItem_Track(item)

-- Get track name
retval, track_name = reaper.GetSetMediaTrackInfo_String(track, 'P_NAME', "", false)

-- Apply new name
reaper.GetSetMediaItemTakeInfo_String(active_take, 'P_NAME', track_name, true)
end

-- End undo-block
reaper.Undo_EndBlock2(0,"Script: Set selected items active takes name to track name",-1)

Благодарю!
 
C-like:
reaper.Undo_BeginBlock2(0)

for i = 0, reaper.CountSelectedMediaItems()-1 do
  item = reaper.GetSelectedMediaItem(0, i)
  it_pos = reaper.GetMediaItemInfo_Value(item, "D_POSITION")
  active_take = reaper.GetActiveTake(item)
  track = reaper.GetMediaItem_Track(item)
  retval, track_name = reaper.GetSetMediaTrackInfo_String(track, 'P_NAME', "", false)
  reaper.GetSetMediaItemTakeInfo_String(active_take, 'P_NAME', reaper.format_timestr_pos( it_pos, '', 2 )..'_'..track_name, true)
end

reaper.Undo_EndBlock2(0,"Script: Set selected items active takes name to track name",-1)
 
  • Like
Реакции: Mr_Tsonts

Сейчас просматривают