ReaScripts (скрипты для Reaper) - делимся (2 онлайн)

Iskander M

Member
6 Мар 2014
252
17
18
37
Москва
Странно, первая версия заработала сразу, на второй пишет
Warning: @Import could not open 'inc/AudioFunctions.eel'
Warning: @Import could not open 'inc/MiniGui.eel'
Warning: @Import could not open 'inc/Presets.eel'
gen_Envelope-based Compressor v2.eel:26: 'Thresh.DW_New' undefined: 'Thresh.DW_New(1, "Slider", "V", 40,30,20,250, r,g,b,a, "Th'

SWS последней версии. upd : из папки inc все скрипты тоже нужно добавить ?

Всё работает ! Автору респект.
А куда эти скрипты из папки Inc добавить конкретно? Туда же куда и основной скрипт Envelope-based Compressor?
Или текста этих скриптов скопировать в текст основного скрипта Envelope-based Compressor?
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
@Iskander M, их не из папки, а вместе с папкой Inc и папкой над этой папкой следует положить в папку Скриптов Рипера. При этом «проинсталить» нужно только основной скрипт.
Это модули без которых основной скрипт работать не будет.
 

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.152
113
Написал такой колхозный скрипт (только начал программировать), но пока это лучшее, что есть для подгона сетки под стретч маркеры, которые в свою очередь можно выставить по транзиентам. Собственно в сравнении с SWS/BR: Create project markers from stretch markers in selected items в связке с SWS/BR: Convert project markers to tempo markers... как-то правильней работает, несмотря на отсутствие настроек, т.к. работает по принципу move closest grid. Собственно если стретч-маркеры стоят по сильны долям, и если есть периодически между ними разрывы (допустим маркеры стоят на расстоянии 2/3/4 доли друг от друга, но не сильно дальше), и если исходный темп проекта не сильно отличается (не вдвое), подгон будет правильным с большой вероятностью. Если же такую ситуацию решить SWS методом, то там, где маркеров не будет, не будет и сетки, что отличает алгоритм работы, и по мне не в лучшую сторону. Здесь же на примере песни средний темп определен, как 118 и сетка равномерно подогналась. Целесообразно также сетку ставить на четверти.
Код:
script_title = "Tempo detection"

function main()
  selitem = reaper.GetSelectedMediaItem(0,0)
  take = reaper.GetActiveTake(selitem)
  count =  reaper.CountSelectedMediaItems()
  num = reaper.GetTakeNumStretchMarkers(take)
  result = num*count

  cursor_position = reaper.GetCursorPosition()
  startTime, endTime = reaper.BR_GetArrangeView(0)
  reaper.CSurf_OnZoom( 100,0 )
  reaper.Main_OnCommand(41173, 0)
  reaper.Main_OnCommand(40433, 0)
  for i = 1, result do
   reaper.Main_OnCommand (41860, 0)
   commandID = reaper.NamedCommandLookup("_BR_MOVE_GRID_TO_EDIT_CUR")
   reaper.Main_OnCommand(commandID, 0)
  end
  reaper.SetEditCurPos(  cursor_position, 0, 0)
  reaper.BR_SetArrangeView(0, startTime, endTime )
end

reaper.Undo_BeginBlock()
reaper.PreventUIRefresh(1)
main()
reaper.UpdateArrange()
reaper.PreventUIRefresh(-1)
reaper.Undo_EndBlock(script_title,-1)
Пытался его немного автоматизировать по скорости, если несколько выделенных айтемов, и вроде получилось, если сделать count takes вместо count items, но почему-то неправильно тогда работает. Вообще надо писать хороший скрипт на эту тему, возможно даже без использования стретч маркеров, а с учетом ручного транзинета детекшиона
Гиф
2018-06-14_16-04-05.gif
 
Последнее редактирование:

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
@borisuperful, по транзиентам - там еще фильтр поставить на детектор - будет хорошо. Я не делал, если есть желание - просто возьмите фильтр из каких-то других скриптов, из моих же, например, будет намного эффективнее, это точно, проверено.
Сам по себе принцип детектирования у меня предельно простой - быстрая огибающая, медленная огибающая, и разница между ними.
Я пробовал с разными огибающими, rms, разное время атаки, релиза, что угодно. Все это херня, самый большой профит дает СБРОС ПОСЛЕ СРАБАТЫВАНИЯ!
Тут нужно понять, как все работает - всего один раз понять. Дальше - все очень просто.
 

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.152
113
@EUGEN27771, да, спасибо, кстати с несколькими айтемами я таким образом решил. Это по поводу скрипта вашего для проставления маркеров (когда-то задавал вопрос)
Код:
function MAIN()
local(j, item, srate, Threshold_dB, Sensitivity_dB, Retrig_sec)
(
  Undo_BeginBlock();
  Main_OnCommand(41844, 0);  // remove old str-marks(All)
  PreventUIRefresh(1);
  j = 0;
  loop(CountSelectedMediaItems(0),
    item = GetSelectedMediaItem(0, j);
    j += 1;
    item ? (
      //-- Detection settings --
      srate = 44100;
      Threshold_dB   = Thresh.val;
      Sensitivity_dB = Sens.val;
      Retrig_sec     = Retrig.val/1000;
      //------------------------
      start = time_precise();
      DetectTransients(item, srate, Threshold_dB, Sensitivity_dB, Retrig_sec);
      //ShowConsoleMsg(sprintf(#, "%f \n", time_precise()-start); );
    );
  );
  PreventUIRefresh(-1);
  Undo_EndBlock("Add stretch markers at transients",-1);
);
Если блок графики добавить до remove old str-marks(All), то получается феншуйно, плавненько, но визуально не очень удобно видеть новые маркеры после старых :)
 
Последнее редактирование:

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
@borisuperful, наверное, помудрю потом, сделаю детектор с фильтром и доп. настройками.
Кстати, я знаю что даже такой простой вариант будет работать, он будет прекрасно работать и в реал-тайм, для чего изначально и предназначен.
Никаких проблем - я старался;)
--------------------------------------
Хочу спросить - интересен ли Вам EEL?
Есть много интересных вещей, заинтересованность решает.
---------------------
Ко мне обращайтесь на "ты".
(Я же не старик, напротив, совсем молодой;))
 

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.152
113
@EUGEN27771, мне интересно все, что касается скриптинга рипера, но мне еще нужно основ программирования нахвататься :) Еще конечно документация по API не такая подробная, как хотелось.
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
Это же тема про скрипты. Хочу пару слов про EEL. Конечно, по сравнению с Lua корявенько - с точки зрения программинга.
loop, while - это просто пародия
 

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.152
113
@EUGEN27771, заметил, что скрипт твой для расставления стретч-маркеров медленнее работает на аудио, у которых частота дискретизации больше 44.1 ггц. Возможно ли это оптимизировать?
UPD собственно, там где srate = 44100, вписал 48000, и теперь как прежде работает, но наоборот на 44.1 медленней. Соответственно далее вписал так srate = GetMediaSourceSampleRate(item); :)
Теперь на разных сэмплрейтах одинаково быстро работает
 
Последнее редактирование:
  • Like
Реакции: Aleksandr Oleynik

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.152
113
@EUGEN27771, еще, если придраться, заметил также увеличение скорости работы после Glue или рендера внутри проекта. Айтем разумеется один. Думал, что это связано с кэшированием в проджект директории, но при попытке поставить в настройках кэширование медиа айтема в директорию при импорте в проект ничего не изменилось. Есть какие мысли по этому поводу? :)
UPD Нашел собаку, это связано с mp3 :)
 
Последнее редактирование:
  • Like
Реакции: Aleksandr Oleynik

Mixandry

New Member
26 Окт 2017
4
0
1
41
Привет ребята! Подскажите пожалуйста, а то я все перерыл в Рипере не могу найти функцию выделения области по выделенному айтому, как это реализовано в Кубейсе на кнопке P.
Часто надо выделить область точно по выделенному айтому приходится подгонять вручную.
Так же не нашел где включается привязка к началу и концу айтома при выделении области.
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
@Mixandry, за один и тот же вопрос в разных темах на этом Форуме можно отправится в бан - вам нужно не только мануал Рипера, но и правили форума почитать.
 

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.152
113
Кому может пригодится.
Благо в последней бете Джастин добавил возможность назначать для колеса мыши сочетания с клавишей win, что раньше работало только для шорткатов, появился смысл создания "колесных" скриптов
1) Скрипт для релугирования по колесу pitch айтема - первый регулирует semitones, второй fine.

semitones
Код:
script_title = "pitch mouswheel"
local _,_,_,_,_,_,val = reaper.get_action_context()


local count = reaper.CountSelectedMediaItems()

function Pitch()
if val > 0 then
   reaper.PreventUIRefresh(1)
    for i = 0, count-1 do
    count = reaper.CountSelectedMediaItems()
    selitem = reaper.GetSelectedMediaItem(0,i)
    take =  reaper.GetActiveTake(selitem)
    pitch = reaper.GetMediaItemTakeInfo_Value(take, 'D_PITCH' )
    reaper.SetMediaItemTakeInfo_Value(take, 'D_PITCH', pitch+1)
    reaper.UpdateItemInProject(selitem)
    end
   reaper.PreventUIRefresh(-1)
   end
if val < 0 then
   reaper.PreventUIRefresh(1)
    for i = 0, count-1 do
    count = reaper.CountSelectedMediaItems()
    selitem = reaper.GetSelectedMediaItem(0,i)
    take =  reaper.GetActiveTake(selitem)
    pitch = reaper.GetMediaItemTakeInfo_Value(take, 'D_PITCH' )
    reaper.SetMediaItemTakeInfo_Value(take, 'D_PITCH', pitch-1)
    reaper.UpdateItemInProject(selitem)
    end
   reaper.PreventUIRefresh(-1)
  end
end

reaper.defer(Pitch)

fine
Код:
script_title = "pitch mouswheel"
local _,_,_,_,_,_,val = reaper.get_action_context()


local count = reaper.CountSelectedMediaItems()

function Pitch()
if val > 0 then
   reaper.PreventUIRefresh(1)
    for i = 0, count-1 do
    count = reaper.CountSelectedMediaItems()
    selitem = reaper.GetSelectedMediaItem(0,i)
    take =  reaper.GetActiveTake(selitem)
    pitch = reaper.GetMediaItemTakeInfo_Value(take, 'D_PITCH' )
    reaper.SetMediaItemTakeInfo_Value(take, 'D_PITCH', pitch+0.01)
    reaper.UpdateItemInProject(selitem)
    end
   reaper.PreventUIRefresh(-1)
   end
if val < 0 then
   reaper.PreventUIRefresh(1)
    for i = 0, count-1 do
    count = reaper.CountSelectedMediaItems()
    selitem = reaper.GetSelectedMediaItem(0,i)
    take =  reaper.GetActiveTake(selitem)
    pitch = reaper.GetMediaItemTakeInfo_Value(take, 'D_PITCH' )
    reaper.SetMediaItemTakeInfo_Value(take, 'D_PITCH', pitch-0.01)
    reaper.UpdateItemInProject(selitem)
    end
   reaper.PreventUIRefresh(-1)
  end
end

reaper.defer(Pitch)

2) Скрипт для панорамирования айтема по колесу
Код:
script_title = "pan mouswheel"
local _,_,_,_,_,_,val = reaper.get_action_context()


local count = reaper.CountSelectedMediaItems()

function Pan()
if val < 0 then
   reaper.PreventUIRefresh(1)
    for i = 0, count-1 do
    count = reaper.CountSelectedMediaItems()
    selitem = reaper.GetSelectedMediaItem(0,i)
    take =  reaper.GetActiveTake(selitem)
    pan = reaper.GetMediaItemTakeInfo_Value(take, 'D_PAN' )
    reaper.SetMediaItemTakeInfo_Value(take, 'D_PAN', pan+0.1)
    reaper.UpdateItemInProject(selitem)
    end
   reaper.PreventUIRefresh(-1)
   end
if val > 0 then
   reaper.PreventUIRefresh(1)
    for i = 0, count-1 do
    count = reaper.CountSelectedMediaItems()
    selitem = reaper.GetSelectedMediaItem(0,i)
    take =  reaper.GetActiveTake(selitem)
    pan = reaper.GetMediaItemTakeInfo_Value(take, 'D_PAN' )
    reaper.SetMediaItemTakeInfo_Value(take, 'D_PAN', pan-0.1)
    reaper.UpdateItemInProject(selitem)
    end
   reaper.PreventUIRefresh(-1)
  end
end

reaper.defer(Pan)
 
Последнее редактирование:
  • Like
Реакции: rmozh и elektrozz

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
@borisuperful, вот и все;)
Заведи на github страницу. Клонируй частный репо. Это просто.
Даже такой дятел, как я завел, десктоп-версию.
Ссылка верная, если нет - удалю - https://desktop.github.com
Синхрон, это удобно...по крайней мере.
(Еще есть мнение "Десктоп - это лажа, только православная командная строка!"
ХЗ... Можно согласиться, но пользоваться неудобно, как не разукрашивай. Даже клацая в терминале - неудобно. 98% людей без напильников выберут десктоп)
 
Последнее редактирование:

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
Хочу спросить, кто-то подробнее распишите -
+ ReaScript: add drag and drop receive support with gfx.getdropfile()/gfx_getdropfile()

+ ReaScript: allow deferred script execution to continue during modal windows triggered by MIDI
+ ReaScript: StuffMIDIMessage() for control defers to process similar to a hardware MIDI event

Про перетаскивание давно слышал - буду тестить. По ходу - и в JS заводится!
Два последних пункта пока не могу проверить
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
еще, если придраться, заметил также увеличение скорости работы после Glue или рендера внутри проекта.
Это я давно нашел. Акцессор, конечно, работает быстрее с родным семплрейт.
Если посмотреть на алгоритм компрессора - там все это учтено, и я описал в деталях, что делаю. Поэтому там относительно мутный алгоритм.
С учетом плейрейт, и прочего, но не просто так. То есть, сперва, все выравнивается под реальный рейт, компрессируется именно в таком, именно в сыром виде, а затем восстанавливается исходная ситуация. Это хороший ход - во-первых - скорость, во-вторых - точность работы. Работа именно с исходным файлом.
 

vitalker

Well-Known Member
8 Окт 2013
5.085
2.195
113
Гродно
+ ReaScript: add drag and drop receive support with gfx.getdropfile()/gfx_getdropfile()
Это Михаил просил для своего скрипта RS5k manager, вот там она и реализована.
Теперь ещё можно использовать контекстные меню(с версии 5.92): ReaScript: add ShowPopupMenu() API
 

YuriOl

Well-Known Member
6 Май 2005
1.060
590
113
55
Луганск
youtube.com
Благо в последней бете Джастин добавил возможность добавлять для колеса мыши сочетания с клавишей win
А как избавиться от выскакивающего меню пуск в нижнем левом углу монитора при использовании кнопки Win?
 

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.152
113
@Barto, как написал, так и написал "не использовать один shift". Только при шифте кнопка уводит в пуск, во всяком случае у меня на 8.1. Если что нибудь будет другое, даже вместе с shift, то не уйдет в пуск
 

YuriOl

Well-Known Member
6 Май 2005
1.060
590
113
55
Луганск
youtube.com
@Barto, как написал, так и написал "не использовать один shift". Только при шифте кнопка уводит в пуск, во всяком случае у меня на 8.1. Если что нибудь будет другое, даже вместе с shift, то не уйдет в пуск
У меня на Win 10 наоборот. С шифтом не выскакивает меню пуск.
 

Barto

Member
20 Апр 2017
50
91
18
Обратите внимание, пользователь заблокирован на форуме.
@borisuperful , то есть просто Win+колесо использовать никак не выйдет?
У меня windows 7, в пуск уплясывает только если нажать одну Win, или +колесо мыши покрутить, при любых других комбинациях в пуск не уходит.
У нас тут прям басня "Лебедь, рак и щука" получается. Кнопка одна, а винда у всех разная, и тянут они пуск в разные стороны.
 

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.152
113
@elektrozz, даже не знаю, в чем дело. На октаву можно, просто поменять там pitch+12 и pitch-12
@Barto, разумеется с одним win работать не будет и это логично - win и сделана для вызова пуска, причем именно в случае зависонов, минуя как бы саму программу.
 
Последнее редактирование:

Maestro Sound

Active Member
1 Ноя 2007
721
86
28
me2beats_Show-hide children of selected tracks.lua !!!!!!!!!! Друзья скриптоиды. А можно ли данный скрипт про абгрейдить, чтобы он работал не только с фолд-треком скрывая его подтреки, а и с обычным треком. Тобишь указать скрипту если данный трек является фолдер треком то Работает как работает (скрывать-показывать его подтреки). А если это подтрек или просто трек то просто скрывать его одного.
 
  • Like
Реакции: YuriOl

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
me2beats_Show-hide children of selected tracks.lua !!!!!!!!!! Друзья скриптоиды. А можно ли данный скрипт про абгрейдить, чтобы он работал не только с фолд-треком скрывая его подтреки, а и с обычным треком.
Можно всё, что угодно. Но разбираться с чужим скриптом - очень не хочется.
 

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