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

  • Автор темы Автор темы drzhnn
  • Дата начала Дата начала
Подскажите по скрипту: me2beats_Create folder from selected tracks (+rename folder) 2.lua.
Обнаружил такую проблему: когда треки идут друг за другом, папка создаётся без проблем, но если надо создать папку для трека 1, 2, 3, 5, 7, то Рипер закрывается с ошибкой.
Проверял на старых проектах.
Если создавать проект с нуля, то всё работает.
Win 8.1, Reaper 5.70 (portable)
 
Подскажите по скрипту: me2beats_Create folder from selected tracks (+rename folder) 2.lua
Проблему нужно искать в проекте. Точнее проблема то в скрипте, но именно конкретный проект может вызывать такую работу скрипта.
Если опишите проект, то возможно мне удастся повторить краш
 

Вложения

  • 2018-02-13_23-29-27.gif
    2018-02-13_23-29-27.gif
    1,3 MB · Просмотры: 252
@borisuperful, сделал чистый проект с Коntakt и Stylus RMX.
Один канал Kontakt перетащил в Stylus и наоборот, применил скрипт, проект вылетел с ошибкой.
Сейчас попробовал разные инструменты, получается проблемы есть только у многоканальных инструментов (Kontakt, Trilian, Stylus RMX).
Если все идут друг за другом, всё нормально, если каналы перемешены, тогда ошибка.
Как то так.
 
Последнее редактирование:
me2beats нужно исправить секцию чанков, взять её у Жени - он в ней исправил ошибки самих разработчиков Рипера и на оф форуме это подтвердили.
Но me2beats я уже очень давно на форуме не видел.
 
Редакторов вообще-то полно и так. Тем более, можно в Рипере легко назначить любой.
Но было по крайней мере несколько причин сделать свой.
1)Моментально открывается, моментально, прямо на ходу, переключается между исходниками.
2)Привязка к текущему проекту, ко времени и к сетке проекта, прослушка, навигация в рамках проекта, а не отдельно.
Это очень удобно.
3)Можно добавлять любой функционал.
-----------
Есть еще одна причина, самая важная. И к редактору это не относится. Редактировать исходник - это конкретная ситуация, довольно редкая. Изначально интересовало другое.
Я полностью привязался к айтему и тейку по времени самого айтема, тейка, исходника, к отображению формы волны в Gui, и ко времени проекта. Причем, посчитав сетку во всех диапазонах, свинг и таймлайн.
С учетом все позиций, оффсетов, плейрейтов, лупов и прочего.
Достаточно сложно, но несколько ф-й конвертации одного времени в другое и в позицию в Gui - все срослось идеально. Абсолютно.
SE demo1.gif

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


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

И ещё вопрос - а глобальные темпо маркеры он учитывает?
 
И ещё вопрос - а глобальные темпо маркеры он учитывает?
Да, любые смены темпа и размера, позиций, точек оффсет и старт - короче, все, кроме стретч.
-----------
Там на демке не видно, кстати, как сетка посчитана - очень интересная история.
Рипер по разному считает сетку и тайм-лайн.
По сетке есть косяк у кокосов(или фишка, не знаю) - у нас ведь можно поставить размер 3/7, допустим, или 5/6( смех) - короче, нашел и посчитал один в один, именно матеметически - не как в Sws, по известному.
 
Последнее редактирование:
Вот всякие произвольные смены темпа
We demo - tempo1.gif

Считается с макс. точностью. Это какие-то далекие знаки после запятой по времени.
В общем, на много порядков меньше, чем время между семплами.
 
Последнее редактирование:
@SoundExplosion,
Однако он почему-то перестает работать в режиме step pattern после того, как написанные ноты начнешь стретчить
В принципе этот баг можно обойти - поставить у новых образовавшихся по длине нот соответствующую сетку, чтобы они в нее влезали. И тут вроде бы не влияет сам факт стретчинга, что было бы странно. Скрипт не распознает ноты, если размер сетки превышает ее длину. Именно превышает, если сетка меньше длины ноты, то это не влияет

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

Вложения

  • 2018-02-16_01-39-10.gif
    2018-02-16_01-39-10.gif
    2,6 MB · Просмотры: 222
Последнее редактирование:
@borisuperful, мне к счастью это не надо. т .к. я его использую для проработки velocity нот в драм партиях) Функционал в самый раз.
 
Ребят помогите! Квантизация не выравнивает миди партию после записи через gen_Retrospective Record (MIDI).in (она как бы визуально квантует, но при зумировании ноты стоят не по сетке), после записи через обычный rec вся квантизация происходит как надо. Проверял на двух машинах результат один и то же.
 
Последнее редактирование:
Я ноты квантизую, но они криво квантизуются!
На скриншоте более понятно)
 

Вложения

  • с использованием gen_Retrospective Record.jpg
    с использованием gen_Retrospective Record.jpg
    132,6 KB · Просмотры: 170
  • с использованием стандартной записи.jpg
    с использованием стандартной записи.jpg
    115,5 KB · Просмотры: 163
Подскажите, есть ли альтернатива скрипту Script: mpl_Warp grid to selected item stretch markers.lua ? А то как-то через раз работает.
 
Подскажите, установил этот скрипт для артикуляций, , скрипт открыл, а дальше мозг отказывается понимать, как настроить под любую библиотеку в контакте. Английский не знаю, разраб показал как клёво он отстроил всё, но с нуля не показал создание реабанка.Может кто то использует этот скрипт, нужна помощь, в понимание его работы.)
 
@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
Отлично. Спасибо за подробное описание!
 
Сможет ли кто-то сделать простой скрипт, на новом API, который бы перемещал трек в конец? Причем нужно учесть, что выделенный трек может быть перентом вместе с чилдренами, и если в конце списка треков чилдрен трек с границей окончания папки, то все должно работать корректно и трек не должен переместиться в чилдрены.
Потом хотелось бы вариацию на том же новом API - перемещение к выделенному треку. Создания папки из выделенных треков в рандомном порядке, где также нужно перемещение - это вообще идеал
 
Сможет ли кто-то сделать простой скрипт, на новом 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
Это как? перемещение чего?
Перемещение трека/треков к последнему выделенному треку из группы треков или просто к одному выделенному треку
UPD: хотя взаимоисключение вроде как получается. Даже не знаю, как тут скорректировать
или принципеально нужно на этом Api?
Да, на старом API я уже пользуюсь. Недостаток везде один - наличие тяжелых плагинов замедляет процесс cut/past
 
Последнее редактирование:
@Aleksandr Oleynik, ну типа сымитировать cut/past, но методом нового API. По всей вероятности нужен скрипт из двух действий или два скрипта. Сначала он должен запомнить выделенные треки, первый скрипт. Потом второй скрипт - выдляешь какой-то трек, и предыдущие треки переместились, но не вырезались и вставились (как по старинке)
 
Еще хотелось бы скрипт, для создания айтемов, способом, как в 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) Учитывается имя трека
 
@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)
 
Последнее редактирование:
@CerberPic, все супер, только удобней, если бы айтем был выделен после создания) И еще он становится лупированным, это тоже не нужно
 
@CerberPic, странно, какая-то задержка при выделении чувствуется. Если создать кастом где вставить экшн Item: Select item under mouse cursor, то быстрее выделяется, при этом иногда не выделяется :( Короче это конечно придирки, но странно :) Лучше тогда такой вариант - как было, только без лупа :) либо оптимайз
 
Последнее редактирование:
Собсно основной Lua, через который я пропускаю кастомы и работает с командой reaper.PreventUIRefresh(), которая убирает мерцание
 

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