Арчи, спасибо ещё раз за скрипт по формуле "из герц в значение". Теперь буду знать, что к тебе ещё и по математике можно обращаться
Удивительным образом его получилось успешно прикрутить как ответную часть к инопланетной формуле Евгена учитывая её неточность
Я так и не понял, для чего ты мою первую функцию переделал под Евгена? Я же написал тебе там, что удали эту формулу Евгена и замени моей функцией. И еще раз повторю, что не рекомендую так использовать, потому что две функции сделаны по разным формулам могут выдавать разные результаты. А мои в любом случае при любых обстоятельствах вернут один и тот же результат в обе стороны.
Что касается математики, то я тоже в ней не силен, так написанную формулу просто перевел в код.))
Работу с областью добавил. Правда, работает только при запуске скрипта или по кнопке Get Item, в таких условиях я смог её воткнуть малой кровью и не ломая всего остального. Берёт айтем(ы) из выделенной области + выделение трека. Если нет выделения, работает по старинке, по айтемам.
Что касаемо выбора времени, то зря ты не рассмотрел скрипт,
Archie_Item; Split items by time selection,unselect with items outside of time selection if there is selection inside.lua
я специально под твою задачу его писал, со всеми проверками, что бы тебе не надо было проверять есть выбор времени или нет выбор времени, но ты стал делать с помощью экшенов, вот смотри - ты делаешь так: Снимаешь выбор времени со всех айтемов и далее выбираешь айтемы в выборе времени, а представь вот такую ситуацию
И вот в этой ситуации у тебя снимется выделения и далее ничего не произойдет!
Я же все это в том скрипте предусмотрел, т.е. тот скрипт разрежет айтемы или снимет выделения за приделами выбора времени только в том случае, если есть выделенный айтем в выборе времени.
Т.е. с моим скриптом работало бы так: Если есть выделенный айтем в выборе времени, то тогда работало бы по выбору времени, а если нет, то как обычно и не смотря на то, что есть выбор времени или нет.
И вообще ты там что то нагородил непонятное, то что сделал, что скрипт теперь отталкивается от выделенного трека, вообще не удобно!
Если нету выделенных айтемов, то все равно скрипт сработает на выделенном треке, хотя ничего не должно произойти, если вообще нету выделенных треков, то скрипт режет весь проект по выбору времени, и еще проклеивает это все для чего то, без разбора, создавая кучу ненужных файлов.
Я же говорил, что тупо примени мой скрипт перед запуском скрипта и перед нажатием на Get Item и больше ничего не делай в этой области, ну и в функцию добавления маркеров условие добавить про выделение и все, а ты огород какой то нагородил)).
Копирование роутинга не работает в некоторых условиях.
Копирование роутинга вообще кусками какими то копируется, то только первый посыл скопируется, то третий, то вообще не одного. Короче загадочно это работает.
Этот GUI Евгена не позволяет визуально менять слайдеры "на лету"? Как я понимаю, код выставляет значения и прорисовывает их только при инициализации, а во время работы скрипта слайдеры двигаются только мышкой, скрипт так не сможет? Ответ на этот вопрос повлияет на судьбу функции "Пресеты".
Я не знаком с ООП, но сделать это можно, причем легко, потому что все функции уже готовы в скрипте. Это нужно либо Евгена просить, что бы он подсказал, либо читать эту
тему, там все описывается по такому же принципу, как у Жени , я так и не добрался до изучения той темы, или
Lokasenna можно спросить, он шарит в этом лучше всех.
То есть, я уже сейчас могу прикрутить назначение слайдерам определённых значений, но слайдеры сдвинутся до этих значений только после полного перезапуска скрипта.
Ну в таком случае можешь поступить так: эту функцию прописываешь в функции loop и отслеживаешь какой нибудь переменной, например "RESTART", т.е. в начале скрипта пишешь local RESTART, затем при вызове пресета или в том условие, когда изменил
все слайдеры, короче - думаю понял прописываешь RESTART = true
и в функции loop:
PHP:
if RESTART == true then;
local scriptFile = debug.getinfo(1,'S').source:gsub("^@",''):gsub("\\",'/');
.................. -- Функция Запомнить размер
gfx.quit(); -- закрываем gui окно
dofile(scriptFile); -- запускаем скрипт по новой
RESTART =nil -- сбрасываем переменную (не обязательно, так на всякий случай)
return; -- ломаем функцию loop (defer) в ранее запущенном скрипте
end
Где "Функция Запомнить размер" вставить функцию из скрипта которая при выходе запоминает размер и положение окна.
И ещё. Есть ли команды в api для копирования/вставки sends/returns? Я нашёл Get/SetTrackSendInfo_Value, но он ведь только c существующими сэндами и их параметрами работает, а копировать/добавлять сэнды не умеет?
PHP:
---------------------------------------------------
local function copyReceiveTrack(track,desttrIn,i);
if i>reaper.GetTrackNumSends(track,-1)-1 then return end;
local t={'P_SRCTRACK','I_MIDIFLAGS','I_DSTCHAN','I_SRCCHAN','I_AUTOMODE',
'I_SENDMODE','D_PANLAW','D_PAN','D_VOL','B_MONO','B_PHASE','B_MUTE'};
local t2 = {};
for j = 1,#t do;
t2[j] = reaper.GetTrackSendInfo_Value(track,-1,i,t[j]);
end;
local SendNew = reaper.CreateTrackSend(t2[1],desttrIn);
for j = 2,#t do;
reaper.SetTrackSendInfo_Value(t2[1],0,SendNew,t[j],t2[j]);
end;
end;
---------------------------------------------------
---------------------------------------------------
local function copySendTrack(track,desttrIn,i);
if i>reaper.GetTrackNumSends(track,0)-1 then return end;
local t={'P_DESTTRACK','I_MIDIFLAGS','I_DSTCHAN','I_SRCCHAN','I_AUTOMODE',
'I_SENDMODE','D_PANLAW','D_PAN','D_VOL','B_MONO','B_PHASE','B_MUTE'};
local t2 = {};
for j = 1,#t do;
t2[j] = reaper.GetTrackSendInfo_Value(track,0,i,t[j]);
end;
local SendNew = reaper.CreateTrackSend(desttrIn,t2[1]);
for j = 2,#t do;
reaper.SetTrackSendInfo_Value(desttrIn,0,SendNew,t[j],t2[j]);
end;
end;
---------------------------------------------------
-- Пример ==================================================
-----------------------------------------
track = reaper.GetSelectedTrack(0,0);--трек с которого копировать
desttrIn = reaper.GetSelectedTrack(0,1);--трек на который копировать
------------------------------------------
local CountSend = reaper.GetTrackNumSends(track,0);
for i = 1,CountSend do;
copySendTrack(track,desttrIn,i-1);
end;
local CountReceives = reaper.GetTrackNumSends(track,-1);
for i = 1,CountReceives do;
copyReceiveTrack(track,desttrIn,i-1);
end;
-- ========================================================
По поводу всплывающих окон при копировании тоже можешь подумать еще
Это будет выглядеть примерно вот так
PHP:
if MIDISamplerCopyFX == 3 then
mb = reaper.MB('Копировать или нет','Help',1);
if mb == 1 then
MIDISamplerCopyFX == 1 --copy
else
MIDISamplerCopyFX == 0 --no copy
end
end
Ну и соответственно в меню параметр "show Help Win" и если параметр включен, то к параметру copy добавляем # , т.е. делаем не активным
Ну и по условию для нот тоже можешь еще подумать.
----------------
Сильно не тестил, так что первое заметил, написал.
P.S. Авто скролл ты добавил, при первом запуске работает, но после первого прослушивания, если нажать стоп и передвинуть курсор в аранже, то в скрипте волна все равно останется в конце, т.е. можно сказать что авто скролл уже не работает. Вед курсор должен преследовать волну в любых случаях.