Помогите создать экшн / кастом экшн / скрипт (1 онлайн

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
@axis, я про СС забыл... их нужно оставить? То есть,такая же схема? Если есть СС(в такте), то такт не резать?
 
Последнее редактирование:

Furqat

Well-Known Member
27 Окт 2012
729
290
63
Tashkent
@EUGEN27771, у меня опять возник вопрос на счет retrorec audio.
Этот скрипт записывает моно-сигнал в стерео аудиофайл(т.е. стерео с одним каналом). Конечно потом в свойствах айтема там можно поставить Mono(L+R), но как то некрасиво что ли:)
Можно ли сделать так, чтобы input скрытого аудио retrorec-трека подстраивался под инпут записываемого трека?
Или есть другие способы решить задачу?
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
Можно ли сделать так, чтобы input скрытого аудио retrorec-трека подстраивался под инпут записываемого трека?
Скрипт не работает все время в фоне,он запускается,только чтобы вытянуть аудио из JS.Поэтому отследить инпут текущего трека нельзя.Понимаю,что некрасиво,но изменить не получится
 

Furqat

Well-Known Member
27 Окт 2012
729
290
63
Tashkent
@EUGEN27771, ясно.
А возможно ли создать некий кастом экшн или скрипт, который после retrorec audio автоматом изменяет свойсво айтема на нужный параметр?
Например, если на инпуте трека поставить mono 1, то записываемый файл автоматом становится моно(L+R).
Если ставить input stereo 1/2, то соответственно айтем стерео.
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
автоматом становится моно(L+R).
Да,конечно. Можно и в самом скрипте прописать,надо глянуть,там довольно запутанная схема,если вспомню, то вечером добавлю.
П.С. @Furqat, чуть позже добавлю пока нет времени.
 
Последнее редактирование:
  • Like
Реакции: Furqat

Broojacker

Active Member
4 Сен 2010
276
213
43
Киев
soundcloud.com
Нарыл очень нужный скрипт переключающий tcp лайауты:
PHP:
local tcp_layouts = { -- TCP layout names from the default theme (REAPER v5.0pre36)
    "", -- default
    --"aa - Standard",
    --"ab --- Standard + value readouts",
    --"ac --- Standard Media",
    --"ad --- Standard Media stretch",
    --"ae --- Standard expanding",
    --"af --- Standard expanding, popup fader",
    --"ag --- Standard Extra-expanding",
    --"ba - Small",
    --"bb --- Small + value readouts",
    --"bc --- Small Media",
    "bd --- Small Full Meter",
    --"bd --- Small Full Meter + value readouts",
    --"be --- Small expanding, popup fader",
    --"ca - Large",
    --"cb --- Large + value readouts",
    --"cc --- Large Media",
    "cd --- Large expanding, popup fader"
}

function get_current_layouts_and_pos(track) -- "pos" means index in "tcp_layouts" -table
  local current_mcp_layout, current_tcp_layout = reaper.BR_GetMediaTrackLayouts(track)
  local i = 1
  local pos = 0
  for k, v in ipairs(tcp_layouts) do
    if v == current_tcp_layout then
      pos = i
    end
    i = i + 1
  end
  return current_mcp_layout, current_tcp_layout, pos
end
function set_next_tcp_layout()
  reaper.PreventUIRefresh(1)
  for i=1, reaper.CountSelectedTracks(0) do
    local track = reaper.GetSelectedTrack(0, i-1)
    if track ~= nil then
      current_mcp_layout, current_tcp_layout, pos = get_current_layouts_and_pos(track)
      if current_tcp_layout == tcp_layouts[#tcp_layouts] then
        new_tcp_layout = tcp_layouts[1]
      else
        new_tcp_layout = tcp_layouts[pos+1]
      end
      reaper.BR_SetMediaTrackLayouts(track, current_mcp_layout, new_tcp_layout)
    end
  end
  reaper.PreventUIRefresh(-1)
end
set_next_tcp_layout()
Я попытался переделать его для mcp. Скрипт работает, но меняет tcp_layout на дефолтный.
Можно ли как то это исправить?
PHP:
local mcp_layouts = { -- MCP layout names from the default theme (REAPER v5.0pre36)
    "eb --- Strip Full Controls",
    "ed --- Strip Meter Bridge"
}
function get_current_layouts_and_pos(track) -- "pos" means index in "mcp_layouts" -table
  local current_tcp_layout, current_mcp_layout = reaper.BR_GetMediaTrackLayouts(track)
  local i = 1
  local pos = 0
  for k, v in ipairs(mcp_layouts) do
    if v == current_mcp_layout then
      pos = i
    end
    i = i + 1
  end
  return current_mcp_layout, current_tcp_layout, pos
end

function set_next_mcp_layout()
  reaper.PreventUIRefresh(1)
  for i=1, reaper.CountSelectedTracks(0) do
    local track = reaper.GetSelectedTrack(0, i-1)
    if track ~= nil then
      current_tcp_layout, current_mcp_layout, pos = get_current_layouts_and_pos(track)
      if current_mcp_layout == mcp_layouts[#mcp_layouts] then
        new_mcp_layout = mcp_layouts[1]
      else
        new_mcp_layout = mcp_layouts[pos+1]
      end
      reaper.BR_SetMediaTrackLayouts(track, current_tcp_layout, new_mcp_layout)
    end
  end
  reaper.PreventUIRefresh(-1)
end
set_next_mcp_layout()
 
Последнее редактирование:

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.064
113
62
Киев
Для MCP нужно так -
PHP:
local mcp_layouts = { -- MCP layout names from the default theme (REAPER v5.0pre36)
    "eb --- Strip Full Controls",
    "ed --- Strip Meter Bridge"
}
function get_current_layouts_and_pos(track) -- "pos" means index in "mcp_layouts" -table
  local current_tcp_layout, current_mcp_layout = reaper.BR_GetMediaTrackLayouts(track)
  local i = 1
  local pos = 0
  for k, v in ipairs(mcp_layouts) do
    if v == current_mcp_layout then
      pos = i
    end
    i = i + 1
  end
  return current_mcp_layout, current_tcp_layout, pos
end

function set_next_mcp_layout()
  reaper.PreventUIRefresh(1)
  for i=1, reaper.CountSelectedTracks(0) do
    local track = reaper.GetSelectedTrack(0, i-1)
    if track ~= nil then
      current_tcp_layout, current_mcp_layout, pos = get_current_layouts_and_pos(track)
      if current_mcp_layout == mcp_layouts[#mcp_layouts] then
        new_mcp_layout = mcp_layouts[1]
      else
        new_mcp_layout = mcp_layouts[pos+1]
      end
      reaper.BR_SetMediaTrackLayouts(track, current_tcp_layout, new_mcp_layout)
    end
  end
  reaper.PreventUIRefresh(-1)
end
set_next_mcp_layout()
И при вставлении кода используйте язык PHP, иначе часть кода будет искаверкана
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.064
113
62
Киев
Хм.... :( У меня не сбрасывало. Сейчас ещё покопаюсь.
PS: Ещё раз проверил - у меня всё работает.
Может вы не верно код копируете и сохраняете?
Используйте как минимум Notepad ++
В атаче оба скрипта - удалите свои и поставьте мои - их нужно из Экшинов удалить и по новой Load сделать.
 

Вложения

Последнее редактирование:
  • Like
Реакции: Broojacker и irma-kanu

D-Forest

Active Member
23 Ноя 2013
328
229
43
Курск
скажите возможно ли создать скрипт с функционалом - добавить плагин на дорожку ИЛИ открыть его окно если он уже на дорожке есть

по умолчанию так действует ReaEQ, его можно добавить по горячей клавише или просто открыть его окно без добавления новой копии плагина. Можно ли сделать так для любых плагинов?
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.064
113
62
Киев
Можео, и уже делали. И скрипт для этого не нужен - можно Цикл Экшинами это сделать.
 

lil-burn

Well-Known Member
15 Авг 2012
903
638
93
Екатеринбург
@D-Forest, на примере RBass'а
достаточно добавить цикл-экшен с таким содержимым:
upload_2016-5-26_19-38-10.png

- чтобы открыть плагин в отдельном окне

upload_2016-5-26_20-2-7.png

- чтобы открыть его в окне цепи эффектов

либо написать скрипт с таким текстом
Код:
fx_name = 'RBass Stereo'
tr = reaper.GetSelectedTrack(0,0)
wanded_fx = reaper.TrackFX_GetByName(tr, fx_name, true)
reaper.TrackFX_Show(tr, wanded_fx, 1) -- 1 for show chain, 3 for show floating window
в последней строке кода reaper.TrackFX_Show(tr, wanded_fx, 1)
единицу ставим для отображения RBass в окне цепи эффектов, 3 для открытия плагина в отдельном окне

В обоих случаях вместо RBass вбиваем название нужного плагина

Единственное, что нужно помнить - эти способы не работают с переименованными эффектами. То есть если в микшере RBass переименовали, напр, в "ЖирБас", то добавится новый экземпляр плагина, вместо того, чтобы просто открыться.

Вообще, если нужно, можно написать скрипт, который работает и с переименованными плагинами

Ну и т.к. рипер - DAW без границ, то таких экшенов можно наделать сколько угодно, хоть для каждого плагина
 

lil-burn

Well-Known Member
15 Авг 2012
903
638
93
Екатеринбург
Пишу простой скрипт, который будет байпасить/анбайпасить плагин, который находится в фокусе. Для плагинов, которые весят на треках - все ровно, только с плагинами на тейках неясно, как работать.
retval, trnum, itnum, fxnum = reaper.GetFocusedFX()
retval = 2
но trnum и itnum = -1
хотя fxnum верный пишет
нужно получить айтем
 

lil-burn

Well-Known Member
15 Авг 2012
903
638
93
Екатеринбург
еще интересно, как лучше посчитать количество проектов (project tabs). В API из того, что более-менее подходит, нашел только EnumProjects. То что пришло в голову
Код:
for p = 1, 100 do
  retval = reaper.EnumProjects(p, '')
  if retval == nil then x = p break end
end
работает, но может есть более логичный вариант.
у SWS есть экшен Switch to last project tab, значит число проектов они тоже как-то находят

и еще меньше ясно, как определить номер текущей вкладки

хотя по ходу, можно и так:
Код:
for p = 1, 100 do
  retval = reaper.EnumProjects(p, '')
  if retval == nil then x = p break end
end

retval_0  = reaper.EnumProjects(-1, '')

for p = 1, x do
  retval  = reaper.EnumProjects(p-1, '')
  if retval == retval_0 then cur_proj_tab = p break end
end
 
Последнее редактирование:

tosh

Active Member
5 Окт 2005
525
147
43
Кременчуг UA
Помогите, пожалуйста, создать кастом экшн или скрипт. При записи миди партии начало миди айтема создается при поступлении первого сигнала (ноты, контроллера) и это не всегда получается с начала такта. Можно ли как-то сделать, чтобы начало айтема создавалось с точки, с которой назначена запись (с нажатия REC)?
 
Последнее редактирование:

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
@tosh, непонятно... посмотри в настройках. У меня начало создается при нажатии на запись, независимо от того, есть ли вообще миди-сигнал.
 

tosh

Active Member
5 Окт 2005
525
147
43
Кременчуг UA
@EUGEN27771, Начало создается сразу если стоит на входе audio in, если midi - только при поступлении первого сигнала (ноты, контроллера).

P.S. На входе трека установлен режим записи "Record: MIDI overdub"
 
Последнее редактирование:

dmitryga

Active Member
12 Июн 2008
238
116
43
Пытался сделать скрипт, что б при выделении трека, который отправляет миди сигнал на трек с мультиканальным инструментом, показывался этот самый vsti (обычно это контакт)(кстати, в кубе это есть по умолчанию на всех миди треках). Но посмотрев документацию, я не нашёл нужного api. Может есть какие способы сделать это?
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
@tosh, здесь есть проблема - если бы скрипты работали в непрерывном режиме(а это малореально) - можно бы было подумать. Но, во-первых - они толком не кушают миди-ноты , во-вторых - работают длинными кадрами(поэтому, наверное, и не добавят полноценную поддержку входного миди). Это бы они могли сделать, если бы блок(кадр, в случае скрипта) был фиксированным, как в JS - там можно по offset посчитать точное время прихода сообщения.
 
  • Like
Реакции: tosh

Сейчас онлайн (Пользователей: 0, Гостей: 1)