ReaScripts (скрипты для Reaper) - обсуждение

  • Автор темы Автор темы drzhnn
  • Дата начала Дата начала
Оба выдают значение. GetParam еще и минимум/максимум.
 

Вложения

  • 16.gif
    16.gif
    615,8 KB · Просмотры: 101
Последнее редактирование:
  • Like
Реакции: Aleksandr Oleynik
@Aleksandr Oleynik, Опять у меня не сработал кастом экшн

Код:
function Open_Item_and_Zoom_to_Content()
(
   Main_OnCommand(40153, 0); // MAIN section action 40153: "open selected item in MIDI editor"
   active_MIDI_editor = MIDIEditor_GetActive(); // Now the MIDI editor is opened -> get MIDI editor ID
 
   MIDIEditor_OnCommand(active_MIDI_editor, 40466); // ME action: "zoom to content"
  
MIDIEditor_OnCommand(NamedCommandLookup("_cf13e58d303dc541bd14eed46abbf6fd"), 0); // ME action: "my custom"
  
   MIDIEditor_OnCommand(active_MIDI_editor, 40003); // ME action: "zoom to one loop iteration"
);

Open_Item_and_Zoom_to_Content();
[DOUBLEPOST=1434917448,1434916192][/DOUBLEPOST]Вот строка:
MIDIEditor_OnCommand(NamedCommandLookup("_cf13e58d303dc541bd14eed46abbf6fd"), 0);
Что в ней не так? Подскажите, пожалуйста?
 
@@Michael, Запускать custom action
[DOUBLEPOST=1434918312,1434918275][/DOUBLEPOST]
Вообще-то, если это EEL, то для стандартных Action пишут -
PHP:
MIDIEditor_OnCommand(40466,0);
А для Custom -
PHP:
MIDIEditor_OnCommand(NamedCommandLookup("_cf13e58d303dc541bd14eed46abbf6fd"), 0);
[DOUBLEPOST=1434918366][/DOUBLEPOST]Это цитата с поста #283
 
Тут не экстрасенсы сидят. Никто не знает, какой у вас кастом запускается. Идентификатор "_cf13e58d303dc541bd14eed46abbf6fd" работает только для вашего Reaper.
 
@@Michael,
Это понятно, я не могу осознать какую именно команду надо прописать для запуска custom action в миди эдитооре
Пример:
MIDIEditor_OnCommand(NamedCommandLookup("ID моего кастом экшина"), 0);
 
Я все сделал, что хотел... у меня получилось с помощью 36 обычных команд, вот эти 36 команд я объединил в один кастом экшин и не знаю какая команда его запускает в скрипте
[DOUBLEPOST=1434919074,1434919005][/DOUBLEPOST]Одним вопросом звучит так - какая команда в скрипте EEL запускает custom action в миди эдитооре?
 
Вот строка:
MIDIEditor_OnCommand(NamedCommandLookup("_cf13e58d303dc541bd14eed46abbf6fd"), 0);
Что в ней не так? Подскажите, пожалуйста?
На ум приходит только то, что этот Кастом Экшин не из секции MIDI Editor, а например из Main и тогда строка должна быть вот такой -
Main_OnCommand(NamedCommandLookup("_cf13e58d303dc541bd14eed46abbf6fd"), 0);
 
PHP:
function Open_Item_and_Zoom_to_Content()
(
  Main_OnCommand(40153, 0); // MAIN section action 40153: "open selected item in MIDI editor"
  active_MIDI_editor = MIDIEditor_GetActive(); // Now the MIDI editor is opened -> get MIDI editor ID
  MIDIEditor_OnCommand(active_MIDI_editor, 40466); // ME action: "zoom to content"
  loop(12,
   MIDIEditor_OnCommand(active_MIDI_editor, 40111);
  );
  MIDIEditor_OnCommand(active_MIDI_editor, 40003); // ME action: "zoom to one loop iteration"
);

Open_Item_and_Zoom_to_Content();
 
  • Like
Реакции: tosh
@@Michael, Спасибо огромное, но все же скажите, пожалуйста:
MIDIEditor_OnCommand(active_MIDI_editor, 40466); - эта команда запускает стандартный экшн в MIDI Editor,
а какая команда в скрипте EEL запускает custom action в миди эдиторе?
[DOUBLEPOST=1434920274,1434920122][/DOUBLEPOST]@Aleksandr Oleynik, Ура! Саша, спасибо, так все сработало...
 
Одна из двух -
MIDIEditor_LastFocused_OnCommand(NamedCommandLookup("_cf13e58d303dc541bd14eed46abbf6fd"), 0);
или
MIDIEditor_OnCommand(NamedCommandLookup("_cf13e58d303dc541bd14eed46abbf6fd"), 0);

Других просто нет

[DOUBLEPOST=1434952585,1434920317][/DOUBLEPOST]

Михаил, Евгений,
научите пользоваться функцией defer()
На примере вот этого скрипта -
PHP:
     GetExtState(#trackguid, "TrackGUID", "S1");
     tr = extension_api("BR_GetMediaTrackByGUID", 0, #trackguid);

     TrackFX_GetParamNormalized(tr, 0, 5) == 0?
     (
     TrackFX_SetParam(tr, 0, 2, 0.24);
     );
//////////////////////////////////////////////
     TrackFX_GetParamNormalized(tr, 0, 5) == 1?
(
     TrackFX_SetEnabled(tr, 1, 0);
     TrackFX_SetEnabled(tr, 2, 1);
     TrackFX_SetEnabled(tr, 3, 0);
     TrackFX_SetEnabled(tr, 4, 0);
     TrackFX_SetEnabled(tr, 5, 0);
     TrackFX_SetEnabled(tr, 6, 0);
);
Мне нужно, чтобы скрипт выполнил действия до
///////////////////////////////////////////
И ждал наступления -
TrackFX_GetParamNormalized(tr, 0, 5) == 1
После чего выполнил все оставшееся и закрылся.
 
  • Like
Реакции: tosh
Пишу с телефона, так что работоспособность не гарантирую:

PHP:
GetExtState(#trackguid, "TrackGUID", "S1");
tr = extension_api("BR_GetMediaTrackByGUID", 0, #trackguid);
TrackFX_GetParamNormalized(tr, 0, 5) == 0 ? (
  TrackFX_SetParam(tr, 0, 2, 0.24);
  );

function wait_for_1() (
TrackFX_GetParamNormalized(tr, 0, 5) == 1 ? (
  TrackFX_SetEnabled(tr, 1, 0);
  TrackFX_SetEnabled(tr, 2, 1);
  TrackFX_SetEnabled(tr, 3, 0);
  TrackFX_SetEnabled(tr, 4, 0);
  TrackFX_SetEnabled(tr, 5, 0);
  TrackFX_SetEnabled(tr, 6, 0);
defer("wait_for_1()");
  ) : (
  atexit("");
);
);
wait_for_1();
 
  • Like
Реакции: Aleksandr Oleynik
Сейчас проверю, Спасибо!
Но тут главное синтаксис использования понять.....
Михаил, я видел ваш топ на кокосе по поводу использования в рамках одного скрипта двух функций с defer. Чем дело кончилось?
 
Мой пост был не об этом, а о том, как выключить defer() одного скрипта из другого скрипта. defer() для каждого скрипта свой.
 
Пишу с телефона, так что работоспособность не гарантирую:

PHP:
GetExtState(#trackguid, "TrackGUID", "S1");
tr = extension_api("BR_GetMediaTrackByGUID", 0, #trackguid);
TrackFX_GetParamNormalized(tr, 0, 5) == 0 ? (
  TrackFX_SetParam(tr, 0, 2, 0.24);
  );

function wait_for_1() (
TrackFX_GetParamNormalized(tr, 0, 5) == 1 ? (
  TrackFX_SetEnabled(tr, 1, 0);
  TrackFX_SetEnabled(tr, 2, 1);
  TrackFX_SetEnabled(tr, 3, 0);
  TrackFX_SetEnabled(tr, 4, 0);
  TrackFX_SetEnabled(tr, 5, 0);
  TrackFX_SetEnabled(tr, 6, 0);
defer("wait_for_1()");
  ) : (
  atexit("");
);
);
wait_for_1();
Не, так не работает.
Женя в личке подсказал, вот так работает -

PHP:
GetExtState(#trackguid, "TrackGUID", "S1");
tr = extension_api("BR_GetMediaTrackByGUID", 0, #trackguid);
TrackFX_GetParamNormalized(tr, 0, 5) == 0 ?
(
  TrackFX_SetParam(tr, 0, 2, 0.24);
  );

function wait_for_1()
(
TrackFX_GetParamNormalized(tr, 0, 5) == 1 ?
(
  TrackFX_SetEnabled(tr, 1, 0);
  TrackFX_SetEnabled(tr, 2, 1);
  TrackFX_SetEnabled(tr, 3, 0);
  TrackFX_SetEnabled(tr, 4, 0);
  TrackFX_SetEnabled(tr, 5, 0);
  TrackFX_SetEnabled(tr, 6, 0);
  ) : (
defer("wait_for_1()");
);
);
wait_for_1();
[DOUBLEPOST=1434957126,1434957037][/DOUBLEPOST]
Мой пост был не об этом, а о том, как выключить defer() одного скрипта из другого скрипта. defer() для каждого скрипта свой.
Т.е. defer-ов несколько в одном скрипте не может быть?
Или я совсем сам себя запутал? :)
 
Да, это я defer внутрь не того условия засунул.
Я думаю, что их может быть несколько, но только если их выполнять поочерёдно (выключать с atexit, прежде чем запускать другой).
 
  • Like
Реакции: Aleksandr Oleynik
А как сделать весь этот "блок" -
PHP:
function wait_for_1()
(
TrackFX_GetParamNormalized(tr, 0, 5) == 1 ?
(
  TrackFX_SetEnabled(tr, 1, 0);
  TrackFX_SetEnabled(tr, 2, 1);
  TrackFX_SetEnabled(tr, 3, 0);
  TrackFX_SetEnabled(tr, 4, 0);
  TrackFX_SetEnabled(tr, 5, 0);
  TrackFX_SetEnabled(tr, 6, 0);
  ) : (
defer("wait_for_1()");
);
);
wait_for_1();
частью первого -

PHP:
TrackFX_GetParamNormalized(tr, 0, 5) == 0 ?
(
  TrackFX_SetParam(tr, 0, 2, 0.24);
  );

Ну чтоб Скрипт, при его запуске принудительно в момент, когда TrackFX_GetParamNormalized(tr, 0, 5) не равно НУЛЮ, не зависал при старте в ожидании TrackFX_GetParamNormalized(tr, 0, 5) == 1


??????
Как эту функция function wait_for_1() сделать зависимой от выполнения первого условия?
 
PHP:
GetExtState(#trackguid, "TrackGUID", "S1");
tr = extension_api("BR_GetMediaTrackByGUID", 0, #trackguid);

function wait_for_1()
(
TrackFX_GetParamNormalized(tr, 0, 5) == 1 ?
(
  TrackFX_SetEnabled(tr, 1, 0);
  TrackFX_SetEnabled(tr, 2, 1);
  TrackFX_SetEnabled(tr, 3, 0);
  TrackFX_SetEnabled(tr, 4, 0);
  TrackFX_SetEnabled(tr, 5, 0);
  TrackFX_SetEnabled(tr, 6, 0);
  ) : (
  defer("wait_for_1()");
);
);

TrackFX_GetParamNormalized(tr, 0, 5) == 0 ?
(
  TrackFX_SetParam(tr, 0, 2, 0.24);
  ) : (
  wait_for_1()
);

;
 
  • Like
Реакции: Aleksandr Oleynik
В чём может быть дело?Вот такого плана скрипт запускаю кнопкой старт из окна редактора скриптов
(ну или Ctrl S) - всё работает.Закрываю,запускаю Run из окна экшнов - не работает (((.
Код:
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("_2c424cf79e9fbb4e94396a449556abbc"); //select high notes
  midi_cmd3 = NamedCommandLookup("_BR_ME_SAVE_NOTE_SEL_SLOT_5");//save sel notes
  midi_cmd4 = NamedCommandLookup("_BR_ME_RESTORE_NOTE_SEL_SLOT_5");//restore save sel note
  Main_OnCommand(cmd, 0); //open ME
 
  MIDIEditor_OnCommand(MIDIEditor_GetActive(), midi_cmd);//sel all notes
  MIDIEditor_LastFocused_OnCommand(midi_cmd2 ,0); //script sel high notes
  MIDIEditor_LastFocused_OnCommand(midi_cmd3 ,0); //save sel notes,slot5
  MIDIEditor_LastFocused_OnCommand(midi_cmd4 ,0);//restore sel notes,slot5
 
  MIDIEditor_OnCommand(MIDIEditor_GetActive(), 2); // ME action: "Close MEditor"
);
 
do_actions_from_main_and_midi_sections();
 
Вот прямо сейчас пришла такая идея скрипта, если возможно это реализовать. Чтоб при выделении временного участка в проекте, автоматически включался режим Repeat. Только что выделил участок, чтобы его циклично послушать, репит забыл включить. Такие огрехи случаются довольно часто, и думаю не только у меня. Было бы замечательно это дело автоматизировать.
 
J T, В Extension / Project StartUp Action (SWS) добавляешь:

PHP:
function repeat_while_loop()
  startOut, endOut = reaper.GetSet_LoopTimeRange2(0, false, true, 0, 0, true)
  timesel = endOut - startOut
  if timesel > 0 then
  reaper.GetSetRepeatEx(0,1)
  reaper.defer(repeat_while_loop)
  else
  reaper.GetSetRepeatEx(0,0)
  reaper.defer(repeat_while_loop)
  end
end

repeat_while_loop()
 
  • Like
Реакции: J T
Никто не знает. Но понятно, что какую-то сотую-тысячную долю процента загрузки процессора есть будет.
 
Последнее редактирование:
я скачал интересующий меня конфиг что бы выдрать пару тройку скриптов, проверяю в этом же конфиге их, а рипер выдает ошибку в окне ReaScript Error ибо пути к самим не совпадают т.к. идет обращение к другому профилю пользователя винды. перерыл все настройки, не нашел где изменить путь этот. я очень новичок в программе, если что не пинайте сильно)
 
@@Michael, благодарю, но что-то не так. Вылазит окно.
\Reaper\Scripts\repeat_while_loop.eel:1: syntax error: 'unction <!> Repeat_While_Loop('
 

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