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

DmitriyGoriuk

Member
17 Июл 2015
39
16
8
куда надо добавить PC? В позицию курсора?
Позиция курсора - было бы круто. Я хочу этот скрипт добавить в кастом экшины для переключения артикуляций (контактовские банки с инструментами).
В идеале чуть раньше выделенной ноты, но я добавлю экшэн "move edit cursor left one pixel". Работает, но пиксель зависит от зума, поэтому в идеале подвинуть это сообщение в лево по миди тикам (или долесикунды).
Но я буду счастлив если просто появиться это PCM))
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
@DmitriyGoriuk,
PHP:
function insert_event(sel,muted,ppqoffs,type,chan,byte2,byte3)
local Item,Take
   Item = reaper.GetMediaItem(0, 0)
   if Item then Take = reaper.GetActiveTake(Item) else return end
   if Take and reaper.TakeIsMIDI(Take) then
      -----------
      local curs_pos = reaper.GetCursorPosition()
      local Item_Start = reaper.GetMediaItemInfo_Value(Item, "D_POSITION")
      local Item_End   = Item_Start + reaper.GetMediaItemInfo_Value(Item, "D_LENGTH")
      if curs_pos<Item_Start or curs_pos>Item_End then return end
      -----------
      local ppqpos = reaper.MIDI_GetPPQPosFromProjTime(Take, curs_pos) + ppqoffs
      -- status byte ---------
      local byte1 = type + chan
      ------------------------
      local bytestr  = string.char(byte1,byte2,byte3)
      reaper.MIDI_InsertEvt(Take, sel, muted, ppqpos, bytestr)
      reaper.UpdateItemInProject(Item)
   end
end
---------------------------
---------------------------
local type,chan,sel,muted,byte2,byte3
---------------------------
sel = 0      
muted = 0
ppqoffs = - 10
type  = 192 -- type(192=PC)
chan  = 0   -- channel(0-15!)
byte2 = 25
byte3 = 0
---------------------------
---------------------------
insert_event(sel,muted,ppqoffs,type,chan,byte2,byte3)
ppqoffs - смещение в тиках относительно позиции курсора
byte2 - номер программы
===================
Скрипт добавляет сообщение Program Change в
выделенный миди-айтем в активный тейк в позицию курсора + ppqoffs
1234.gif
 
Последнее редактирование:
  • Like
Реакции: DmitriyGoriuk

convex

без понтов
25 Фев 2011
4.578
4.208
113
42
Красноярский край
Обратите внимание, пользователь заблокирован на форуме.
мужики, просьба от чайника: если обсуждаемый скрипт готов, по возможности записать мультик, чтоб мы понимали как он работает. ну или в тему про поделиться полезными экшенами-скриптами тож с мультиком сразу. ну и спасибо вам, ребяты, за то, что вы делаете для нас ))) благодаря вам рипер становится все круче!
 

Харви

Active Member
7 Июн 2015
61
54
28
53
Волшебный скрипт который убирает пустые бары в айтемах еще не поправили?
 

George54

Member
29 Мар 2016
96
31
18
37
x-minus.me
привет друзья, я новичок во всех отношениях, как на форуме так и касаемо Рипера. Решил, что для меня будет удобным вот такой простой экшн, по любому он уже где то встречался, есть небольшая проблемка. Ноты не совсем отсекаются в тех местах где стоит указатель мыши. Как его допилить..или натыкайте пожалуйста носом уже в готовый экшн или скрипт
Снимок_2016_04_23_21_14_51_752.gif
 

Вложения

  • 91,2 KB Просмотры: 103
Последнее редактирование:
  • Like
Реакции: Nagor

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
@Харви, пока нет времени,все свободное уходит на разные скрипты,я уже не рад что связался,напомни позже,я сделаю.
Можешь в личку через пару недель, я сделаю, чтоб не забыл
 
  • Like
Реакции: Aleksandr Oleynik

Кофф

Composer,Songwriter
29 Ноя 2010
240
207
43
@EUGEN27771, кажется я понял в каком случае этот скрипт убивает ноты или части нот. Смоделировал разные ситуации с нотами и понаблюдал за работой скрипта. Он, судя по всему, считает наличие или отсутствие ноты в такте по наличию или отсутствию начала ноты или конца ноты в такте. Т.е. если нота начинается в такте 1, а заканчивается в такте 3,то скорее всего он всю её середину вырежет, считая такт 2 пустым. Тем самым оставив от неё два хвоста. Вторая засада заключается в том, что если нота начинается или заканчивается строго по сетке в начале такта,то скрипт как будто не может решить к какому такту она относится (к предыдущему или к последующему) и на всякий случай решает считать, что ноты нет вообще. Т.е. достаточно удлинить ноту на любое минимальное значение и скрипт перестаёт чудить и всё корректно режет. Как то так.
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
@Кофф, причина в том, что неправильно определяются такты, Вы по сути правы, оно так и получается в итоге.
===
П.С. Обновлено, исправлено, смотреть в теме по скриптам
 
Последнее редактирование:

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
С Пресетами не всё так просто. Рипер ведь подтягивает из некоторых плагинов и список сохранённых в самом плагине Пресетов.
Например с Гитар Ригом я так и не сумел настроить дистанционный вызов и сохранение пресетов. Вызываешь Пресет, который в Риперовском ini есть - он вызывается, а в окне списка пресета - пустота.
 

lil-burn

Well-Known Member
15 Авг 2012
903
638
93
Екатеринбург
@Aleksandr Oleynik, что подразумевается под дистанционным вызовом пресетов? Только что сохранил 4 пресета вроде все норм. На гиф переключаю сохраненные пресеты с помощью клавиатуры (экшены Trigger next/previous preset for last touched fx)
switch presets.gif
@Broojacker, погляжу в ближайшее время. Даже если причина не выяснится - все равно планирую написать свою систему пресетов, с графическим отображением списка пресетов, со всеми функциями, доступными в риперовской (стандартной) системе пресетов + возможностью сохранения пресетов одним нажатием (дальше можно развить идею насколько хватит фантазии: банки пресетов, массовое сохранение сразу всех пресетов проекта, и тд.). Сортировку тоже включу, притормаживать если будет, то только при переключении пресетов - уж никак не при открытии vst.
 
  • Like
Реакции: Broojacker

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
@Aleksandr Oleynik, что подразумевается под дистанционным вызовом пресетов? Только что сохранил 4 пресета вроде все норм. На гиф переключаю сохраненные пресеты с помощью клавиатуры (экшены Trigger next/previous preset for last touched fx)
Я споткнулся на ГитарРиге.
Он (и не только он) в чекбокс Риперовский пресетов подтягивает свои пресеты из активной папки.
Так вот, скриптом можно текущий (сохранённый Рипером пользовательский) пресет сохранить, можно потом его и вызвать, не открывая интерфейс плагина. Но открываешь интерфейс - а там - а там нет имени Пресета, или No Preset или No Sound.
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
@lil-burn, нет, экшины тут не причём... Я в скриптах всё делаю.
Мне трудно описать проблему, так как с ней врядли кто столкнётся в обычной работе.
Ещё раз в двух словах - в ГитарРиге при вызове скриптом запомненного в Рипере пресета ИМЯ пресета не возникает в чекбоксе Рипера, но пресет вызывается корректно.
 

lil-burn

Well-Known Member
15 Авг 2012
903
638
93
Екатеринбург
@Aleksandr Oleynik, вчера как раз два таких скрипта сделал (постом выше):
один скрипт ("Save ...") запоминает последний выбранный пресет эффекта, открытого в данный момент
второй ("Restore ...") вызывает его.
То есть это то же самое, что и, например, save-restore edit cursor (когда мы можем запомнить позицию курсора, затем восстановить ее в любой момент), только запоминаем в данном случае не позицию курсора, а пресет эффекта.
В выпадающем списке пресет при вызове отображается правильно, еще раз перепроверил.
 

lil-burn

Well-Known Member
15 Авг 2012
903
638
93
Екатеринбург
@Aleksandr Oleynik, да, там где у вас "No Preset", у меня название сохраненного пресета. Еще заметил, у вас в списке пресетов вместо встроенных - no sound, no sound ..., у меня пресеты прописаны
upload_2016-5-5_0-29-43.png , но почему-то только до пресета Demonized 800
upload_2016-5-5_0-30-48.png
Как вариант можете скинуть ini-файл с пресетом - если у меня тоже не будет работать - значит дело в файле пресетов, если будет - значит дело, скорей всего, либо в рипере, либо в гитар-риге
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
да, там где у вас "No Preset", у меня название сохраненного пресета.
Было бы не плохо разобраться почему.

Еще заметил, у вас в списке пресетов вместо встроенных - no sound, no sound ..., у меня пресеты прописаны
Потому как в этой папке у меня только вот эти 5 пресетов и всё - дальше no sound

Как вариант можете скинуть ini-файл с пресетом - если у меня тоже не будет работать - значит дело в файле пресетов, если будет - значит дело, скорей всего, либо в рипере, либо в гитар-риге
в атаче
 

Вложения

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
PS: Я разобрался....
@lil-burn, ваши ответы заставили меня проверить ещё один, ранее не проверенный вариант.
Для Гитар Рига пресеты нельзя сохранять через интерфейс Рипера!!!!! Только в интерфейсе самого плагина.
Причина - Рипер подтягивает при старте Гитар Рига его пресеты в раздел VST built-in programs, и если их сохранять в User Presets (.rpl) - и начинаются вот эти глюки БЛИН!
Но засада ВСЁ равно есть, по скольку Рипер может в VST built-in programs подтянуть ТОЛЬКО 128 пресетов, и если тот, что вам нужно сохранить и вызвать 129-ый, всё будет как у меня!
PSS: Может где-то кол-во пресетов можно изменить?
 
Последнее редактирование:

lil-burn

Well-Known Member
15 Авг 2012
903
638
93
Екатеринбург
@Aleksandr Oleynik, тоже интересно, где менять количество встроенных пресетов.

Но в причину проблемы по-прежнему до конца не въехал: это связано с импортом/экспортом rpl? Не работал еще с ними, сохраняю пресеты кнопкой Save preset, открываю из выпадающего списка

Протестировал свои скрипты с вашим ини-файлом - все работает
GuitarRig.gif

Рипер может в VST built-in programs подтянуть ТОЛЬКО 128 пресетов
В Sylenth у меня около 300 пресетов, в Гладиаторе вообще порядка 500
Странно.
Но даже если некоторые плагины, как Гитар риг, могут отображать только 128 built-in пресетов, что нам мешает сохранять пользовательские пресеты (user presets)? Там-то точно не должно быть ограничений.
 

Кофф

Composer,Songwriter
29 Ноя 2010
240
207
43
@@Michael, у меня почему-то не обрезает пустое пространство айтемов. Т.е. режет всё корректно, делит исходный айтем на соответствующее кол-во новых айтемов, но пустоту не удаляет и получается многослойный пирог из айтемов. Может я как-то не так скопировал с гитхаба.
 

Кофф

Composer,Songwriter
29 Ноя 2010
240
207
43
Скинь проект простой с айтемом, где работает так, как ты описал.
Да это даже не проект. С проектом я бы не решился бы пробовать, пока не убедился бы, что никакие данные не потеряются.
Сначала я импортировал миди файл. Потом другой миди файл. А потом для чистоты эксперимента просто создал пустой айтем, в начале его и в конце нарисовал несколько нот и нажал кнопку скрипта. Во всех случаях одинаковый результат-идет процесс, на дорожках ничего с виду не изменяется,но потом мышкой можно разобрать слои на отдельные айтемы. Кстати я сохранил скрипт как lua, может быть надо было как eel сохранять? Я просто в этом(в скриптах) вообще ничего не соображаю. Если получится снять видео-выложу.
п.с.
Вот, первый раз снимал-не знаю насколько удачно получилось.77777777777.gif
 

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