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

  • Автор темы Автор темы @Michael
  • Дата начала Дата начала
Всё верно, я об этом и написал выше, а писать мы в файл что будем? .mid - это бинарник ( ну вернее, midi ивенты -> HEX -> бинарник )
 
Ребята кто знает есть ли такая команда или скрипт с помощью которой можно было бы раскрашивать треки которые находятся в папке т е раcкрашиваешь папку а все треки что в ней раскрашивались бы в такой же цвет автоматически.....
 
Думаю над этим. Пока не знаю как обычное число хранящееся в переменной представить в виде однобайтовой ячейки для того что бы перегнать массив в файл.
[DOUBLEPOST=1447312408,1447312086][/DOUBLEPOST]
Ребята кто знает есть ли такая команда или скрипт с помощью которой можно было бы раскрашивать треки которые находятся в папке т е раcкрашиваешь папку а все треки что в ней раскрашивались бы в такой же цвет автоматически.....
Надо войти в SWS auto Color/icon. Добавить трэк, в поле Filter выбрать (children), в поле Color - Parrent.
 
Ну а нельзя взять JS MIDI Logger и из него всё писать текстом (обычным) в файл? (я в JS ноль)
 
Последнее редактирование:
В родных JS, выводит hex входящих миди. Если этот лог отправить в файл, могу сделать скрипт, который будет перегонять этот лог в мидиайтем.
Хотя читать сухие интеджеры питча/ppq и стринги типа конечно проще.
 
Из JS я так понимаю можно файл писать (file_mem, @serialize, file_avail(handle))? Ну вот
Я как раз с этого и начинал,хотел сначала записать в файл.Потом выяснилось,что запись в файл идет только в секции @serialize,и что пишет не в любой файл,а именно в файл проекта,вдобавок в бинарном виде.Может быть,я где-то неправильно понял,но вроде именно так.
И именно поэтому-не вариант.
JS MIDI Logger и из него всё писать текстом
Вообще,тот плаг что я сделал и есть по сути почти MIDI Logger,только с некоторыми добавочными функциями.Но в файл(отдельный,не проекта и в нормальном виде) напрямую,как уже написал не получается.
 
Выглядит вот так,почти тоже только в десятичном виде.
Снимок.PNG
Теперь из скрипта листая Msg Num нужно считывать остальные данные и все.
выложе поглядеть что навоял.
Тут пока бардак полный.Но плаг пишет и воспроизводит входящие миди,точность записи до сэмпла,воспроизведение делалось только для эксперимента и проверки.И много лишнего.
При записи ставим REC,при каждом новом запуке воспроизведения или смене позиции проигрывания-буфер переписывается-это то,что нам и надо.
Для воспроизведения(послушать) ставим Play.
PHP:
slider1:0<0,1,1{REC,PLAY Recorded}>Mode
slider2:0<0,65536,5>MSG Number
slider3:0<0,1000000000,1>Block Position
slider4:0<0,2048,1>Offset
slider5:0<0,127,1>msg1
slider6:0<0,127,1>msg2
slider7:0<0,127,1>msg3

in_pin:none
out_pin:none
@slider
(slider1 == 1 && play_state == 0 ) ? i = 0;output_msg_count=0;
(slider1 == 0 && play_state == 0 ) ? i = 0;output_msg_count=0;

s = slider2;
slider3= buf[s];slider4=buf[s+1];slider5=buf[s+2];slider6=buf[s+3];slider7=buf[s+4];

@init
ext_noinit = 1;

//===RECORD INPUT MIDI===//
@block
sample_position = floor(srate*play_position + 0.5);

(play_state == 0 || sample_position<Last_Point || sample_position-Last_Point > 4*samplesblock)  ?
                                      (i = 0;output_msg_count=0;
                                       Start_Point = sample_position;);

block_position = sample_position - Start_Point;
slider1 == 0 && play_state == 1 ?
   (
    while (midirecv(offset,msg1,msg2,msg3) )
             (i==0 ? input_msg_count=0;
              input_msg_count+=1;
              buf[i] = block_position;
              buf[i+1] = offset;
              buf[i+2] = msg1;
              buf[i+3] = msg2;
              buf[i+4] = msg3;           
              i+=5;
              midisend(offset,msg1,msg2,msg3);//Pass true
              );
   );

Last_Point = sample_position;
//=========PLAY Recorded MIDI===================
@sample
slider1 == 1 && output_msg_count<input_msg_count && (play_state == 1 || play_state == 5) ?
                  (
                   block_position  ==  buf[i] ?
                     ( midisend( buf[i+1],buf[i+2], buf[i+3],buf[i+4]);
                       output_msg_count+=1;
                       i+=5;
                      );              
                  );
Но если воспроизведение не нужно,а оно для скрипта не нужно!,то все упрощается в разы!!!
И будет работать очень надежно!!!
=========================
block_position в плаге можно заменить на beat_position,offset можно расчитывать в скрипте.
По идее,в JS нужно оставить только накапливание в буфер:
=номера сообщения,
=позиции,
=offset,msg1,msg2,msg3.
Ну и перезапись буфера при смене позиции проигрывания,перезапуске и т.д.
=========================================================
Даже в таком виде,как сейчас,я записывал длинющую мидюху с множеством СС для проверки и все воспроизводилось абсолютно без ошибок.
П.С. Готовые полностью рабочие варианты в теме по скриптам
 
Последнее редактирование:
State_Chunk_Definitions:
Jesusonic Plugin
For the sake of formatting, the plugin data has been truncated.

<JS "Guitar/tremolo" "" // Start of JS plugin data
// field 1, str, filename
// field 2, str, display name (filename used if empty)​
4.0 -6.0 0.0 - - - - - - - - - - - - - - - - - - - - // Data, 64 fields of float or '-' separated by spaces - это только параметры
> // End of JS plugin data

Короче в файл писать надёжнее. Лишний висящий defer скрипт не есть хорошо.
 
@@Michael, я поразбирался тут в JSFX. Как я понял мы можем использовать только WAV, TXT, OGG или RAW. Какой из -них ты мог бы использовать в качестве контейнера миди данных?

Видимо в процессе отладки понадобится Hex редактор или просмотровщик. Напомните плиз что у нас имеется из подобного.
 
А в чём разница? Писать в файл всё равно будем текст. По логике .txt конечно. В корневую /REAPER и с говорящим именем, LastMidiBuffer.txt, например.

Hex редактор или просмотровщик

http://www.binaryhexconverter.com/hex-to-decimal-converter

LUA:
Код:
retval, hex = reaper.GetUserInputs('hex 2 dec', 1, '', '')
if retval ~= nil then hex = tonumber(hex, 16) if hex ~= nil then reaper.ShowConsoleMsg(hex) end end
 
Последнее редактирование:
Парни, я могу вам только Пиво подносить...., увы, из дальнейшего обсуждения конструктивной помощи от меня будет НОЛЬ.
 
Да, кстати
пока скрипт не умеет принимать и передавать миди

Передавать на виртуальную клавиатуру:
Код:
reaper.StuffMIDIMessage(integer mode, integer msg1, integer msg2, integer msg3)
Принимать:
reaper.get_action_context()

Returns contextual information about the script, typically MIDI/OSC input values:
is_new_value,filename,sectionID,cmdID,mode,resolution,val = reaper.get_action_context()

val will be set to a relative or absolute value depending on mode (=0: absolute mode, >0: relative modes). resolution=127 for 7-bit resolution, =16383 for 14-bit resolution.
Notes: sectionID, and cmdID will be set to -1 if the script is not part of the action list. mode, resolution and val will be set to -1 if the script was not triggered via MIDI/OSC.
+
Код:
reaper.SetExtState(string section, string key, string value, boolean persist)

Этим я сделал СС контроль для Quantize tool

belovw, может пригодится:
http://www.pjb.com.au/comp/lua/MIDI.lua
 
Последнее редактирование:
Короче,уже легко пишутся любые Control Change.С любой позиции,и вставляются на любой трек,работает как положено,вставляются моментально.И скрипт без Defer() вообще.
1234.gif
Осталось с note on - note off разобраться и все привести в порядок.
 
  • Like
Реакции: Aliko
Короче,уже легко пишутся любые Control Change.С любой позиции,и вставляются на любой трек,работает как положено,вставляются моментально.И скрипт без Defer() вообще.
Посмотреть вложение 106817
Осталось с note on - note off разобраться и все привести в порядок.
Женя, но это же круть неимоверная!
Значит идея скрестить JS и Скрипт была путней.....

Но нужно бы Джастину как-то объяснить - на сколько было бы круче добавить некоторыми возможностями JS-а ReaScript.
Ну вот понимания сэмпла дало бы возможность нормальных таймингов, миди вход-выход и аудио вход-выход также бы помогли...
 
@EUGEN27771, вышли скрипт. Без него пока не понимаю логику работы плагина.
[DOUBLEPOST=1447357256,1447356926][/DOUBLEPOST]@EUGEN27771, @@Michael, что-то мне подсказывает что текущий вопрос можно порешать средствами одного скрипта без участия JSFX.
 
Все,уже пишутся и ноты.
===
Буфер перезаписывается при смене позиции во время воспроизведении,при повторном воспроизведении и т.п.Прямо как настоящий.:)
[DOUBLEPOST=1447361073,1447360484][/DOUBLEPOST]
попробуй добавить опцию: имя айтема согласно имени трека.
Опция добавлена.
П.С. рабочие версии в теме http://rmmedia.ru/threads/117419/
 

Вложения

  • 12345.gif
    12345.gif
    5,1 MB · Просмотры: 114
Последнее редактирование:
Женя, допилишь JS - можно будет сделать просто трэк тэмплэйт с ним отстроенный и всё.
 
@Aleksandr Oleynik, да,главное,что уже в основном работает,а допилить потом не проблема.Спортивный интерес удовлетворен;)
 
@EUGEN27771, очень, очень круто!
Нужно на Кокосе твою работу выложить! Там до сих пор ни кто подобного решения не предлагал.
PS: А вот с Аудио как? :)
 
что-то мне подсказывает что текущий вопрос можно порешать средствами одного скрипта без участия JSFX.
Пока вряд ли.Входные ноты скриптом не прочитать пока.
вышли скрипт. Без него пока не понимаю логику работы плагина.
Плагин просто читает и сохраняет все входные миди-данные в свой буфер,типа "массив".
Потом же,при запуске,скрипт вытягивает данные из буфера плагина(через слайдеры плагина) уже в свой буфер.Дальше скрипт формирует из этих данных ноты и СС,пока что так,нужно еще добавить остальные события.
Нужно на Какосе твою работу выложить
Тут хотя бы все до ума довести.И на кокосе просто никто и не брался,там у многих такой уровень,что могли бы наверно и вообще нативно сделать
 
Могли бы, но не сделали.
[DOUBLEPOST=1447542720,1447363143][/DOUBLEPOST]А нельзя не называть ни как Трек с JS-ом? Можно ведь просто отлавливать трек, на котором этот JS есть и всё?
А вообще - получилось СУППЕР!!!!!!
Женя, опубликуй эту работу у Кокосов!
 

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