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

Shico

(Шико)
10 Фев 2005
1.169
239
63
62
Подскажите по скрипту: me2beats_Create folder from selected tracks (+rename folder) 2.lua.
Обнаружил такую проблему: когда треки идут друг за другом, папка создаётся без проблем, но если надо создать папку для трека 1, 2, 3, 5, 7, то Рипер закрывается с ошибкой.
Проверял на старых проектах.
Если создавать проект с нуля, то всё работает.
Win 8.1, Reaper 5.70 (portable)
 

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.152
113
Подскажите по скрипту: me2beats_Create folder from selected tracks (+rename folder) 2.lua
Проблему нужно искать в проекте. Точнее проблема то в скрипте, но именно конкретный проект может вызывать такую работу скрипта.
Если опишите проект, то возможно мне удастся повторить краш
 

Вложения

Shico

(Шико)
10 Фев 2005
1.169
239
63
62
@borisuperful, сделал чистый проект с Коntakt и Stylus RMX.
Один канал Kontakt перетащил в Stylus и наоборот, применил скрипт, проект вылетел с ошибкой.
Сейчас попробовал разные инструменты, получается проблемы есть только у многоканальных инструментов (Kontakt, Trilian, Stylus RMX).
Если все идут друг за другом, всё нормально, если каналы перемешены, тогда ошибка.
Как то так.
 
Последнее редактирование:

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
me2beats нужно исправить секцию чанков, взять её у Жени - он в ней исправил ошибки самих разработчиков Рипера и на оф форуме это подтвердили.
Но me2beats я уже очень давно на форуме не видел.
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
Редакторов вообще-то полно и так. Тем более, можно в Рипере легко назначить любой.
Но было по крайней мере несколько причин сделать свой.
1)Моментально открывается, моментально, прямо на ходу, переключается между исходниками.
2)Привязка к текущему проекту, ко времени и к сетке проекта, прослушка, навигация в рамках проекта, а не отдельно.
Это очень удобно.
3)Можно добавлять любой функционал.
-----------
Есть еще одна причина, самая важная. И к редактору это не относится. Редактировать исходник - это конкретная ситуация, довольно редкая. Изначально интересовало другое.
Я полностью привязался к айтему и тейку по времени самого айтема, тейка, исходника, к отображению формы волны в Gui, и ко времени проекта. Причем, посчитав сетку во всех диапазонах, свинг и таймлайн.
С учетом все позиций, оффсетов, плейрейтов, лупов и прочего.
Достаточно сложно, но несколько ф-й конвертации одного времени в другое и в позицию в Gui - все срослось идеально. Абсолютно.
SE demo1.gif

-----------
Какой профит?
Возможность конвертировать одно время в другое дает очень много возможностей.
1)Я смотрел ф-и Бридера - он не считает сетку, он берет ее просто временно меняя настройки сетки. Это долго и неправильно.
Кстати, эти ф-и уже не работают со свингом - как и часть SWS.
То есть 1 профит - мы видим реальную сетку проекта.
- любой квантайз по реальной сетке проекта, либо любой другой кратной, либо указанной.
SE demo2(Grid).gif


2)Мы имеем отображение волны в Gui, полностью просчитанное по любому времени.
Я забыл сказать про Зум - это позволяет делать любые действия на любом, даже микро-участке.
Те же огибающие и прочее.
3)Анализ аудио. Здесь целый клондайк, причем с визуальной связью.
Для этого все и затевалось, с прицелом на eel
-----------
И вот один момент я не учел...
Я не учел стретч-маркеры в расчетах времени. Вспомнил в последний момент.
И для них еще нужно учитывать slope на каждом участке, чтобы все срослось, сложно. Вот такие дела.
----------
Вот у меня мысль - может быть пока забить на стретч-маркеры?
Предположим, сделать айтемы со стретч-маркерами неподдерживаемыми - с предложением отрендерить, допустим. Ведь любой редактор сторонний вообще открывает исходник в чистом виде.
В дальнейшем, я постараюсь посчитать - но пока - много переписывать.
 
Последнее редактирование:

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Очень крутой функционал будет!
Вот у меня мысль - может быть пока забить на стретч-маркеры?
Можно, но скрипт должен тогда отказываться работать на айтемах со стреч маркерами и писать - сделайте Glue, а потом меня юзайте.

И ещё вопрос - а глобальные темпо маркеры он учитывает?
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
И ещё вопрос - а глобальные темпо маркеры он учитывает?
Да, любые смены темпа и размера, позиций, точек оффсет и старт - короче, все, кроме стретч.
-----------
Там на демке не видно, кстати, как сетка посчитана - очень интересная история.
Рипер по разному считает сетку и тайм-лайн.
По сетке есть косяк у кокосов(или фишка, не знаю) - у нас ведь можно поставить размер 3/7, допустим, или 5/6( смех) - короче, нашел и посчитал один в один, именно матеметически - не как в Sws, по известному.
 
Последнее редактирование:

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
Вот всякие произвольные смены темпа
We demo - tempo1.gif

Считается с макс. точностью. Это какие-то далекие знаки после запятой по времени.
В общем, на много порядков меньше, чем время между семплами.
 
Последнее редактирование:

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.152
113
@SoundExplosion,
Однако он почему-то перестает работать в режиме step pattern после того, как написанные ноты начнешь стретчить
В принципе этот баг можно обойти - поставить у новых образовавшихся по длине нот соответствующую сетку, чтобы они в нее влезали. И тут вроде бы не влияет сам факт стретчинга, что было бы странно. Скрипт не распознает ноты, если размер сетки превышает ее длину. Именно превышает, если сетка меньше длины ноты, то это не влияет

Классный есть от js скрипт, который позволяет более удобно стретчить ноты. Если масштаб маленький, бывает невозможно нащупать в конце ноты эту зону (значок рука), чтобы начался стретчинг. Скрипт во время работы стретчит ноты за курсором. Причем с двух сторон.
 

Вложения

Последнее редактирование:

SoundExplosion

Well-Known Member
22 Янв 2009
2.121
2.244
113
41
Tomsk
@borisuperful, мне к счастью это не надо. т .к. я его использую для проработки velocity нот в драм партиях) Функционал в самый раз.
 

MsBAS

New Member
31 Янв 2017
8
2
3
38
Ребят помогите! Квантизация не выравнивает миди партию после записи через gen_Retrospective Record (MIDI).in (она как бы визуально квантует, но при зумировании ноты стоят не по сетке), после записи через обычный rec вся квантизация происходит как надо. Проверял на двух машинах результат один и то же.
 
Последнее редактирование:

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.152
113
Подскажите, есть ли альтернатива скрипту Script: mpl_Warp grid to selected item stretch markers.lua ? А то как-то через раз работает.
 

riko

Well-Known Member
27 Авг 2007
786
546
93
Подскажите, установил этот скрипт для артикуляций, , скрипт открыл, а дальше мозг отказывается понимать, как настроить под любую библиотеку в контакте. Английский не знаю, разраб показал как клёво он отстроил всё, но с нуля не показал создание реабанка.Может кто то использует этот скрипт, нужна помощь, в понимание его работы.)
 

dmitryga

Active Member
12 Июн 2008
238
114
43
@riko, в папке с скриптом есть файл - Data/Reaticulate.reabank
туда заполняем артикуляции для вашей библиотеки.

пример:
Код:
//! g="Orchestral Tools" n="Berlin Brass"
Bank 50 1 Berlin Brass
//! c=long i=note-whole o=note:96
1 sustain
//! c=short i=spiccato o=note:98
42 spiccato
//! c=short i=staccato o=note:99
40 staccato
разбор:
Код:
//! g="Orchestral Tools" n="Berlin Brass"
думаю тут вся понятно
Код:
Bank 50 1 Berlin Brass
это для банка и программы(MLB/LSB), первая цифра должна быть от 0 до 64, вторая от 0 до 127
Код:
//! c=long i=note-whole o=note:96
"с" это color, список дефолтных цветов у него на сайте, "i" -иконка, ну и номер ноты для кейсвича в контакте
Код:
1 sustain
название артикуляции и её номер, я пишу такой же как в заводских банках
 
  • Like
Реакции: riko

riko

Well-Known Member
27 Авг 2007
786
546
93
Отлично. Спасибо за подробное описание!
 

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.152
113
Сможет ли кто-то сделать простой скрипт, на новом API, который бы перемещал трек в конец? Причем нужно учесть, что выделенный трек может быть перентом вместе с чилдренами, и если в конце списка треков чилдрен трек с границей окончания папки, то все должно работать корректно и трек не должен переместиться в чилдрены.
Потом хотелось бы вариацию на том же новом API - перемещение к выделенному треку. Создания папки из выделенных треков в рандомном порядке, где также нужно перемещение - это вообще идеал
 

Archie's

Well-Known Member
24 Окт 2017
1.936
1.296
113
Сможет ли кто-то сделать простой скрипт, на новом API, который бы перемещал трек в конец? Причем нужно учесть, что выделенный трек может быть перентом вместе с чилдренами, и если в конце списка треков чилдрен трек с границей окончания папки, то все должно работать корректно и трек не должен переместиться в чилдрены.
PHP:
    ------------------------------------------------------------------------------
    local function No_Undo()end; local function no_undo() reaper.defer(No_Undo)end
    ------------------------------------------------------------------------------
 
 
    local CountSelTrack = reaper.CountSelectedTracks(0)
    if CountSelTrack == 0 then no_undo() return end
 
    local CountTrack = reaper.CountTracks(0)
    reaper.ReorderSelectedTracks(CountTrack , 0)
 
    no_undo()

Потом хотелось бы вариацию на том же новом API - перемещение к выделенному треку.
Это как? перемещение чего?

Создания папки из выделенных треков в рандомном порядке, где также нужно перемещение - это вообще идеал
Это давно есть и без этого Api
PHP:
   -- Make folder of selected tracks scattered the project
   -- Сделать папку из выбранных треков, разбросанных по проекту


    ------------------------------------------------------------------------------
    local function No_Undo()end; local function no_undo() reaper.defer(No_Undo)end
    ------------------------------------------------------------------------------
   
 
 
    local OnCom = reaper.Main_OnCommand
    local sws   = reaper.NamedCommandLookup
    local Undo  = 'Make folder of selected tracks scattered the project'
   
    if not reaper.GetSelectedTrack(0,0) then no_undo() return end
 

    reaper.Undo_BeginBlock(); reaper.PreventUIRefresh(1)
 
 
    reaper.SelectAllMediaItems(0,0)
 
 
    reaper.InsertTrackAtIndex( 0, true )
 
    local first_sel_track = reaper.GetSelectedTrack(0,0)
    local numb = reaper.GetMediaTrackInfo_Value(first_sel_track,'IP_TRACKNUMBER')
 
    OnCom(sws("_S&M_CUTSNDRCV1"),0) --Cut selected tracks (with routing)
 
    local track = reaper.GetTrack(0,numb-2)
    reaper.SetMediaTrackInfo_Value(track,'I_SELECTED',1)
 
    OnCom(sws("_S&M_PASTSNDRCV1"),0) --Paste tracks (with routing) or items
 
    local first_track = reaper.GetTrack(0,0)
    reaper.DeleteTrack(first_track)
 
 
    reaper.InsertTrackAtIndex( numb-2, true )
    local track = reaper.GetTrack(0,numb-2)
    reaper.SetMediaTrackInfo_Value(track,'I_SELECTED',1) 
 
 
    local count_sel_track = reaper.CountSelectedTracks(0)
    local sel_track_first = reaper.GetSelectedTrack(0,0)
    local sel_track_last = reaper.GetSelectedTrack(0,count_sel_track-1)
    reaper.SetMediaTrackInfo_Value(sel_track_first,'I_FOLDERDEPTH',1)
    reaper.SetMediaTrackInfo_Value(sel_track_last,'I_FOLDERDEPTH',-1)
 

    reaper.PreventUIRefresh(-1)
    --OnCom(40737,0) -- Set automatic record-arm when track selected
    local TrackName = reaper.GetSelectedTrack(0,0)
    reaper.GetSetMediaTrackInfo_String(TrackName,'P_NAME','Folder',1)
    OnCom(40696,0)--Track: Rename last touched track
 
    reaper.Undo_EndBlock(Undo,1)
или принципеально нужно на этом Api?
 
Последнее редактирование:
  • Like
Реакции: borisuperful

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.152
113
Это как? перемещение чего?
Перемещение трека/треков к последнему выделенному треку из группы треков или просто к одному выделенному треку
UPD: хотя взаимоисключение вроде как получается. Даже не знаю, как тут скорректировать
или принципеально нужно на этом Api?
Да, на старом API я уже пользуюсь. Недостаток везде один - наличие тяжелых плагинов замедляет процесс cut/past
 
Последнее редактирование:

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.152
113
@Aleksandr Oleynik, ну типа сымитировать cut/past, но методом нового API. По всей вероятности нужен скрипт из двух действий или два скрипта. Сначала он должен запомнить выделенные треки, первый скрипт. Потом второй скрипт - выдляешь какой-то трек, и предыдущие треки переместились, но не вырезались и вставились (как по старинке)
 

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.152
113
Еще хотелось бы скрипт, для создания айтемов, способом, как в Studio One. Скрипт назначается на двойной клик в разделе "Track", то есть клик по пустому месту айтемов
В данный момент пока пользуюсь кастомом, "пропущенный" через Lua, выполняющий ID экшна, что помогает при графических мельканиях. Но если я начинаю добавлять больше условий, то мелькания вроде все равно появляются.
Код:
SWS/BR: Save edit cursor position, slot 01
View: Move edit cursor to mouse cursor (no snapping)
Move edit cursor to start of current measure
Go to start of time selection
Insert new MIDI item...
Script: spk77_Rename items to track name.eel
Item edit: Move position of item to edit cursor
Time selection: Remove time selection
SWS/BR: Restore edit cursor position, slot 01
Так он работает:
2018-05-31_18-56-52.gif

Кратко о работе:
1) Простой двойной клик без time selection - создается айтем длиной в один такт, с привязкой к началу такта
2) Двойной клик с time selection - создается айтем в пределах time selection
3) Учитывается имя трека
 

CerberPic

Member
17 Фев 2017
70
22
8
35
@borisuperful, так?
PHP:
local undo = "Insert new MIDI item"
local tr, retval, name, m_pos, qn_st, qn_end, ts_st, ts_end

function qntime(qn) local num = reaper.TimeMap2_QNToTime(0, qn) return num end

function timesel(bool)
    local ts_st, ts_end = reaper.GetSet_LoopTimeRange(bool, false, 0, 0, false)
    return ts_st, ts_end
end

function insert(st_p, end_p)
    local item = reaper.CreateNewMIDIItemInProj(tr, st_p, end_p, false)
    reaper.GetSetMediaItemTakeInfo_String(reaper.GetActiveTake(item), 'P_NAME', name, true)
    reaper.SetMediaItemInfo_Value(item, 'B_LOOPSRC', 0)
    reaper.SetMediaItemSelected(item, true)
end

reaper.BR_GetMouseCursorContext()
tr = reaper.BR_GetMouseCursorContext_Track()
if not tr then return end
reaper.Undo_BeginBlock()
reaper.PreventUIRefresh(-1)
retval, name = reaper.GetSetMediaTrackInfo_String(tr, 'P_NAME', '', false)
m_pos = reaper.BR_GetMouseCursorContext_Position()
retval, qn_st, qn_end = reaper.TimeMap_QNToMeasures(0, reaper.TimeMap_timeToQN(m_pos))
ts_st, ts_end = timesel(false)
if ts_st ~= ts_end then insert(ts_st, ts_end) timesel(true)
    else local msr_st, msr_end = qntime(qn_st), qntime(qn_end) insert(msr_st, msr_end)
end
reaper.PreventUIRefresh(1)
reaper.Undo_EndBlock(undo, -1)
 
Последнее редактирование:

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.152
113
@CerberPic, все супер, только удобней, если бы айтем был выделен после создания) И еще он становится лупированным, это тоже не нужно
 

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.152
113
@CerberPic, странно, какая-то задержка при выделении чувствуется. Если создать кастом где вставить экшн Item: Select item under mouse cursor, то быстрее выделяется, при этом иногда не выделяется :( Короче это конечно придирки, но странно :) Лучше тогда такой вариант - как было, только без лупа :) либо оптимайз
 
Последнее редактирование:

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.152
113
Собсно основной Lua, через который я пропускаю кастомы и работает с командой reaper.PreventUIRefresh(), которая убирает мерцание
 

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