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

  • Автор темы Автор темы @Michael
  • Дата начала Дата начала
Эту болезнь очень легко вылечить. Чуть ли не мгновенно. Слепой тест :) Одного раза будет достаточно - пара секунди и всякая "огромная разница" превратится в отчаяние :) Главное совсем не лишиться рассудка
 
@Aleksandr Oleynik, хотел написать то же самое... но сдержался ))))
А я не сдержанный....
Я считаю ОГРОМНЫМ ЗЛОМ для всех занимающихся музыкой слушать и обсуждать домыслы и мифы не подкреплённые ни знанием ни опытом!
Подобные вбросы нужно резко и жёстко пресекать.
Да и в правилах же есть - любые “откровения” (а чаще - откровенную чушь) следует подкреплять примерами.
 
Для быстрого "размножения" (копирования) итема на треке есть экшен:
SWS/BR: Options - Toggle "Move edit cursor when pasting/inserting media"
который перемещает курсор в конец итема. Но для правильного размещения нужно, чтобы вставляемое-копируемое было длинной совпадающей с сеткой. Что не всегда удобно.
Можно ли (есть ли) сделать экшн, который бы перемещал курсор к ближайшему после вставленного значению выбранной сетки?
Пример: переключил грид в 1/4, кинул wav бочки на трек, и Ctrl+V размножил её как угодно долго.
 
Скажите пож. есть такой экшн что переключаеть семплы Xenakios/SWS: Switch item source file to next in folder.А как сделать что б переключались миди файлы.Возможно ли это вообще.Спасибо
 
Пример: переключил грид в 1/4, кинул wav бочки на трек, и Ctrl+V размножил её как угодно долго.
Есть такое дело Item: Duplicate selected area of items у меня на <Ctrl>+<Shift>+<D> сидит

178389

----
Вариант 2
Edit: Copy items/tracks/envelope points (depending on focus) within time selection, if any (smart copy)
и далее
Item: Paste items/tracks <Ctrl>+<V> много много раз
178390
 
Последнее редактирование:
  • Like
Реакции: mitinglas
Скажите пож. есть такой экшн что переключаеть семплы Xenakios/SWS: Switch item source file to next in folder.А как сделать что б переключались миди файлы.Возможно ли это вообще.Спасибо
Не знаю ответ на ваш вопрос, но могу предложить альтернативный вариант. Использовать Media Explorer. Включить галочку Start on Bar. Выбрать там же Tempo match on. В настройках роутинга ескплорера выбрать Play trough selected track. Теперь запускайте основной проект и миди файл из Медиа Браузера. Проверил - работает.
 
Не знаю ответ на ваш вопрос, но могу предложить альтернативный вариант. Использовать Media Explorer. Включить галочку Start on Bar. Выбрать там же Tempo match on. В настройках роутинга ескплорера выбрать Play trough selected track. Теперь запускайте основной проект и миди файл из Медиа Браузера. Проверил - работает.
спасибо.Но я думал что без медиа експлорера.Т.е создаю темплейт трек с файлом миди из папки (допустим НАТ) потом мне нужно партию хета я вызываю созданый темплейт трек с файлом миди хета.И переключением кнопки типа (Xenakios/SWS: Switch item source file to next in folder ) у меня переключаются миди айтемы из папки .
 
переключением кнопки типа (Xenakios/SWS: Switch item source file to next in folder ) у меня переключаются миди айтемы из папки .
Выбором мышкой файла в медиа ехплорере будет меняться партия. По сути тоже самое. Не настаиваю.
 
Ну или соберите все эти миди файлы в один айтем как тэйки и переключайте одной клавишей (по умолчанию <T>)
 
@zenykmusic, на мой взгляд проще через медиа эхплорер - телодвижений меньше.
Потом не забудьте рассказать как вариант прижился.
 
Я же не настаиваю. Если работает - то почему нет. Но вам же нужно было использовать подмену миди файлов.
С миди файлами это будет работать? Я попробовал - вроде как работает до поры до времени, но с глюками.
 
Я же не настаиваю. Если работает - то почему нет. Но вам же нужно было использовать подмену миди файлов.
С миди файлами это будет работать? Я попробовал - вроде как работает до поры до времени, но с глюками.
У меня не работает.А как Вы пробовали.У меня только с вав форматом
 
@zenykmusic, я же написал - глючит этот способ. Трясите Джастина что бы поправил, или ищите другое варианты если мои использовать религия не позволяет.
 
Призываю на помощь коллективный разум:
Интересно стало, что будет, если записать output -> MIDI в item не на первый миди-bus
178478

Последние 4 байта распарсить легко: bus, msg1, msg2, msg3
Что такое еще три байта?

В финальном варианте я хочу собирать сам такой итем собирать без побочных эффектов.
На данный момент я делал свои кастомные SysEx F0 7D bus <buffer> F7. Но с ними проблема в том, что если придет не обынкновенное сообщение, а настоящий SysEx — его надо обрабатывать как-то по-другому. А раз в Рипере уже есть свои „безконфликтные“ SysEx, может к ним и привязаться? Только как бы их так вытаскивать в первозданном виде?

UPD: Я понял, что здесь никакие SysEx не генерируются, SysEx я в другом JSFX делаю, но он у меня на ноутбуке валяется.... ЗХдесь я думаю пока, как обрабатывать басы.
Текущий JSFX (Я еще не тестировал, насколько там все корректно экспорируется)
JSX:
desc:Levitanus(reasession) — Render Midi

slider1:0<0,1,1>Save
options:gmem=ReasessionRenderMidi;

@init
maxBuf = 65536;
bufLoc = 10000;
qnOffset = 500000;
bufPtr = 1000000;
bufLen = 1500000;
bufOut = 2000000;
memPtr = 9999;
memCounter = 0;
bufOutCounter = 0;

function store_buf(buf, len)(
    qnOffset[memCounter] = beat_position;
    memCounter == 0 ? (
        bufPtr[0] = 0
        ) : (
            bufPtr[memCounter] = bufPtr[memCounter-1] + bufLen[memCounter-1]
        );
    bufLen[memCounter] = len;
    i = 0;
    while (i < len)(
        bufOut[bufPtr[memCounter + i]] = buf[i];
        i += 1;
        bufOutCounter += 1;
    );
    memCounter += 1;
    memPtr[0] = memCounter;
);

@block
    while ((recvlen = midirecv_buf(offset, bufLoc, maxBuf)) > 0) (
        play_state == 1 ? store_buf(bufLoc, recvlen);
        midisend_buf(offset, bufLoc, recvlen);
    );

@slider
slider1 == 1?(
    i = 0;
    gmem[0] = memPtr[0];
    while (i <= memPtr[0])(
        gmem[qnOffset + i] = qnOffset[i];
        gmem[bufPtr + i] = bufPtr[i];
        gmem[bufLen + i] = bufLen[i];
        i2 = 0;
        while (i2< bufLen[i])(
            gmem[bufPtr[i] + i2] = bufOut[bufPtr[i] + i2];
        );      
        i+=1;
    );
    memCounter = 0;
    slider1 = 0;
);



@serialize
// for saving data after render
file_mem(0, memPtr,  1);
file_mem(0, qnOffset,  memCounter);
file_mem(0, bufPtr,  memCounter);
file_mem(0, bufLen,  memCounter);
file_mem(0, bufOut,  bufOutCounter);
 
Хм. Интересно. Поставил на трек-донор SysEx
F0 7D 01 54 67 7F 54 F7
на трек пришел такой месседж
F0 FF 52 50 62 02 F0 7D 01 54 67 7F 54 F7 F7

А если верить докам „(msg should not include bounding F0..F7)“. О как.
 
Хм. Интересно. Поставил на трек-донор SysEx
F0 7D 01 54 67 7F 54 F7
на трек пришел такой месседж
F0 FF 52 50 62 02 F0 7D 01 54 67 7F 54 F7 F7

А если верить докам „(msg should not include bounding F0..F7)“. О как.

Всё верно. от тебя требуют bytestr.
Код:
SysEx_msg = 'F0 7D 01 54 67 7F 54 F7'
if SysEx_msg:match('F0(.*)F7') then SysEx_msg = SysEx_msg:match('F0(.*)F7') end
SysEx_msg_bin = '' for hex in SysEx_msg:gmatch('[A-F,0-9]+') do  SysEx_msg_bin = SysEx_msg_bin..string.char(tonumber(hex, 16)) end

ME = reaper.MIDIEditor_GetActive()
take =reaper.MIDIEditor_GetTake( ME ) 
 reaper.MIDI_InsertTextSysexEvt( take, false, false, 0, -1, SysEx_msg_bin )
 
  • Like
Реакции: PianoIst
@@Michael, Это я знаю, спасибо :)
Меня больше смущает, что если этот самый 'F0 7D 01 54 67 7F 54 F7' положить в item на треке 1, потом послать на второй bus на трек 2 и записать, то там уже запишется „неправильный“ SysEx
F0 FF 52 50 62 02 F0 7D 01 54 67 7F 54 F7 F7
178483

Но я сам еще не пробовал скриптом такой вставлять. Ночью закончил на том, что научился вытаскивать с помощью JSFX через gmem в скрипт „запись“ миди с трека.
Ща буду пробовать восстанавливать из этого дела играющий item)
 
@@Michael
Меня больше смущает, что если этот самый 'F0 7D 01 54 67 7F 54 F7' положить в item на треке 1, потом послать на второй bus на трек 2 и записать, то там уже запишется „неправильный“ SysEx

Что-то в цепи. Только что провернул то же самое (и с MIDI All -> All, и MIDI All -> Chan 4) - всё корректно пишется. Проверь Input FX.
1.gif
 
@@Michael, Надо было чуть понятнее мне объяснить:
В этой схеме, получается:

Код:
    специфический
      рипервоский
      SysEx, показывающий
       внутреннее
      представление              MIDI
        потока                   BUS         MIDI MESSAGE                             EOF
F0        FF 52 50 62            02           F0 7D 01 54 67 7F 54 F7            F7

Просто так, получается, можно в item прописать все 16 MIDI-BUS, чего я и добиваюсь :)

Получается, если с первого трека отправить на второй 90 3C 50 (note on, chan 1, до первой октавы, velocity 50)
Но не на первый BUS, а на второй. То запишется следующее сообщение:
F0 FF 52 50 62 01 90 3C 50 F7

Собственно, мне стало интересно, что будет, если таким же образом отправить SysEx — и получилось, что то же самое. Как при этом он умудряется парсить пересекающийся (bounding) SysEx (что, согласно документации — нельзя), и можно ли расценивать это как неизменное поведение. Отсюда и вопросы полезли. Один хрен — надо сесть, покодить, и посмотреть
 
Последнее редактирование:
Так, по порядку.

Просто так, получается, можно в item прописать все 16 MIDI-BUS, чего я и добиваюсь
Можно прописать Note off / Note on / Polyphonic Key Pressure / Control Change / Program Change / Channel Pressure/ Pitch Bend сообщения для 16 MIDI каналов. Bus - это в сторону маршрутизации и не имеет отношения к тому, что прописано в айтемам.
Получается, если с первого трека отправить на второй 90 3C 50 (note on, chan 1, до первой октавы, velocity 50)
Придёт то же самое.
Но не на первый BUS, а на второй
Придёт 92 3C 50. (потому что 0x90 message type + 0x02 channel)

SysEx сообщения - это сообщения другого типа (где 0xF0 - это message type, а не SysEx для всех каналов, как и 0xF7 - не SysEx для седьмого канала). Поправьте меня, если не так, но в протоколе заложена длина сообщения. Cоотвественно, когда в девайс приходит что-то начинающееся с 0xF0, девайс уже знает длину сообщения. И 0xF7 в конце сообщения нужна для того, чтобы девайс смог убедиться - сообщение дошло полностью (позиция 0xF7 соответствует длине сообщения, которое пришло с 0xF0) и его можно начинать интерпретировать (а SysEx могут быть и огромными, в несколько килобайт и выше).
 
Последнее редактирование:
@@Michael, Что-то я так и не научился gif делать...
Вот я о чем:


Это окно возможностей)) Особенно, что касается создания midi-item-ов, которые юзеру не надо редактировать, и когда не хочется по отдельности разбираться с CC\note\prch и прочим (насколько я помню, нельзя просто так взять и вставить абстрактный евент скриптом, не вставится)
 
Вообще, конечно, степень достоверности документации ReaScript API немного обескураживает.
Допустим, на днях я понял, что не обязательно использовать SWS для того, чтобы узнать, на какой миди-бас идет сенд с трека.
А вообще долго я думал, что без SWS не достать и трек на который сенд идет.
Однако, SWS просто, видимо, брутфорсят API и используют уже не задокументированные фичи. Если им можно — почему нам нельзя?)))
 

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