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

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.153
113
Эту болезнь очень легко вылечить. Чуть ли не мгновенно. Слепой тест :) Одного раза будет достаточно - пара секунди и всякая "огромная разница" превратится в отчаяние :) Главное совсем не лишиться рассудка
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.064
113
62
Киев
@Aleksandr Oleynik, хотел написать то же самое... но сдержался ))))
А я не сдержанный....
Я считаю ОГРОМНЫМ ЗЛОМ для всех занимающихся музыкой слушать и обсуждать домыслы и мифы не подкреплённые ни знанием ни опытом!
Подобные вбросы нужно резко и жёстко пресекать.
Да и в правилах же есть - любые “откровения” (а чаще - откровенную чушь) следует подкреплять примерами.
 

mitinglas

дМитрий Зайцев
Для быстрого "размножения" (копирования) итема на треке есть экшен:
SWS/BR: Options - Toggle "Move edit cursor when pasting/inserting media"
который перемещает курсор в конец итема. Но для правильного размещения нужно, чтобы вставляемое-копируемое было длинной совпадающей с сеткой. Что не всегда удобно.
Можно ли (есть ли) сделать экшн, который бы перемещал курсор к ближайшему после вставленного значению выбранной сетки?
Пример: переключил грид в 1/4, кинул wav бочки на трек, и Ctrl+V размножил её как угодно долго.
 

zenykmusic

Member
16 Авг 2018
233
7
18
44
Скажите пож. есть такой экшн что переключаеть семплы Xenakios/SWS: Switch item source file to next in folder.А как сделать что б переключались миди файлы.Возможно ли это вообще.Спасибо
 

belovw

Well-Known Member
22 Апр 2009
9.228
8.406
113
50
RK Almaty
Пример: переключил грид в 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

belovw

Well-Known Member
22 Апр 2009
9.228
8.406
113
50
RK Almaty
Скажите пож. есть такой экшн что переключаеть семплы Xenakios/SWS: Switch item source file to next in folder.А как сделать что б переключались миди файлы.Возможно ли это вообще.Спасибо
Не знаю ответ на ваш вопрос, но могу предложить альтернативный вариант. Использовать Media Explorer. Включить галочку Start on Bar. Выбрать там же Tempo match on. В настройках роутинга ескплорера выбрать Play trough selected track. Теперь запускайте основной проект и миди файл из Медиа Браузера. Проверил - работает.
 

zenykmusic

Member
16 Авг 2018
233
7
18
44
Не знаю ответ на ваш вопрос, но могу предложить альтернативный вариант. Использовать Media Explorer. Включить галочку Start on Bar. Выбрать там же Tempo match on. В настройках роутинга ескплорера выбрать Play trough selected track. Теперь запускайте основной проект и миди файл из Медиа Браузера. Проверил - работает.
спасибо.Но я думал что без медиа експлорера.Т.е создаю темплейт трек с файлом миди из папки (допустим НАТ) потом мне нужно партию хета я вызываю созданый темплейт трек с файлом миди хета.И переключением кнопки типа (Xenakios/SWS: Switch item source file to next in folder ) у меня переключаются миди айтемы из папки .
 

belovw

Well-Known Member
22 Апр 2009
9.228
8.406
113
50
RK Almaty
переключением кнопки типа (Xenakios/SWS: Switch item source file to next in folder ) у меня переключаются миди айтемы из папки .
Выбором мышкой файла в медиа ехплорере будет меняться партия. По сути тоже самое. Не настаиваю.
 

belovw

Well-Known Member
22 Апр 2009
9.228
8.406
113
50
RK Almaty
Ну или соберите все эти миди файлы в один айтем как тэйки и переключайте одной клавишей (по умолчанию <T>)
 

belovw

Well-Known Member
22 Апр 2009
9.228
8.406
113
50
RK Almaty
@zenykmusic, на мой взгляд проще через медиа эхплорер - телодвижений меньше.
Потом не забудьте рассказать как вариант прижился.
 

belovw

Well-Known Member
22 Апр 2009
9.228
8.406
113
50
RK Almaty
Я же не настаиваю. Если работает - то почему нет. Но вам же нужно было использовать подмену миди файлов.
С миди файлами это будет работать? Я попробовал - вроде как работает до поры до времени, но с глюками.
 

zenykmusic

Member
16 Авг 2018
233
7
18
44
Я же не настаиваю. Если работает - то почему нет. Но вам же нужно было использовать подмену миди файлов.
С миди файлами это будет работать? Я попробовал - вроде как работает до поры до времени, но с глюками.
У меня не работает.А как Вы пробовали.У меня только с вав форматом
 

belovw

Well-Known Member
22 Апр 2009
9.228
8.406
113
50
RK Almaty
@zenykmusic, я же написал - глючит этот способ. Трясите Джастина что бы поправил, или ищите другое варианты если мои использовать религия не позволяет.
 

PianoIst

Well-Known Member
19 Май 2010
4.101
4.155
113
29
Kirchberg, kreis Zwickau
soundcloud.com
Призываю на помощь коллективный разум:
Интересно стало, что будет, если записать 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);
 

PianoIst

Well-Known Member
19 Май 2010
4.101
4.155
113
29
Kirchberg, kreis Zwickau
soundcloud.com
Хм. Интересно. Поставил на трек-донор 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)“. О как.
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
Хм. Интересно. Поставил на трек-донор 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

PianoIst

Well-Known Member
19 Май 2010
4.101
4.155
113
29
Kirchberg, kreis Zwickau
soundcloud.com
@@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

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
@@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
 

PianoIst

Well-Known Member
19 Май 2010
4.101
4.155
113
29
Kirchberg, kreis Zwickau
soundcloud.com
@@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 (что, согласно документации — нельзя), и можно ли расценивать это как неизменное поведение. Отсюда и вопросы полезли. Один хрен — надо сесть, покодить, и посмотреть
 
Последнее редактирование:

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
Так, по порядку.

Просто так, получается, можно в 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 могут быть и огромными, в несколько килобайт и выше).
 
Последнее редактирование:

PianoIst

Well-Known Member
19 Май 2010
4.101
4.155
113
29
Kirchberg, kreis Zwickau
soundcloud.com
@@Michael, Что-то я так и не научился gif делать...
Вот я о чем:

Это окно возможностей)) Особенно, что касается создания midi-item-ов, которые юзеру не надо редактировать, и когда не хочется по отдельности разбираться с CC\note\prch и прочим (насколько я помню, нельзя просто так взять и вставить абстрактный евент скриптом, не вставится)
 

PianoIst

Well-Known Member
19 Май 2010
4.101
4.155
113
29
Kirchberg, kreis Zwickau
soundcloud.com
Вообще, конечно, степень достоверности документации ReaScript API немного обескураживает.
Допустим, на днях я понял, что не обязательно использовать SWS для того, чтобы узнать, на какой миди-бас идет сенд с трека.
А вообще долго я думал, что без SWS не достать и трек на который сенд идет.
Однако, SWS просто, видимо, брутфорсят API и используют уже не задокументированные фичи. Если им можно — почему нам нельзя?)))
 

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