ReaScripts (скрипты для Reaper) - обсуждение (1 онлайн

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
18.515
10.563
113
57
Киев
forum.videoediting.ru
нет, это способ приостановить вычисления, когда нужно и возобновить, когда нужно
Я читаю из описания -
Lua поддерживает подпрограммы, эту технологию часто называют общей многопоточностью. Подпрограмма Lua представляет собой независимый поток выполнения. Несмотря на это, в отличие от потоков в традиционных многопоточных системах, подпрограмма может приостановить свое выполнение только в результате явного вызова функции yield.
А то, что приостановить - тоже видимо в каких-то ситуациях нужно.
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.289
1.969
113
@Aleksandr Oleynik, ну я читал и из других источников...не спорю, я предполагаю только, пока без оснований, не пробовал.
Меня интересует пока только прорисовка. Я знаю, как действует Рипер - он создает peak-файл, в котором форма волны описана в нескольких(в трех) разрешениях.
В принципе, я бы смог вычитать его файл(опять же, не знаю насколько быстро), но я хочу использовать трек-акцессор(то есть, любое аудио на участке времени на треке,будь то сэмплы, лупы и тп). Мысль моя такая - хрень(если она воплотится) должна работать практически незаметно - то есть слайдер двинул, отпустил - видишь результат.
Это не так уж и сложно - все, что 200-300 мс мы воспринимаем как реал-тайм в действии. А если больше,чем 500 - уже воспринимается как тормоза.
Все вычислительные процессы я подвел к этому времени +/- . Но прорисовку приходится упрощать из-за этого. Некрасиво выглядит. Но что-то придумаю все-равно.
 
  • Like
Реакции: Aleksandr Oleynik

lil-burn

Well-Known Member
15 Авг 2012
903
626
93
Екатеринбург
@EUGEN27771, оч полезная инфа, всегда любил оптимизировать) Найти бы более полный перечень таких фишек. Даже пришло в голову написать скрипт - оптимизатор скриптов (на входе получает fn скрипта, на выходе создает оптимизированный вариант (с заменой x^x на x*x и тд)). Сюда же можно добавить оптимизацию размера скрипта (напр. сокращение длинных переменных, удаление лишних пробелов, удаление неиспользуемых переменных и тд)
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.289
1.969
113
@lil-burn, ну это только на больших циклах видно. Если такого нет - то важнее читаемость кода. Тут нет никакой разницы - выполнится действие за минусстопитцот секунд или в два раза медленнее. Вы попробуйте из акцессора пару минут обработать - вот там разница уже существенная, счет начинается на секунды(если можно так говорить в привязке к старому процессору) . Я потому и написал, что может кому-то пригодится на будущее, я ведь не программист и этого не знал, хотя встречал часто и догадывался.
А по локализации стандартных функций lua - это вообще непонятно, но сверхэффективно.
Там есть объяснение, он под одну лок. переменную выделяет в три раза меньше "регистров"(условных регистров, не реальных), чем под глобальную...это как я понял, так и объяснил, может неправильно, но факт, что оно на 30% быстрее проверен.
 
  • Like
Реакции: lil-burn

EUGEN27771

Well-Known Member
23 Апр 2010
2.289
1.969
113
Кстати, если кому не трудно, запустите вот это тест и покажите результаты -
PHP:
--[[-------------------------------------
-- TEST 1 -----------------------------
---------------------------------------
local start_time = reaper.time_precise()
for i = 1, 2000000 do
   local x = math.sin(i)
end
reaper.ShowConsoleMsg("Processing time = ".. reaper.time_precise()-start_time ..'\n') -- time test
--runs 30% slower than this one:
-------------------------------
local start_time = reaper.time_precise()
local sin = math.sin
for i = 1, 2000000 do
local x = sin(i)
end
reaper.ShowConsoleMsg("Processing time = ".. reaper.time_precise()-start_time ..'\n') -- time test--]]
---------------------------------------
-- TEST1 ------------------------------
---------------------------------------
----------------
local start_time = reaper.time_precise()
local x = 0
for i = 1, 2000000 do
    x = x + math.sqrt(i)
end
X1 = x
reaper.ShowConsoleMsg("Processing time = ".. reaper.time_precise()-start_time ..'\n') -- time test
----------------
local start_time = reaper.time_precise()
local x = 0
for i = 1, 2000000 do
    x = x + i^0.5
end
X2 = x
reaper.ShowConsoleMsg("Processing time = ".. reaper.time_precise()-start_time ..'\n') -- time test
----------------
local start_time = reaper.time_precise()
local x = 0
local sqrt = math.sqrt
for i = 1, 2000000 do
    x = x + sqrt(i)
end
X3 = x
reaper.ShowConsoleMsg("Processing time = ".. reaper.time_precise()-start_time ..'\n') -- time test
---------------------------------------
-- TEST 2 -----------------------------
---------------------------------------
----------------
local start_time = reaper.time_precise()
local x = 0
for i = 1, 2000000 do
    x = x + math.sqrt(i)
end
X1 = x
reaper.ShowConsoleMsg("Processing time = ".. reaper.time_precise()-start_time ..'\n') -- time test
----------------
local start_time = reaper.time_precise()
local x = 0
for i = 1, 2000000 do
    x = x + i^0.5
end
X2 = x
reaper.ShowConsoleMsg("Processing time = ".. reaper.time_precise()-start_time ..'\n') -- time test
----------------
local start_time = reaper.time_precise()
local x = 0
local sqrt = math.sqrt
for i = 1, 2000000 do
    x = x + sqrt(i)
end
X3 = x
reaper.ShowConsoleMsg("Processing time = ".. reaper.time_precise()-start_time ..'\n') -- time test
Ну, хотя бы пару человек, протестируйте, пожалуйста. Может иные результаты выйдут.
 
Последнее редактирование:

EUGEN27771

Well-Known Member
23 Апр 2010
2.289
1.969
113
@Aleksandr Oleynik, спасибо, если запускать еще - результаты не меняются?
В общем, Вы можете и для себя проверить - по-разному растасовать, поставить итераций больше и тп, думаю, Вам это тоже будет интересно...
 
Последнее редактирование:

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
18.515
10.563
113
57
Киев
forum.videoediting.ru
Меняются -
Processing time = 0.087035229342291
Processing time = 0.058218671776558
Processing time = 0.057509858008416
Processing time = 0.086489961715415
Processing time = 0.05829993270163
Processing time = 0.059582352994767

Processing time = 0.090475844164757
Processing time = 0.058205355915561
Processing time = 0.069129828665609
Processing time = 0.097402484330814
Processing time = 0.058064344309969
Processing time = 0.056714661826845

Processing time = 0.088460368398955
Processing time = 0.059501433501282
Processing time = 0.070528677424591
Processing time = 0.087880616094481
Processing time = 0.059816575660079
Processing time = 0.059365884819272

Processing time = 0.092142375964613
Processing time = 0.05831939435302
Processing time = 0.065721649923944
Processing time = 0.089369603021623
Processing time = 0.05816540831438
Processing time = 0.055389221048245

Processing time = 0.095027480190765
Processing time = 0.058630097882997
Processing time = 0.063154419312923
Processing time = 0.091816990840016
Processing time = 0.05838699798187
Processing time = 0.055190848790517
 
Последнее редактирование:

EUGEN27771

Well-Known Member
23 Апр 2010
2.289
1.969
113
Однако, закономерно, что первый - самый долгий вариант в любом случае! Это хорошо:). Почему хорошо - понятно. В случае с секундами - это, например, 5 против 9 и тп.
Желательно еще пару результатов с других компов. Но, думаю Иерусалимски не зря писал - он же это и делал...
[DOUBLEPOST=1467896030][/DOUBLEPOST]У меня вот:
Processing time = 0.19403094344307
Processing time = 0.17286447063088
Processing time = 0.13150242716074
Processing time = 0.19058722129557
Processing time = 0.17276839981787
Processing time = 0.13121267023962
==============
Processing time = 0.18671689531766
Processing time = 0.17491099541076
Processing time = 0.13116293586791
Processing time = 0.18865561089478
Processing time = 0.17170266225003
Processing time = 0.13217028940562
и т.д.
Но я знаю, комп слабоват, и пару приложений просто не могу сейчас выключить.
Однако, я выберу последний вариант.
 

lil-burn

Well-Known Member
15 Авг 2012
903
626
93
Екатеринбург
@EUGEN27771,
Processing time = 0.15269594952042
Processing time = 0.090658313434687
Processing time = 0.092548961200009
Processing time = 0.15453943193643
Processing time = 0.089636190716192
Processing time = 0.092966933058051


@EUGEN27771, вот допустим получаю уровень тейка:
vol = reaper.GetMediaItemTakeInfo_Value(take, 'D_VOL').
переменная delta получает число в децибелах, на которое надо поднять уровень тейка:
reaper.SetMediaItemTakeInfo_Value(take, 'D_VOL', new_vol).
как вычислить new_vol, зная vol и delta?
 
  • Like
Реакции: EUGEN27771

lil-burn

Well-Known Member
15 Авг 2012
903
626
93
Екатеринбург
как сделать скрипт Set volume to track 1 (MIDI CC/OSC)?
К примеру
Код:
local n = 1

function nothing() end reaper.defer(nothing)

local _,_,_,_,_,resolution,val = reaper.get_action_context()

local tr = reaper.GetTrack(0,n-1)
if tr then
  reaper.SetMediaTrackInfo_Value(tr, 'D_VOL', 4*val/resolution)
end
Работает криво по сравнению с риперовским Set Volume for track 01 (MIDI CC/OSC only), скорей всего там какая-то нелинейная формула
 

Alex_028

Well-Known Member
10 Май 2015
808
348
63
31
Киев, Донецк UA
Вопрос к спецам по звуку:
В таблично-волновых синтах используются вавки с сотнями волнами... Можно ли как-то разобрать вавку на отдельные волны или например редактировать одну избранную волну?
[DOUBLEPOST=1468625452][/DOUBLEPOST]Если у кого есть материалы для чтения по разбору вавок на составляющие буду очень благодарен!
 

Alex_028

Well-Known Member
10 Май 2015
808
348
63
31
Киев, Донецк UA
@EUGEN27771, хм, с точки сложения и вычитания волн я не смотрел, спасибо за подсказку.
Тогда может можете подсказать как можно написать генератор таких таблиц? Я в синтезаторе Tone2 nemesis наблюдал аддективный редактор, в котором каждая волна просто рисуется мышей и к ним можно применять какие-то функции. Увы подробно объяснить немогу так как с dsp только сейчас начал разбираться и пока в теории разбираюсь, а на практике ковыряю csound)))
 
  • Like
Реакции: stepperian

Alex_028

Well-Known Member
10 Май 2015
808
348
63
31
Киев, Донецк UA
@EUGEN27771, если вы не против скрипт немного перепишу, мне мышка непонадобится :(
Чуть позже в личку напишу.
[DOUBLEPOST=1468630110][/DOUBLEPOST]Благодарю за такой пример! Вытащил полностью ваш репозиторий.
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
18.515
10.563
113
57
Киев
forum.videoediting.ru
Кто-то бы попробовал хотя бы этот триггер - может это у меня он так настраивается быстро - я с ним вожусь уже оч. долго - и привык просто.
Женя, я попробовал - очень круто даже сейчас!

В атаче результат - Оригинал и подставленная библиотека.

Чего мне вот прям сейчас не хватило -
- переназначить ноту
- поднять уровень велосити слабых сигналов (уже отфильтрованных) - просто одновременно для всех низких велосити их пропорционально подтянуть чуть выше.

На мой взгляд - инструмент уже вполне рабочий!
Эхххххххххх - еслиб это можно было в Риалтайме делать......, ну хотя-бы 64 spl
Естественно с JS
 

Вложения

  • Like
Реакции: naash_g и Oliver_Cray

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
18.515
10.563
113
57
Киев
forum.videoediting.ru
Естественно, это все элементарно, сделаю сходу, важнее всего, как само определение работает, хотя его тоже можно подстроить.
Что касается нот - по умолчанию нужно бы сделать по мапингу самых популярных драм сэмплеров, того-же EZ_Dramer-а. Ну и дать возможность переназначить.
По велосити - может сделать что-то типпа MIDI Компрессии - слайдер - который и визуально в GUI бы точки велосити слабых сигналов прибоднимал?

И ещё - не знаю как, но было-бы круто сделать подобие ОнЛайн прослушки результата без экспорта нот.

Само определение работает на мой взгляд отлично!
 
  • Like
Реакции: Oliver_Cray

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
18.515
10.563
113
57
Киев
forum.videoediting.ru
А чем плох встроенный JS триггер?
Да ни чем не плох. Но не всегда адекватно отсекает проникшие с других барабанов звуки, не всегда придробки читает нормально - настроить не возможно адекватно.
Да и midi чтоб получить - нужно запись пользовать.
Не видно что происходит при настройке.
[DOUBLEPOST=1468656822][/DOUBLEPOST]
Это возможно для определения самого удара, но как велосити взять за это время? Тут минимум 1-2 мс для самых простых барабанов.
Но JS ведь существующий как-то это делает (согласен - плохо :( )
[DOUBLEPOST=1468656866][/DOUBLEPOST]
В общем - это единственный супер-масштабный плюс (мы видим все и сразу), ради которого игра и стоит свеч
ДА! Но не единственный!
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
18.515
10.563
113
57
Киев
forum.videoediting.ru
Я понимаю, что этап пройден и дальше уже не интересно :)
Но всё-же, может доведёшь до конца два инструмента -
- Скрипт с не риалтайм но классным алгоритмом определения велосити
- и JS - с той-же визуализацией при отстройке и двумя режимами - с таким-же Не Риалтаймом и упрощённый с Риал Таймом.
?????????????????????????????
 
@EUGEN27771, работает. А почему в тестовом не оставили выбора gate? С визуализацией хотелось бы чтобы плей-курсор в скрипте и arrange не только синхронизировались, а ешё и волна перескакивала, ну то есть, чтобы всегда было видно волну. Потом, хотелось бы скроллить, пока можно только зумить. + Нужен зум по вертикали -- я привык работать с небольшими уровнями исходников, в скрипте сейчас волна очень маленькая. Хотелось бы возможность стирать одним лёгким драгом ненужные ноты. Вот например, у меня все определилось, но из-за этих протечек срабатывает там где не надо, а подкрутишь сенсивити или трешхолд - не сработает там где надо. Хотя вот фильтр гейн подкрутил - всё стало хорошо.)
+ всё что написал Александр - актуально. Выбор ноты обязателен.) Вручную на велосити тоже нужно обязательно влиять и корректировать.
И пока всё чуть задумчиво работает, хотя и понятно почему.

п.с. Не думайте бросать ничего.) Это капец как надо и полезно в повседневных и "незадротских" реальных задачах. Ешё я вам оставлял пожелания к диессеру, вы забросили его?) Это же тоже бомбовый скрипт.
 

Вложения

  • 82,8 KB Просмотры: 23
  • Like
Реакции: EUGEN27771
То есть вид Рипера перемещался по курсору? Да, хорошая мысль, это возможно.
Так тоже можно, но отключаемо. А я имел в виду, чтобы: переставил курсор в рипере, а в скрипте не только передвинулся курсор, но и сам вид к курсору и волне в том месте тоже передвинулся. Ну, то есть, назумился на начало длинной дорожки, потом раз, и понадобилось быстро в конец перейти в таком же зуме.

он очень легко перекроет тот диэссер
Ну это прям супер-комбайн получится. Даже не знаю, как можно было бы назвать такой прибор.)

уже выжал все, что можно из него
Ведь потом он будет работать на длинных дорогах? Сейчас я выделял итем минуты в полторы, и он вроде бы весь не отрисовался в скрипте.
 

Oliver_Cray

Well-Known Member
29 Окт 2014
3.567
3.088
113
Майкоп
@EUGEN27771, насчет пожеланий уже вроде все интересующее меня озвучили, а вот как измерить время выполнения я не знаю.
 

Oliver_Cray

Well-Known Member
29 Окт 2014
3.567
3.088
113
Майкоп
Medium1
Filter time = 0.92778435730725
Filter time = 0.88242701586569
Filter time = 0.88502672799223
Filter time = 0.89176377360127
Filter time = 0.87637232082488
Filter time = 0.88431731976743

На глаз, по сравнению с первой версией гораздо быстрее. (i3 3.3GHz)
[DOUBLEPOST=1468784341][/DOUBLEPOST]Very fast
Filter time = 0.58772372329258
Filter time = 0.59117559611332
Filter time = 0.56133286640397
[DOUBLEPOST=1468784377][/DOUBLEPOST]Very slow
Filter time = 2.3477418985567
Filter time = 2.3412076298846
Filter time = 2.3244191311969
Filter time = 2.3030896112323
 
  • Like
Реакции: EUGEN27771

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