Midi Editor+Main (Action)

Mal Young

New Member
11 Мар 2014
8
0
1
31
Moscow
Делаю экшн для реверса миди и рендеринга этого куска на новую дорожку , но тут столкнулся с проблемой.
Как добавить команды в экшн из разных окон?Первые действия делаются в миди едиторе ,а дальше в мэйне . Как их комбинировать?
 
Последнее редактирование:
Можно комбинировать команды разных окон через скрипты
 
  • Like
Реакции: Mal Young
Не могли бы помочь мне в этом ?
Суть экшна такая Реверс миди ->Баунс на новый трек ->Реверс этого баунса -> Возвращение миди в изначальное состояние ( то есть без реверса )
 
Создайте текстовый файл , вместо txt расширения впишите eel,
для команд главного окна пишите "main_oncommand(command id, 0); "
для комманд миди "midi_oncommand(command id, 0);"
Сommand id - номер в списке экшенов справа от названия
добавьте файл кнопкой load там же в экшенах.
 
Последнее редактирование:
  • Like
Реакции: Mal Young
Спасибо большое!
[DOUBLEPOST=1433764515,1433760688][/DOUBLEPOST]Не выходит)

midi_oncommand(command id, 40003);
midi_oncommand(command id, 40902);
midi_oncommand(command id, _BR_ME_SAVE_NOTE_SEL_SLOT_1);
main_oncommand(command id, _SWS_SAVESELITEMS2);
main_oncommand(command id, 41719);
main_oncommand(command id, 40421);
main_oncommand(command id, 41051);
main_oncommand(command id, _SWS_RESTSELITEMS2);
main_oncommand(command id, 40280);
midi_oncommand(command id, _BR_ME_RESTORE_NOTE_SEL_SLOT_1);
midi_oncommand(command id, 40902);
 
И не должно.
Нужно так -

PHP:
MIDIEditor_OnCommand(40003, 0);
MIDIEditor_OnCommand(40902, 0);
MIDIEditor_OnCommand(NamedCommandLookup("_BR_ME_SAVE_NOTE_SEL_SLOT_1"), 0);
Main_OnCommand(NamedCommandLookup("_SWS_SAVESELITEMS2"), 0);
Main_OnCommand(41719, 0);
Main_OnCommand(40421, 0);
Main_OnCommand(41051, 0);
Main_OnCommand(NamedCommandLookup("_SWS_RESTSELITEMS2"), 0);
Main_OnCommand(40280, 0);
MIDIEditor_OnCommand(NamedCommandLookup("_BR_ME_RESTORE_NOTE_SEL_SLOT_1"), 0);
MIDIEditor_OnCommand(40902, 0);
 
Последнее редактирование:
  • Like
Реакции: Mal Young
Спасибо большое! Хоть что то начало работать ,но(!) не реврсируется миди и слоты не сохраняет видимо т.к. не отмьючивает(
Не поможете?
 
Так я понятия не имею, что вы пытаетесь сделать. Я просто исправил ваши выражения и всё
 
  • Like
Реакции: Mal Young
Реверс миди -> баунс на новую дорожку ->реверс этого баунса -> возврат миди в исходный вид ( то есть обратный реверс)
 
А для чего это?
И ваши ID Экшинов в общем не соответствуют задаче, а некоторых просто не существует -
например 40902
 
Часто пользуюсь этим.Хотелось бы намного ускорить процесс.
[DOUBLEPOST=1434139086,1434138748][/DOUBLEPOST]Все экшены я проверял и по отдельности они работоспособны ,а вот вместе никак (
 

Вложения

  • screenshot.png
    screenshot.png
    11,6 KB · Просмотры: 81
.LUA
PHP:
reaper.Main_OnCommand(40153, 0) -- open editor
MIDI_editor = reaper.MIDIEditor_GetActive()
reaper.MIDIEditor_OnCommand(MIDI_editor, 40003) -- sel all notes
reaper.MIDIEditor_OnCommand(MIDI_editor, 40019) -- reversemidi
reaper.Main_OnCommand(40290, 0) -- time sel to items
reaper.Main_OnCommand(reaper.NamedCommandLookup("_SWS_AWRENDERSTEREOSMART"),0) -- render to new take
reaper.MIDIEditor_OnCommand(MIDI_editor, 40019) -- reverse midi
reaper.Main_OnCommand(40716, 0) -- close editor
item1 = reaper.GetSelectedMediaItem(0, 0)
itempos1 = reaper.GetMediaItemInfo_Value(item1, "D_POSITION")
track = reaper.GetMediaItem_Track(item1)
tracknum = reaper.GetMediaTrackInfo_Value(track, "IP_TRACKNUMBER") - 1

countitems = reaper.CountMediaItems(0)
for i = 1, countitems, 1 do
item2 = reaper.GetMediaItem(0, i-1)
if item2 ~= nil then
  itempos2 = reaper.GetMediaItemInfo_Value(item2, "D_POSITION")
   if itempos1 == itempos2 then
    track2 = reaper.GetMediaItem_Track(item2)
    if track2 ~= nil then
     tracknum2 = reaper.GetMediaTrackInfo_Value(track2, "IP_TRACKNUMBER")
      if tracknum2 == tracknum then
        reaper.SetMediaItemInfo_Value(item2, "B_UISEL", 1)
        reaper.Main_OnCommand(41051, 0) -- reverse audio
      end
     end
     end
   end
end
reaper.SetMediaItemInfo_Value(item1, "B_UISEL", 0)
 
Последнее редактирование:
  • Like
Реакции: Beckoff и Mal Young
да, ошибся я , MIDIEditor_OnCommand правильно для команд миди редактора
 
Код:
function do_actions_from_main_and_midi_sections()
(
  cmd = 40153; // 40153 == open selected item in MIDI editor
 
  midi_cmd = 40003; // 40003 == select all notes
  midi_cmd2 = NamedCommandLookup("_e2c73c812b23e34082db41ed5b8f9d72"); //select high notes
 
  Main_OnCommand(cmd, 0); //open ME
 
  MIDIEditor_OnCommand(MIDIEditor_GetActive(), midi_cmd); //sel all notes
  defer("MIDIEditor_OnCommand(MIDIEditor_GetActive(), midi_cmd2);"); //script sel high notes
  MIDIEditor_OnCommand(MIDIEditor_GetActive(), 4051);//invert sel
  MIDIEditor_OnCommand(MIDIEditor_GetActive(), 2); // ME action: "Close MEditor"
);
 
do_actions_from_main_and_midi_sections();
Пытаюсь скрипт накропать ))).Суть в том,чтобы выделить верхний голос в миди-айтеме (есть скрипт),а затем инвертировать выделение.Так вот скрипт select high notes отрабатывает нормально (через defer),а invert selection ну ни в какую не проходит.Разделил эти две операции на два экшна,
так если "вручную" запускать,всё ок,а если ставлю в кастом друг за дружкой,опять ни в какую (.Какие-нибудь идеи есть?
 
Tito,
PHP:
item = reaper.GetSelectedMediaItem(0, 0)
take = reaper.GetActiveTake(item)
retval, notecntOut, ccevtcntOut, textsyxevtcntOut = reaper.MIDI_CountEvts(take)
if retval ~= nil then
  local pitchOutmax = 0
  for i = 1, notecntOut, 1 do
   retval, selectedOut, mutedOut, startppqposOut, endppqposOut, chanOut, pitchOut, velOut = reaper.MIDI_GetNote(take, i-1)
   pitchOutmax = math.max(pitchOut, pitchOutmax)
  end
  for i = 1, notecntOut, 1 do
   retval, selectedOut, mutedOut, startppqposOut, endppqposOut, chanOut, pitchOut, velOut = reaper.MIDI_GetNote(take, i-1)
   if pitchOut == pitchOutmax then 
     reaper.MIDI_SetNote(take, i-1, false)
     else
     reaper.MIDI_SetNote(take, i-1, true)
   end
  end
end

EUGEN27771, не перешёл, просто изучаю понемногу, авось пригодится где))
 
  • Like
Реакции: Tito
@@Michael, Это нечестно:)!Это политика принуждения к изучению lua.Ладно,будем "грызть"!Спасибо!

Посмотрел,насколько я понял здесь просто "select,если pitchout=max",а я планировал выделение
всего верхнего голоса в айтеме,т.е. если аккорд,то выделяется верхняя нота,если один голос,
то он относится к верхнему голосу автоматически и тоже выделяется.То есть выделяем верхний голос,делаем invert select,delete и получаем на выходе "чистый" 1-й голос.Причём скрипты выделения верхнего голоса есть (правда питоновские ещё),довольно объёмные,так что просить Вас просто неудобно ))).А вот invert selected отдельным скриптом можно было бы попробовать.:-)
 
Последнее редактирование:
Инвертировать выделение:
PHP:
item = reaper.GetSelectedMediaItem(0, 0)
take = reaper.GetActiveTake(item)
retval, notecntOut = reaper.MIDI_CountEvts(take)
if retval ~= nil then
for i = 1, notecntOut, 1 do
   retval, selectedOut, mutedOut, startppqposOut, endppqposOut, chanOut, pitchOut, velOut = reaper.MIDI_GetNote(take, i-1)
   if selectedOut == true then 
     reaper.MIDI_SetNote(take, i-1, false)
     else
     reaper.MIDI_SetNote(take, i-1, true)
   end
  end
end
 
  • Like
Реакции: Tito

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