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

  • Автор темы Автор темы @Michael
  • Дата начала Дата начала
В общем после испорта скриптов и копи пастов в ини файлы, в окне экшен появилось по два из кадого скрипта. Причем один из них не загружается и не работает.
Еуые шьщзе.jpg
[DOUBLEPOST=1450037966,1450037416][/DOUBLEPOST]Кстати, переключалка тоже не работает.
цскшзе уккщк.jpg
 
Править ini и ложить скрипты в папку нужно при закрытом Рипере.
Попробуй ещё разок!
Но это может быть и из-за структуры очерёдности типов записи в файле reaper-kb.ini - я выше об этом писал.
Чтоб проблем небыло 101% эту структуру нужно соблюдать, а значит дописывать нужно данные в нужные места :(
Что и за чем я то знаю, но вот автоматизировать этот процесс без Михаила и LUA я на сегодня не смогу.
Если он подключится - то запросто!
[DOUBLEPOST=1450038146,1450038050][/DOUBLEPOST]
В общем после испорта скриптов
Вова - это называется "Горе от Ума" :) - ничего импортировать не нужно было!!!!
Я же этого не писал делать.
При импорте (Load) скриптов - Рипер тебе создал совершенно не те, что у меня Custom ID с ещё одной строкой в ini - по этому у тебя их по два и не работают, так как ID прописанные в моих скриптах найти не может!!!
Нужно было ПРОСТО переписать скрипты в папку и дописать те два файла ручками при закрытом Рипере и всё!
 
Последнее редактирование:
Кстати, имена ID можно писать ЛЮБЫЕ ручками, не обязательно эти длиннющие .....
[DOUBLEPOST=1450038644,1450038571][/DOUBLEPOST]
Всё равно вот такое сообщение выскакивает.
Странно! :(
Кинь сюда свой kb.ini и сделай шоткат в окне Action выбрав фильтр по Go to Marker 0
чтоб были видны ID для экшинов штатных
И ещё вопрос - может у тебя папка Script не в папке где exe файл Рипера находится, или эта директория закрыта на запись?
Просто я работаю всегда с не проинсталенным, а портбл Рипером
 
И ещё вопрос - может у тебя папка Script не в папке где exe файл Рипера находится, или эта директория закрыта на запись?
Просто я работаю всегда с не проинсталенным, а портбл Рипером
Во! А я использую инсталенную версию. И пути там совсем другие. C:\Users\Studio\AppData\Roaming\REAPER\Scripts
 
Во! А я использую инсталенную версию. И пути там совсем другие. C:\Users\Studio\AppData\Roaming\REAPER\Scripts
Я так и понял.
Сейчас подумаю как лучше сделать.
А exe-шник Рипера по какому пути тогда лежит?
Просто сделай рядом с ним тоже папку Scripts и положи туда все мои файлы (только с предидущего места их удали) - всё должно заработать
 
но и не переключается теперь.
пипец :)
А ты писал -
Вариант с экспортом и импортом настроек 5 тулбара и кей команд пахать будет 100%

Ну проинсталь пока для эксперементов портабл Рипер куда нить и пробуй с ним, а я наоборот сделаю и разберусь как сделать универсально всё.
 
@EUGEN27771, класть скрипты рядом с exe-шником?
В папку с exe файлом Операционка в общем не даёт ничего писать просто так.... :(
Нужен доступ к папке C:\Users\Studio\AppData\Roaming\REAPER\ как-то универсальный прописать.
Не знаешь как?
PS: Прошу прощения - затупил!

PSS: Володя, в моих двух скриптах - !_MakeKeyPresetForMarker.eel и !_MakeKeyPresetForSelectTrack.eel
Просто замени в первой строке GetExePath на GetResourcePath - и пусть папка Scripts остаётся там, где и быть должна со всеми скриптами -
C:\Users\Studio\AppData\Roaming\REAPER\Scripts
На всякий случай перезалил скрипты исправленные (моя досадная ошибка, теперь будет у всех работать!) -
[DOUBLEPOST=1450049627,1450041496][/DOUBLEPOST]Кстати, таким образом можно сделать и контекстно зависимые ШотКат-ы, а не только Кнопки-Пресеты, и не только по Секциям имеющимся в Рипере (Main, MIDI Editor и т.д.), а -
выделен какой-то трек - стрелка вверх/в низ регулирует громкость, в право/в лево - панараму этого трека, не выделенны треки, они регулируют зум как и сейчас,
а если выделена точка на кривой автоматизации, то они управляют этой точкой, например.
Правда нужно смотреть что умеет мониторить API скриптов, но я и так знаю, что многое.
 

Вложения

Последнее редактирование:
как Скриптом делать Export и Import *.ReaperKeyMap файлов

Код:
keymap_reaper = reaper.GetResourcePath()..'\\reaper-kb.ini'
keymap_custom = 'C:\\rr.ReaperKeyMap'

-- get .reaperkeymap content
file = io.open(keymap_custom, 'r')
keymap_custom_content = file:read("*all")
file:close()

-- add .reaperkeymap to reaper-kb.ini
file = io.open(keymap_reaper, 'a') -- "a" - это аргумент дозаписи в конец файла http://www.lua.ru/doc/5.7.html
file:write(keymap_custom_content)
file:close()

CommandID - это sha1 хэш, сгенерированный неизвестным нам образом из директории скрипта, поэтому во многих случаях он не портативен.
http://forum.cockos.com/showthread.php?t=156798:
Jeffos (SWS/Reaper):
Please, just don't hack command IDs
 
Последнее редактирование:
  • Like
Реакции: Aleksandr Oleynik
@@Michael, ну так по этой причине SWS-ы и пишут свои Кастомы со своими, а не Рипером сгенерированными ID именами. Что собственно и я предложил сделать.
И чтоб не путаться потом и быстро искать, что из записей в ini относится к Пресет Кеймапам, придумать свою идентификацию CommandID.
Я проверил на разных своих сборках Рипера, с разным кол-ом и составом reaper-kb.ini - дозапись в конец прекрасно работает.
Естественно, что если при всём при этом какой-то из скриптов удалить из Action средствами Рипера и потом его туда Load - то всё нафиг сломается.

PS: Михаил, а как будет выглядеть код для вписывания импортированных из файла строк в текст имеющегося файла перед или после определённой строки? С поиском этой строки по признаку, например первых трёх символов в строке "KEY".
Ну, чтоб сделать всё в рамках заведенного Кокосами порядка записей в kb.ini.

PSS:
@diggidon, если парни решат вариант через загрузку кей мапингов, то тогда можно сделать защиту от дурака - загружать пресетный кеймап и вдогонку кеймап с глобальными клавишами. Предварительно принудительно в глобальном кеймапе блокнотом оставить только глобальные клавиши, и тогда будут загружаться только они, а остальные останутся как по ранее загруженному пресету. Проверено только что.
Механизм экспорта *.ReaperKeyMap не сохраняет и при импорте не перезаписывает ШотКаты штатных и SWS Action, так что в любом случаи, для создания КейПресетов, в которых участвуют и штатные Action, нужно делать всё точно так-же как сделал я! Просто нужные для импорта в reaper-kb.ini - строки не вписывать в него ручками, а через Import KeyMap - и тогда и структура файла останется той-же самой (хотя вроде и так пашет!).
 
Последнее редактирование:
SWS-ы и пишут свои Кастомы со своими, а не Рипером сгенерированными ID именами
Поэтому и дал ссылку на тред:
http://forum.cockos.com/showpost.php?p=1548087&postcount=12
I'm sorry, but although this trick looks like it works, I don't think it is a good idea...
It's super-non-future-proof and breaks some SWS features already...
Перевожу: даже несмотря на то, что кастомные айди якобы "работают", такие манипуляции небезопасны, поэтому, как и создатель SWS (а ныне и разработчик рипера) Jeffos, рекомендую не трогать их руками.

код для вписывания импортированных из файла строк в текст имеющегося файла
Я бы собрал весь файл построчно в таблицу
Код:
filename = reaper.GetResourcePath()..'\\reaper-kb.ini'
kb_table = {}
file = io.open(filename, "r")
content = file:read("*all")
for line in io.lines(filename) do table.insert(kb_table, line) end
file:close()
далее
Код:
table.insert(kb_table, номер_строки, что_вставить)
потом вернуть обратно таблицу
Код:
file = io.open(filename, "w+")
content = file:write(table.concat(kb_table, '\n'))
file:close()
 
Последнее редактирование:
Перевожу: даже несмотря на то, что кастомные айди якобы "работают", такие манипуляции небезопасны, поэтому, как и создатель SWS (а ныне и разработчик рипера) Jeffos, рекомендую не трогать их руками.
Это я понял, только так-же как и у SWS не получилось не трогать их руками, так и при создании чего бы то ни было аналогичного - не трогать не получится и ИМЕННО по причине того, что на каждом компе этот ID для одного и того-же скрипта будет средствами Рипера (а не руками) сгенерирован разный!
Jeffos пишет, что пользоваться этим нельзя, хоть и работает - но в замен ни чего не предлагает!
Пусть включит в ReaScript API несколько доп функций, которые бы всё это решили
- Load Script с указанием его имени из директории Scripts
- Get ComandID по имени Скрипта
- Add Shortcuts for selected Custom Action и Script Action
И думаю всё!
Есть надежда что что-то такое сделают, написал же он -
ВОТ ТУТ
[DOUBLEPOST=1450100503,1450099045][/DOUBLEPOST]
table.insert(kb_table, номер_строки, что_вставить)
как найти этот номер строки по её содержанию (сопоставлению)?
 
@Aleksandr Oleynik, с помощью скриптов менять назначения команд на хоткеи было бы мегакруто. Можно начать и с модифаеров, там есть SetMouseModifier и даже GetMouseModifier, правда, не понял, что делает последний.
 
  • Like
Реакции: lil-burn
Что-то реакции ни какой - а тем ни менее Скриптом Скрипт запустить из Action не выходит :(
[DOUBLEPOST=1450126663,1450119559][/DOUBLEPOST]
Поэтому и дал ссылку на тред:
http://forum.cockos.com/showpost.php?p=1548087&postcount=12
Перевожу: даже несмотря на то, что кастомные айди якобы "работают", такие манипуляции небезопасны, поэтому, как и создатель SWS (а ныне и разработчик рипера) Jeffos, рекомендую не трогать их руками.
Ещё раз повторюсь - это небезопасно. Убъёшь и свой и чужие конфиги."
Но у нас ведь есть твой скрипт, который читает ПРАВИЛЬНО созданный Command ID по имени Скрипта или Кастом Экшина - так что можем всё сделать и Легально, без нарушений данного предостережения.
В общем я уже могу сделать любое кол-во ШотКат Пресетов по чьему либо ТЗ -
потом нужно будет только сделать Load всем этим скриптам и запустить LUA скрипт, который посчитывает их правильные ID и повставляет их в нужные места при создании Скриптов-Пресетов.
 
@Aleksandr Oleynik, насчет KeyPresets - это мегамощно! ну просто слов нет) позволяет в корне пересмотреть назначения клавиш. Все работает, правда тулбар не создался.
И теперь возникает вопрос - как визуально следить за тем, на какую клавишу что назначено?
 
Все работает, правда тулбар не создался.
что-то не так сделали. или я опять что-то упустил :)

И теперь возникает вопрос - как визуально следить за тем, на какую клавишу что назначено?
Купить клавиатуру, на которой каждая кнопка - это LCD монитор - ну и передавать на них при выборе нового КЕЙ Пресета новые названия.
Кстати - вообще не фантастика! Можно такое сделать, если бы кто-то дал денег на разработку и запуск в производство.

А если серьёзно - то сделать кнопки залипающими - зависимыми. Т.е. нажал на одну - она залипла и ясно какой сейчас КейПресет работает. Нажал на вторую - первая отлипла, а эта осталась нажата.
 
  • Like
Реакции: lil-burn
где можно почитать об этом?)
почитать нигде :)
Делать нужно.
Сделали бы Какосы возможным для любого Actuion задавать State и его особенности - было-бы просто, а так - писать условия в скриптах нужно.
Сейчас попробую.
Кстати, вот так вот сходу и не знаю как ..... Не знаю как включением одной кнопки погасить вторую.
Знаю как увидеть индикацию на других (привязанных к этим) кнопках.
Типа такого -
toogle001.gif
 
Последнее редактирование:
  • Like
Реакции: lil-burn
Обновил RR(Midi) и RR(Audio).
Убрал некоторые меню,они мне показались лишними.
Добавил ресет после выкладывания буфера на трек.
Это по мелочи.
Сильно переделал RR(Audio).
Опишу вкратце как все устроено,мне это кажется интересным.
При обычной нелинейной,например,циклической записи каждый айтем или тейк(в зависимости от режима) в цикле отличается только тем,что Start in source и Length точки имеет разные значения для каждого цикла.
Исходный файл ОДИН и содержит в себе полную запись без остановки.Это видно на рисунке,если растянуть края-получается полный файл в каждом из записанных в цикле айтемов.
NormalRecording.PNG
Чтобы получить такой же результат при записи в буферы,нужно последовательно заполняя буферы,запоминать в JS все точки смены позиций.Потом,при запуске скрипта нужно сначала разложить буферы последовательно и собрать в один файл.
Дальше разложить по тейкам этот файл и установить по сохраненным точкам Start in source и Length.И дело в шляпе,результат будет абсолютно идентичным обычной записи.
Но это делает невозможным собрать все буферы в тейки при произвольной смене позиции!
В айтемы приблизительно можно(но это неудобно для дальнейшего использования)-в тейки нельзя,поскольку при смене Start in source и Length вылазят ненужные части аудио-файла.
Возможно,это одна из причин,почему обычная запись не позволяет произвольно менять позицию проигрывания.
При произвольной записи недостаточно смены точек Start in source и Length,нужно,чтобы сам исходный файл имел реальные края.

Было бы проще всего скопировать принцип обычной записи,но так как у нас аудио-данные все-равно пишутся в буфер JS,а буфер JS позволяет извлекать их с любым смещением и любой длиной указанной в семплах,грубо говоря,то грех отказываться от дополнительной возможности записывать все что угодно,свободно перемещаясь по проекту.
====================================
Короче,общий принцип такой.
По мере проигрывания Аудио-данные записываются в буфер.
При каждой смене позиции предыдущая и текущая позиции проигрывания тоже записываются в буфер(в верхнюю область),в дальнейшем эти точки используются для правильной расстановки сегментов буфера.
Когда буфер текущего JS заполняется до определенного значения(maxmem-8192*2),он пропускает сигнал на следующий,а сам дополнительно дописывает еще 8192*2 семплов,это пригодится в дальнейшем.
И далее по цепочке:JS1>JS2>JS3 и т.д.
В принципе кол-во JS не ограничено(ограничено только доступной RAM),потому общий буфер может быть любой длины.
=====
При запуске скрипта аудио из буферов каждого JS выкладывается по сегментам уже со строго определенными параметрами,которые скрипт считывает из самого JS,то есть,в определенную позицию проекта,с четко указанным смещением и с указанной длиной.
Смещение используется и для компенсации задержки,и здесь как раз понадобится тот резервный кусочек в 8192*2 семплов,из которого можно взять нужное кол-во сэмплов,чтоб не возникало разрывов.
Потом айтемы переименовываются,распределяются по тейкам и т.д,но это уже не интересно.
 
Последнее редактирование:
Женя, то, что описано - МЕГА!!!! Круто!
Эх.... Найду время серьёзно потестирую!
А можно сделать так, чтобы при включении режимов RR(Midi) и/или RR(Audio) он активировался всякий раз автоматом для каждого нового трека на котором выбрали соответствующий канал - audio or midi и нажали RecArm?
И ещё одна бешенная хотелка - можно чтобы скрипт сам "видя", что буфер оканчивается у первого JS-а кидал дальше второй, третий и т.д. - пока режим RR не будет отключен?
[DOUBLEPOST=1450133323,1450132881][/DOUBLEPOST]
Не знаю как включением одной кнопки погасить вторую.
приблизительно знаю, но нужно помудрить со всеми этими get_action_context и SetToggleCommandState и GetToggleCommandState
Ну и блин опять та-же песня - cmdID это совсем не CommandID и оба они в каждом Рипере на каждом новом компе будут разными - т.е. скрипты нужно формировать "на лету" вписывая часть информации в них - же самих при однократном старте......
А это только с LUA возможно - а в LUA я пока как слепой котёнок :( хотя уже упросил сына пару уроков дать и помочь разобраться хоть в чём-то.
Могу благодаря примерам Михаила и помощи сына уже читать строки из файлов, матчить их по разным признакам и вписывать куда угодно в любой другой файл.
Но вот прям сейчас с LUA в омут головой - не готов :(
 
Последнее редактирование:
а как с лампочками сделать? вроде, пару месяцев назад обсуждалось, но найти будет непросто
Не, это не обсуждалось вроди...
Пару страниц назад Михаил показал как кнопку Экшина Скрипта заставить залипать - но это ведь только пол дела - нужно по нажатию другой кнопки заставить её отлипать - это уже сложнее.
Я сделал не очень хорошо - использовал дополнительно в виде кнопок с лампочкой рядом с кнопками скриптами SWS Action - Exclusive toggle A01 - A02 и можно так далее -
у них уже есть вложенная разрабами особенность - их State зависим между собой и только один из них может быть on.
Ну вот в один скрипт я дописал запуск Exclusive toggle A01, а во второй Exclusive toggle A02 -
Но оно работает не верно, так как я могу два раза нажать на один скрипт и лампочка погаснет - а скрипт то сработал! Хотя это конечно поправить можно, знаю как.
 
Последнее редактирование:
  • Like
Реакции: lil-burn
Найду время серьёзно потестирую!
Я сам именно эту версию еще серьезно не гонял,должно по идее все работать,но все еще в стадии эксперимента.Пока не будет на 100% уверенности.Сам принцип уже меняться не будет.
А можно сделать так, чтобы при включении режимов RR(Midi) и/или RR(Audio) он активировался всякий раз автоматом для каждого нового трека на котором выбрали соответствующий канал - audio or midi и нажали RecArm?
Сейчас пишутся все каналы миди и основной стерео-вход аудио.Пишутся все время,после включения воспроизведения.И до остановки,потом при повторном нажатии воспроизведения буферы сбрасываются и начинают записываться снова.То есть фоновая запись абсолютно всего.От выбранного трека это совсем никак не зависит.Его может и вообще не быть.
А если нужен выбор именно конкретного канала,Вы можете это сами сделать.Нужно просто менять каналы на скрытых треках в соответствии в тем,какой канал выбран на Вашем треке.Можно ставить любые.
можно чтобы скрипт сам "видя", что буфер оканчивается у первого JS-а кидал дальше второй, третий и т.д.
можно,но нужно чтобы скрипт в фоне следил за этим,а это лишние проблемы.Сейчас скрипты работают одноразово,а не постоянно.Запустился,вставил данные,закрылся,то есть они никогда не висят в фоне,как самый обычный экшн. Проще сразу поставить кучу буферов,они ресурсов жрут немного.А даже 10 буферов-это уже больше часа записи.Можно и тысячу поставить,на 4 дня записи хватит.
пока режим RR не будет отключен?
А он и не отключается.Один раз "включается"-добавляет скрытые треки и все,дальше уже записывается все сигналы в JS.Отключение не предусмотрено:).
 
Последнее редактирование:
А он и не отключается.Один раз "включается"-добавляет скрытые треки и все,дальше уже записывается все сигналы в JS.Отключение не предусмотрено
Ну вот с этим, и всем, что ты выше написал, нужно крепко подумать и поиспользовать RR - Тогда будет ясно что и как.

ейчас пишутся все каналы миди и основной стерео-вход аудио.
Для индивидуальной работы этого достаточно безусловно, но а если пришла писаться группа и тэйки делаем не для одного Аудио инструмента?
 

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