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

  • Автор темы Автор темы @Michael
  • Дата начала Дата начала
@axis, я про СС забыл... их нужно оставить? То есть,такая же схема? Если есть СС(в такте), то такт не резать?
 
Последнее редактирование:
@EUGEN27771, у меня опять возник вопрос на счет retrorec audio.
Этот скрипт записывает моно-сигнал в стерео аудиофайл(т.е. стерео с одним каналом). Конечно потом в свойствах айтема там можно поставить Mono(L+R), но как то некрасиво что ли:)
Можно ли сделать так, чтобы input скрытого аудио retrorec-трека подстраивался под инпут записываемого трека?
Или есть другие способы решить задачу?
 
Можно ли сделать так, чтобы input скрытого аудио retrorec-трека подстраивался под инпут записываемого трека?
Скрипт не работает все время в фоне,он запускается,только чтобы вытянуть аудио из JS.Поэтому отследить инпут текущего трека нельзя.Понимаю,что некрасиво,но изменить не получится
 
@EUGEN27771, ясно.
А возможно ли создать некий кастом экшн или скрипт, который после retrorec audio автоматом изменяет свойсво айтема на нужный параметр?
Например, если на инпуте трека поставить mono 1, то записываемый файл автоматом становится моно(L+R).
Если ставить input stereo 1/2, то соответственно айтем стерео.
 
автоматом становится моно(L+R).
Да,конечно. Можно и в самом скрипте прописать,надо глянуть,там довольно запутанная схема,если вспомню, то вечером добавлю.
П.С. @Furqat, чуть позже добавлю пока нет времени.
 
Последнее редактирование:
  • Like
Реакции: Furqat
Нарыл очень нужный скрипт переключающий 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()
 
Последнее редактирование:
Для 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, иначе часть кода будет искаверкана
 
Хм.... :( У меня не сбрасывало. Сейчас ещё покопаюсь.
PS: Ещё раз проверил - у меня всё работает.
Может вы не верно код копируете и сохраняете?
Используйте как минимум Notepad ++
В атаче оба скрипта - удалите свои и поставьте мои - их нужно из Экшинов удалить и по новой Load сделать.
 

Вложения

Последнее редактирование:
  • Like
Реакции: Broojacker и irma-kanu
скажите возможно ли создать скрипт с функционалом - добавить плагин на дорожку ИЛИ открыть его окно если он уже на дорожке есть

по умолчанию так действует ReaEQ, его можно добавить по горячей клавише или просто открыть его окно без добавления новой копии плагина. Можно ли сделать так для любых плагинов?
 
@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 без границ, то таких экшенов можно наделать сколько угодно, хоть для каждого плагина
 
Пишу простой скрипт, который будет байпасить/анбайпасить плагин, который находится в фокусе. Для плагинов, которые весят на треках - все ровно, только с плагинами на тейках неясно, как работать.
retval, trnum, itnum, fxnum = reaper.GetFocusedFX()
retval = 2
но trnum и itnum = -1
хотя fxnum верный пишет
нужно получить айтем
 
еще интересно, как лучше посчитать количество проектов (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
 
Последнее редактирование:
Помогите, пожалуйста, создать кастом экшн или скрипт. При записи миди партии начало миди айтема создается при поступлении первого сигнала (ноты, контроллера) и это не всегда получается с начала такта. Можно ли как-то сделать, чтобы начало айтема создавалось с точки, с которой назначена запись (с нажатия REC)?
 
Последнее редактирование:
@tosh, непонятно... посмотри в настройках. У меня начало создается при нажатии на запись, независимо от того, есть ли вообще миди-сигнал.
 
@EUGEN27771, Начало создается сразу если стоит на входе audio in, если midi - только при поступлении первого сигнала (ноты, контроллера).

P.S. На входе трека установлен режим записи "Record: MIDI overdub"
 
Последнее редактирование:
Пытался сделать скрипт, что б при выделении трека, который отправляет миди сигнал на трек с мультиканальным инструментом, показывался этот самый vsti (обычно это контакт)(кстати, в кубе это есть по умолчанию на всех миди треках). Но посмотрев документацию, я не нашёл нужного api. Может есть какие способы сделать это?
 
@tosh, здесь есть проблема - если бы скрипты работали в непрерывном режиме(а это малореально) - можно бы было подумать. Но, во-первых - они толком не кушают миди-ноты , во-вторых - работают длинными кадрами(поэтому, наверное, и не добавят полноценную поддержку входного миди). Это бы они могли сделать, если бы блок(кадр, в случае скрипта) был фиксированным, как в JS - там можно по offset посчитать точное время прихода сообщения.
 
  • Like
Реакции: tosh

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