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

fugas20051

New Member
26 Янв 2009
18
1
3
@Aleksandr Oleynik постоянно, при каждой сессии записи вокала, когда из много дублей выбирается найлучшые моменты, ну и етот скрипт можна будет применять и к гитаре и тд
 
  • Like
Реакции: RJ Baker

sapun

Member
21 Авг 2014
134
11
18
nsk
Приветствую! Можно ли как-то скриптом увеличить скорость прокрутки колесом мыши вверх/вниз? У меня колесо листает треки вверх/вниз.
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
возможно добавить конкретный плагин на выделенный трек (или несколько треков).
Можно без скриптов и цикл-экшнов .Через через SWS-Resources.Добавляется,даже когда на треке уже есть такой же плагин
 
  • Like
Реакции: fruitcore

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
@Aleksandr Oleynik постоянно, при каждой сессии записи вокала, когда из много дублей выбирается найлучшые моменты, ну и етот скрипт можна будет применять и к гитаре и тд
Я не понимаю как он поможет, не понял из описания.....
Может вы мультик сделаете того, что хотите автоматизировать - проделывая всё ручками?
Ну и @@Michael правильно написал - для работы с дублями в Рипере есть механизм Тэйков - который и следует использовать.... А вот для некоторых более удобных манипуляций с Тейками - где-то выкладывали Кастом Экшин ...., дигидон кажется.
Вот, Glue Takes -
http://rmmedia.ru/threads/107757/page-2#post-1870549
Все прочие манипуляции с тейками делаются стандартным инструментарием - вам с ним нужно просто разобраться.
 
Последнее редактирование:

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
Ну всё верно. Файл чейна по сути - код плагина. В Lua его можно добавить напрямую с помощью SetTrackStateChunk. А вот как его закодировать собственно или как-то ещё получить без сохранения цепи - неизвестно.
Wiki гласит:
PHP:
VST(i) Plugin

    <VST "VST: SomePlugin" "SomePlugin.dll" 0 "Sax offender"  //  Start of VST plugin data
                                                              //   field 1, str, default name
                                                              //   field 2, str, filename
                                                              //   field 3, int, ??
                                                              //   field 4, str, display name (default used if empty)
    RmFkbe9e7f4CAAAAAQAAAAAAAAACAAAAAAAAAAIAAAABAAAAAAAAAA==  //  Binary data, leave it alone (variable number of lines)
    AgAAAAAAAAAwAAAAAAAAAAAAEADvvq3eDfCt3sP1qD4zMzM/AAAAPw==  //
    mplZPwAAAAAAAAA/MzMzP83MzD4AAAAAAABAP1Jlc29uYW50IEZpbA==  //
    dGVyAA==                                                  //
    >                                                         //  End of VST plugin data
Можно попробовать и без бинарного кода обойтись, надо поэкспериментировать))
UPD Не, Рипер очень суров к форматированию бинарного кода, надо это очень тонко учитывать, плюс потом Reaper сам генерирует FXGUID, автоматом создаёт чейн + параметры чейна. Из 10 тестов в двух плагин успешно добавился, в остальных либо криво форматируется имя, либо плагин находится, но его конфигурация теряется на полпути. Ну и вообще не очень-то разумно лезть в файл проекта, не зная, как он строился.
 
Последнее редактирование:

LilColt

Well-Known Member
29 Ноя 2011
1.551
1.017
113
Маркс
В общем та тема видать затухла да и половина ссылок не пашут,в связи с этим имею смелость попросить о таком экшене как в этом посте:
http://rmmedia.ru/threads/107757/#post-1690277

А то ещё мой скил не достаточно прокачен для такого:)
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
Скрывать опасно, на мой взгляд. Вылезет что-нибудь где-нибудь - будешь сто лет искать где, пока не окажется, что ты это что-то скрыл.
Уж лучше Track: Cycle folder collapsed state.
 

LilColt

Well-Known Member
29 Ноя 2011
1.551
1.017
113
Маркс
Так конечно не комильфо...громоздко
А других вариантов нету?
Снимок.PNG
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
LilColt, открываешь .reaperthemezip / rtconfig.txt и меняешь все tcp_heights 10 (скорее всего, судя по скрину) на tcp_heights 5 (пять - это высота суперсжатого состояния дочек в пикселях)
 
Последнее редактирование:
  • Like
Реакции: LilColt

LilColt

Well-Known Member
29 Ноя 2011
1.551
1.017
113
Маркс
Как я понимаю линии просто тоньше станут в 2 раза?
Это всё равно не то:)
Ладно смирюсь,попривыкну думаю.
 

LilColt

Well-Known Member
29 Ноя 2011
1.551
1.017
113
Маркс
Иногда голова работой забита,которую нужно сделать в сроки,и кастомизация рипера отходит на 2ой план.
Помогли и хорошо,язвить только вот не нужно.
 
  • Like
Реакции: Andrey Marchenko

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
@@Michael, подскажите,как работает PreventUIRefresh.В общем,нужно отключить обновление интерфейса на время выполнения скрипта,ставлю PreventUIRefresh(1),в конце PreventUIRefresh(-1),по аналогии с чужими скриптами.Не помогает.Что означает число в скобках и как этим PreventUIRefresh правильно пользоваться?
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
@@Michael, Есть несколько скриптов,пока для эксперимента.
Один устанавливает тональность и лад для всех выделенных МИДИ-айтемов по первому айтему(образцу).То есть,устанавливаем вручную для первого айтем(в первом открывшемся после запуска скрипта МИДИ-эдиторе),а для остальных те же данные устанавливаются автоматически сразу после закрытия окна МИДИ-эдитора.
PHP:
 //=6=For Restore MIDI-Item(ONLY) Selection After Processing==//       
function Restore_Item_Selection()
(
n = 0;loop(Midi,SetMediaItemSelected(Sel_Item_ID[n],1);n += 1;);
UpdateArrange();//Update After All Processing
);

//=5=Set_Root_and_Scale For EACH MIDI-ITEM==//
function Set_Root_and_Scale() // For EACH MIDI-ITEM
( 
Main_OnCommand(40153, 0); // MAIN section action "open selected item in MIDI editor"
ME = MIDIEditor_GetActive();//Get Active MIDI Editor
Take = MIDIEditor_GetTake(ME);//Get opened in ME Take
MIDI_GetScale(Take,rootOut,scaleOut, #name) != 1 ? MIDIEditor_OnCommand(ME, 40757);//forcibly ativate Scale!!!
   //===Set Root===//
  Loop(12,
        CurRoot = MIDIEditor_GetSetting_int(ME, "scale_root");//scale_root: returns 0-12 (0=C)
        CurRoot != User_Root ? MIDIEditor_OnCommand(ME, 40764);//set root
       );
   //===Set Scale===//   
  Loop(15,
        MIDIEditor_GetSetting_str(ME, "scale", #CurScale);//scale: returns the scale,ex. "102034050607" for a major
        stricmp(#CurScale,#User_Scale) != 0 ? MIDIEditor_OnCommand(ME, 40757);//set scale
       );
MIDIEditor_OnCommand(ME, 2); // ME action: "Close M-Editor"
Take == GetActiveTake(Sel_Item_ID[Midi-1]) ? Restore_Item_Selection();//Restore MIDI-Selection After last item been processed!!!
);
    
//=4=function "All_Scale_Root()" call func "Set_Root_and_Scale()" For EACH sel MIDI-ITEM,except 1-st==//
function All_Scale_Root()
(
n = 1;loop(Midi-1,SelectAllMediaItems(0,0);SetMediaItemSelected(Sel_Item_ID[n],1);//Select n-item by ID
           Set_Root_and_Scale();//Call func "Set_Root_and_Scale()"
           n += 1;);
);

//=3=function GET "User Scale-Root" for 1-st ITEM!!!==//
//====================================================//
function User_Data()//Scale & Root Note in 1-st MIDI-Editor setting
(
ME = MIDIEditor_GetActive();//Get Active MIDI Editor
ME ?
    (User_Root = MIDIEditor_GetSetting_int(ME, "scale_root"); //scale_root: returns 0-12 (0=C)
     MIDIEditor_GetSetting_str(ME, "scale", #User_Scale);     //scale: returns the scale = #User_Scale
     defer("User_Data();")) :
                             (Act_Scale = MIDI_GetScale(GetActiveTake(Sel_Item_ID[0]),rootOut,scaleOut, #name);
                               (Act_Scale && Midi-1) > 0  ?  All_Scale_Root(); //Call func "All_Scale_Root()",IF ME been closed
                             );
);  
//========================================================================//
//=1=save MIDI-Items ONLY ID-s to Array==//
Count_Sel_Items = CountSelectedMediaItems(0);//All selected,Audio and MIDI
  All = 0;Midi = 0;//indexes for loop;all=Audio+MIDI,Midi=MIDI-Items ONLY!!!
  loop(Count_Sel_Items,
       Cur_Item_ID = GetSelectedMediaItem(0,All);
       Is_MIDI = TakeIsMIDI( GetActiveTake(Cur_Item_ID) );
       Is_MIDI ? (Sel_Item_ID[Midi] = GetSelectedMediaItem(0,All);Midi+=1;);//Get sel midi-items IDs to Array "Sel_Item_ID[]"
       All += 1;
       );//Midi = count of selected MIDI-Items

//=2=Open 1-st Item in ME for determining USER settings(Root and Scale)==//
Midi ?  //if at least one MIDI-Item selected,then:
       (SelectAllMediaItems(0,0);SetMediaItemSelected(Sel_Item_ID[0],1);//Select ONLY First MIDI-item by ID
        Main_OnCommand(40153, 0); // MAIN section action "open selected item in MIDI editor"
        User_Data(););

Main_OnCommand(40345, 0);//All-Notes-Off
Другие-транспонируют все выделенные МИДИ-айтемы(или выделение,если есть) на ступень выше-ниже(в примере +1 ступень)
PHP:
Undo_BeginBlock();
//=================
GetSet_LoopTimeRange(Sel_Set,Sel_Loop,Sel_start,Sel_end,Sel_autoseek);
( Sel_end - Sel_start &&  CountSelectedMediaItems(0) )  ?
  Main_OnCommand(40061, 0);//Split At Selection
//=================

//==1==save MIDI-Items ONLY ID-s to Array====//
Count_Sel_Items = CountSelectedMediaItems(0);//All selected,Audio and MIDI
  All = 0;Midi = 0;//indexes for loop;all=Audio+MIDI,Midi=MIDI-Items ONLY!!!
  loop(Count_Sel_Items,
       Cur_Item_ID = GetSelectedMediaItem(0,All);
       Is_MIDI = TakeIsMIDI( GetActiveTake(Cur_Item_ID) );
       Is_MIDI ? (Sel_Item_ID[Midi] = GetSelectedMediaItem(0,All);Midi+=1;);//Get sel midi-items IDs to Array "Sel_Item_ID[]"
       All += 1;
       );//Midi = count of selected MIDI-Items

//==2==Transpose ALL MIDI-Items==//
Midi ?
(n=0;
loop(Midi,
          SelectAllMediaItems(0,0);SetMediaItemSelected(Sel_Item_ID[n],1);//Select n-MIDI-item by ID
          Main_OnCommand(40153, 0); // MAIN section action "open selected item in MIDI editor"
          ME = MIDIEditor_GetActive();//Get Active MIDI Editor
                      
     MIDIEditor_OnCommand(ME, 40006); // ME action: "Sel all Events"
     MIDIEditor_OnCommand(ME, 40177);//Up Notes +1 scale step
     Main_OnCommand(40345, 0);//All-Notes-Off
     MIDIEditor_OnCommand(ME, 2); // ME action: "Close MEditor"
     n+=1;  
     );  
);

//==3==Restore MIDI-Items selection==3==//
(n = 0;loop(Midi,SetMediaItemSelected(Sel_Item_ID[n],1);n += 1;););

   
Undo_EndBlock("~Smart-Transpoze~", 0); //Undo
Main_OnCommand(40345, 0);//All-Notes-Off
UpdateArrange();
Таким образом,можно легко менять аккорды в композиции без массы лишних действий на всех МИДИ-дорожках сразу парой щелчков.
При выполнении скриптов много раза открывается- закрывается миди-эдитор(в зависимости от кол-ва выделенных айтемов),другого простого способа установить тональность,лад и транспонировать ноты по ступеням я не нашел.
Хотел избавиться от этого эффекта мигания,чисто для эстетики,сейчас понял,что PreventUIRefresh тут вряд ли поможет.Есть ли еще варианты?
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
Нужно с учетом тональности и лада.У меня и сейчас все работает как задумывалось,проблем вроде нет,только как-то неуклюже скрипты построены,не напрямую,а через постоянное автоматическое открытие-закрытие миди-редактора.Пока не вижу других простых средств.Вот так работает на данный момент-
1.gif
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
Так, ну насчёт транспонирования - можно конечно прогнать get/set note через все выделенные тейки, но есть SWS/FNG Transpose selected MIDI Items up (down) a semitone.

Насчёт "менять аккорды" вариант такой:
1) открыть миди эдитор
2) привязать все ноты выделенных тейков к scale/root данного MIDI Editor

Правильно я понял?
 
Последнее редактирование:

Vet

Active Member
13 Окт 2009
104
115
43
Друзья, всем привет. Требуется небольшая помощь с CA.
Задачка:
1. Выделил item или item'ы на одном или разных каналах, не важно.
2. Нажал на "E" (по умолчанию inline editor).
3. Выделенный item(ы) масштабируются на весь рабочий экран, всё остальное скрывается, во всех item'ах открываются inline editor'ы.
4. Вношу быстрые правки, опять нажимаю "E" - всё возвращается к первоначальному виду.

Я всё реализовал, всё, как будто, работает :) Но есть одно "НО". Открытие inline editor - это триггер. И экшн отрабатывает некорректно. Работает так:
1. Всё замечательно открывается и масштабируется. Но когда нажимаешь "E", чтобы всё вернуть, сначала просто закрывается inline editor и только если ещё раз нажать "E" всё откатывается к первоначальному состоянию.
Вопрос: можно ли как-то обойти эту "проблемку"? Экшн "close inline editor" не помогает (и вообще не ясно зачем он нужен, если открытие - триггер?).
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
SWS/FNG Transpose selected MIDI Items up (down) a semitone
Это я пробовал,нет привязки к тональности ,даже когда в миди-редакторе она установлена,транспонируется только на полутон,а не по ступеням.
У меня 1-ый скрипт задает тональность и лад для всех выделенных айтемов на любых треках,2-ой транспонирует по ступеням лада(по "разрешенным" нотам) участки выделенных айтемов,то есть по допустимым аккордам в заданной тональности.Короче,задача полностью решена.
Единственное,мне не нравится сам подход,но это ладно.Может добавят в API прямую установку настроек миди-эдитора,будет уже красивее,1-ый скрипт тогда уложится в несколько строк.
[DOUBLEPOST=1440081929,1440081549][/DOUBLEPOST]
1. Всё замечательно открывается и масштабируется. Но когда нажимаешь "E", чтобы всё вернуть, сначала просто закрывается inline editor и только если ещё раз нажать "E" всё откатывается к первоначальному состоянию.
Вопрос: можно ли как-то обойти эту "проблемку"? Экшн "close inline editor" не помогает (и вообще не ясно зачем он нужен, если открытие - триггер?).
Непонятно расписано.Может gif скинете?
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
прямую установку настроек миди-эдитора
А смысл? Всё равно надо будет указывать какой миди эдитор, т.е. его всё равно придётся открывать/закрывать.

Ваш скрипт можно немного по-другому реализовать, без открывания-закрывания, можно сделать что-то в духе: snap selected items notes to opened midi editor scale and root (при открытии миди редактора каждого из айтемов будут прежние настройки, но ноты будут такие какие нам нужны).
 
Последнее редактирование:

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
@Vet, работает вроде,как и описано
А смысл? Всё равно надо будет указывать какой миди эдитор, т.е. его всё равно придётся открывать/закрывать.
Я перепутал немного,есть MIDI_GetScale(MediaItem_Take take, int &rootOut, int &scaleOut, #name),считывает настройки без открытия миди-эдитора.Теперь бы MIDI_SetScale...
Ваш скрипт можно немного по-другому реализовать, без открывания-закрывания, можно сделать что-то в духе: snap selected items to opened midi editor scale and root (при открытии миди редактора каждого из айтемов будут прежние настройки, но ноты будут такие какие нам нужны).
То есть в открыть Миди-эдитор,и,активируя поочередно айтемы,транспонировать?
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
Зачем поочерёдно. Все выделенные разом. Как до компьютера доберусь, нарисую.
SetScale я сделал (см ссылку на пост на оффоруме) прямым редактированием параметров тейка, миди редактор почему-то игнорит эту строку. А я предлагаю сейчас по сути переписать в скрипте экшн Force selected notes into snap scale, который на данный момент работает только из под миди редактора.
 
Последнее редактирование:
  • Like
Реакции: EUGEN27771

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
Все выделенные разом
Тогда нужно в МИДИ-эдиторе сделать выделенные треки доступными для редактирования(editable),но это только руками,экшна такого нет.Но может я чего-то упустил.Может у Вас получится
 

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