Как создать кнопку c меняющимся цветом для плавного изменения громкости и запрограмировать её.

  • Автор темы Автор темы Andreit
  • Дата начала Дата начала

Пригодился бы вам экшен или скрипт для плавного изменения громкости в требуемом треке?

  • да

    Голосов: 1 33,3%
  • нет

    Голосов: 1 33,3%
  • пока не знаю

    Голосов: 1 33,3%

  • Всего проголосовало
    3

Andreit

New Member
4 Мар 2013
7
0
1
andreitn.narod.ru
Здравствуйте.
Создал экшен для плавного изменения громкости (трека 1 к примеру).
Назвал экшен 1+-
Собственно он состоит из нескольких простых экшенов и цикла.

Экшен (- 10 db smoothly) который уменьшает громкость трека 1 на 10 db в течении 1 секунды.
Xenakios/SWS: Nudge volume of selected tracks down
Действие: Wait 0.1 second перед следующим действием
Xenakios/SWS: Nudge volume of selected tracks down
Действие: Wait 0.1 second перед следующим действием
Xenakios/SWS: Nudge volume of selected tracks down
Действие: Wait 0.1 second перед следующим действием
Xenakios/SWS: Nudge volume of selected tracks down
Действие: Wait 0.1 second перед следующим действием
Xenakios/SWS: Nudge volume of selected tracks down
Действие: Wait 0.1 second перед следующим действием
Xenakios/SWS: Nudge volume of selected tracks down
Действие: Wait 0.1 second перед следующим действием
Xenakios/SWS: Nudge volume of selected tracks down
Действие: Wait 0.1 second перед следующим действием
Xenakios/SWS: Nudge volume of selected tracks down
Действие: Wait 0.1 second перед следующим действием
Xenakios/SWS: Nudge volume of selected tracks down
Действие: Wait 0.1 second перед следующим действием
Xenakios/SWS: Nudge volume of selected tracks down
Действие: Wait 0.1 second перед следующим действием
Экшен (+ 10 db smoothly) который увеличивает громкость трека 1 на 10 db в течении 1 секунды.
Xenakios/SWS: Nudge volume of selected tracks up
Действие: Wait 0.1 second перед следующим действием
Xenakios/SWS: Nudge volume of selected tracks up
Действие: Wait 0.1 second перед следующим действием
Xenakios/SWS: Nudge volume of selected tracks up
Действие: Wait 0.1 second перед следующим действием
Xenakios/SWS: Nudge volume of selected tracks up
Действие: Wait 0.1 second перед следующим действием
Xenakios/SWS: Nudge volume of selected tracks up
Действие: Wait 0.1 second перед следующим действием
Xenakios/SWS: Nudge volume of selected tracks up
Действие: Wait 0.1 second перед следующим действием
Xenakios/SWS: Nudge volume of selected tracks up
Действие: Wait 0.1 second перед следующим действием
Xenakios/SWS: Nudge volume of selected tracks up
Действие: Wait 0.1 second перед следующим действием
Xenakios/SWS: Nudge volume of selected tracks up
Действие: Wait 0.1 second перед следующим действием
Xenakios/SWS: Nudge volume of selected tracks up
Действие: Wait 0.1 second перед следующим действием
Экшенн (Tr1-) который уменьшает громкость трека 1 на 50 db в течении 5 секунд.
SWS: Unselect all items/tracks/env points
Трек: Select track 01
Custom: -10 db smoothly
Custom: -10 db smoothly
Custom: -10 db smoothly
Custom: -10 db smoothly
Custom: -10 db smoothly
Экшенн (Tr1+) который увеличивает громкость трека 1 на 50 db в течении 5 секунд.
SWS: Unselect all items/tracks/env points
Трек: Select track 01
Custom: +10 db smoothly
Custom: +10 db smoothly
Custom: +10 db smoothly
Custom: +10 db smoothly
Custom: +10 db smoothly
Цикл (1+-) состоящий из двух экшенов (Tr1- и Tr1+) и одного шага (Step)
1-.1470247989.png

Далее в графическом редакторе создал кнопку 1.png
1.1470246465.png

Скопировал её в папку toolbar_icons
В моём случае путь к папке такой
C:\Users\Andrey\AppData\Roaming\REAPER\Data\toolbar_icons

Назначил экшен 1+- на кнопку 1 и на горячую клавишу 1.
Получился следующий результат.
На этом видео уже конечный результат.


Далее наблюдал следующее:
В спокойном состоянии кнопка имеет жёлтый цвет.
При наведении курсора мыши на кнопку,- её цвет становится белым.
При нажатии курсором мыши на кнопку 1 и не отпускании левой кнопкой мыши,- её цвет меняется на серый.
При отпускании левой кнопкой мыши с кнопки 1,- её цвет опять становится белым и начинает выполнятся один шаг цикла 1+-.
Когда один шаг цикла заканчивается, то есть фейдер приходит в одно их крайних состояний,- кнопка становится жёлтой.

Чего я хочу добится.
Чтоб в крайнем нижнем положении фейдера после исполнения команд в шаге Tr1- кнопка меняла цвет, - на серый, можно другой цвет, но не жёлтой как сейчас.
Чтоб в крайнем верхнем положении фейдера после исполнения команд в шаге Tr1+ кнопка становилась жёлтой, это её исходный цвет.
Желательно чтоб во время перемещения фейдера кнопка оставалась белой, то есть так, как сейчас и происходит.
Похожие изменения состояния есть в кнопок Solo, Mute, Metronom, Ripple editing и др.

Как этого достичь ?

Мои размышления.
Должны быть какие то команды в конце шага Tr1+ и Tr1- которые:
1. либо загружают новую иконку (с новым цветом) для кнопки 1, уже заранее находящуюся
в папке toolbar_icons (например 1b.png)
2. Либо в самой кнопке должно происходить переключение на другой цвет (похоже на то, что я наблюдал (читайте выше)).

Читал также похожую тему здесь на форуме http://rmm.su/threads/117697/

Но как этого достичь для меня пока является загадкой.
Скрипты ещё не писал. С EEL2, Lua и Python пока не знаком.
Буду рад если подскажите решение этого вопроса.
 
Последнее редактирование:
Всё это нужно делать не экшинами и циклами, а скриптами.
Ну и не плохо бы понять практический смысл этих функций.
 
Благодарю что откликнулись.
На практике планирую сделать такие кнопки для нескольких треков и использовать эту функцию при живом исполнении (курсор воспроизведения будет неподвижен).
Мне нужно чтобы плавно подключался выбранный инструмент VSTi (например арпеджиатор), и когда нужно плавно затихал от нажатия на кнопку.
При этом хотел бы видеть по состоянию кнопок состояние фейдера на треках.
 
Последнее редактирование:
@Andreit,
курсор воспроизведения будет неподвижен
а если все же захочется что-то сделать во время работы такого экшена?)
или допустим захочется сделать не линейное затухание?
и тд.
это все к скриптам.
Я бы как вариант сделал скрипт с дефером, меняет громкость определенным образом в течение определенного времени, а пользователь при этом продолжает работать в рипере

вот например скрипт, который после запуска меняет у всех треков в их названиях первую букву на строчную; работает до тех пор, пока его не выключить (снова запустить его). Тж если на такой скрипт назначить кнопку на тулбаре, то у этой кнопки будет 2 состояния - вкл/выкл
 
В принципе экшен 1+- который сделал, работает и при движении курсора воспроизведения. Например если какой то аудио файл на треке 1 воспроизводится, то его громкость при нажатии кнопки плавно затухает, или плавно возрастает. Это ещё одно применение экшена может быть.

Из примера скрипта выше видно код:
function SetButtonON()
reaper.SetToggleCommandState( sec, cmd, 1 ) -- Set ON
reaper.RefreshToolbar2( sec, cmd )
main()
end

-----------------------------------------------

function SetButtonOFF()
reaper.SetToggleCommandState( sec, cmd, 0 ) -- Set OFF
reaper.RefreshToolbar2( sec, cmd )
end

Видимо это то что нужно ? И как его использовать в данном случае?
Если в блокноте написать (скопировать), то в какое расширение файл потом сохранить (eel, lua или py) ?
И нужно ли устанавливать Pyton для запуска скриптов eel или lua ?
 
Последнее редактирование:
@Andreit, питон не надо ставить. Вообще большинство скриптов для рипера написаны на lua. Этот написан на lua.

И как его использовать в данном случае?
Лучше разобраться, как он работает и написать отдельный скрипт по такому же принципу.
Ну или на днях могу сделать такой
 
@Andreit, по моему опыту 95% работы над какой-то задачей, это собственно формулирование самой задачи, написание тех задание.
Чем продуманнее постановка задачи, тем проще его выполнить.
Ваша задача - совершенно не продуманна.
Вы читали это -
http://rmmedia.ru/threads/116534/
 
Прочитал. В будущем может пригодится. Но на данном этапе нужно другое.
Считаю свою задачу продуманной настолько, насколько это мне нужно и понятно.
Задача сформулирована.
Чего я хочу добится.
Чтоб в крайнем нижнем положении фейдера после исполнения команд в шаге Tr1- кнопка меняла цвет, - на серый, можно другой цвет, но не жёлтой как сейчас.
Чтоб в крайнем верхнем положении фейдера после исполнения команд в шаге Tr1+ кнопка становилась жёлтой, это её исходный цвет.
Желательно чтоб во время перемещения фейдера кнопка оставалась белой, то есть так, как сейчас и происходит.
Похожие изменения состояния есть в кнопок Solo, Mute, Metronom, Ripple editing и др.

Путей её решения вижу несколько.
Это совмещение экшенов со скриптом
Или один скрипт
Или два скрипта

Вариант более простой,- кнопка с текстом меняющая статус (on/off) соответственно (подсвечена/неподсвечена).
Вариант более сложный,- кнопка с графической иконкой которая тоже должна менятся.
 
Последнее редактирование:
@Andreit, при живом выступлении вы жмёте на кнопки прям в Рипере, мышкой???????
И зачем это?
Я ссылку вам дал на свою тему не просто так - там есть решение управляемого и по длительности и по форме кривой перехода звука с одного трека на другой (на одном треке одна обработка, на втором другая).
Управляется это с любых внешних midi или osc команд и не нужно ни куда мышкой тыкать.
И зачем вам нужны какие-то изменения цвета кнопок при живом то выступлении?????

Не считаю задачу продуманной.
 
Последнее редактирование:
  • Like
Реакции: nelepos
За ссылку на вашу тему большое спасибо. Однако на данное время у меня нет миди контролёра или такой миди клавиатуры с помощью которых мог бы через миди сообщения внешне управлять, поэтому и поставил себе такую задачу,- максимально упростить процесс изменения громкости на треках.
Её можно и мышкой в тулбаре Reaper менять нажимая на кнопки, но лучше конечно на кнопки в ноутбуке 1,2,3 и т. д. нажимать если их назначить.
А изменения кнопок нужны для визуального контроля, и кроме того
хотел бы разобраться с кодом, как делать скрипт чтоб потом мог при надобности сам програмировать другие кнопки.
Это же полезно открывать что то новое, если оно на пользу пойдёт.
 
@Andreit, есть предельный минимум того, что должно быть для реализации задачи, иначе это просто не имеет смысла. Не может быть ни какого Лайва без удобных внешних контролеров. Если их нет, нужно чем-то заняться таким, что приносит деньги - и их купить.
Поверьте - все эти ваши "поиски" дадут вам ТОЛЬКО ОДНО - лучшее знакомство с Рипером. К удобству работы в Лайве это всё не имеет ни какого отношения.
И "новое открывать" тоже лучше со смыслом, с логичным и понятным конечным результатом.

Что касается изучения скриптов - посмотрите код более-менее сложных скриптов Жени или Михаила и решите для себя - готовы ли вы потратить пол года-год усердного изучения и освоения языка LUA и API Рипера.
 
Последнее редактирование:
Всё таки удалось чуть разобраться.
Получилось следующее.
Изменение вида иконки графической возможно, если создать скрипт который имеет статус (on/off).

На любой скрипт имеющий статус (State on/off) можно назначить иконку графическую в тулбаре.
Иконка (90*30), имеет левую, центральную и правую часть.
1Kn.1470246565.png

При создании иконки для скрипта со статусом (on/off) цвет левой, центральной и правой части иконки следует сделать разными по цвету.
При состоянии скрипта off иконка будет иметь вид левой части (жёлтая). Фейдер громкости при этом в исходном состоянии (в данном случае - 0 db).
off.1470246685.png

При состоянии скрипта on иконка будет иметь вид правой части (серая).
Фейдер громкости при этом в крайне левом
(запрограмированном в Custom Action Tr1-) положении.
on.1470246709.png


Что касается кода, то в моём случае простейший вариант, это скрипт со статусом (on/off) , в котором выполняется команда запуска цикла, созданного ранее. Команда эта прописана в первой строке скрипта. Цикл состоит из пользовательских экшенов, которые в свою очередь также состоят из других пользовательских экшенов и команд (смотрите в начале темы).Скрипт с расширением .eel
Код:
Main_OnCommand(NamedCommandLookup("_S&M_CYCLACTION_2"), 0);
get_action_context(#fn, sec, cmd);
state = GetToggleCommandStateEx(sec, cmd);//Current State
SetToggleCommandState(sec, cmd, state <= 0 ? 1 : 0);//Change State (ON/OFF)
RefreshToolbar2(sec, cmd);
Существует думаю, и лучший вариант кода, (но более сложный) где в скрипте можно прописать все нужные команды без использования экшенов. Но и этот вариант работает.

В принципе получилось то, что хотел.
Благодарю всех за коментарии.
 

Вложения

  • 1+-.zip
    1+-.zip
    101,9 KB · Просмотры: 63
Последнее редактирование:

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