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

PianoIst

Well-Known Member
19 Май 2010
4.101
4.154
113
29
Kirchberg, kreis Zwickau
soundcloud.com
А какое у него назначение?
основное — нарезка сэмплов для VSTi. А вообще там просто получается хорошая основа для того, чтобы собирать как конструктор нарезатор под любые задачи. В принципе, за вечер можно собрать нечто похожее на MK Slicer
 

sunsell

Well-Known Member
30 Авг 2017
1.891
1.065
113
mpl align takes не работает.
на новойсистеме. ставил только этот скрипт через reapack.
рипер v6.43, win 10 x63, sws 2.12.1
пробовал предыдущую версию скрипта.

211759
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва

PianoIst

Well-Known Member
19 Май 2010
4.101
4.154
113
29
Kirchberg, kreis Zwickau
soundcloud.com
у меня кое-что наклёвывается))

P.S. уже только после просмотра заметил баг с лишней половинкой в такте. Я думал, если длительность пересекает тактовую черту — lilypond её автоматически кромсает, ан нет: надо скриптом резать)
 

PianoIst

Well-Known Member
19 Май 2010
4.101
4.154
113
29
Kirchberg, kreis Zwickau
soundcloud.com
Рендер стемов

  • рендерит все регионы, согласно region render matrix
  • все эффекты, кроме инструментов переводит в offline. Из-за лимитации API, если больше двух инструментов на треке — останется только первый
  • сбрасывает громкость и панораму к нолям
  • исключает из матрицы все треки, которые замутированы, или не содержат итемов. Учитывает при этом все посылы на трек (допустим, если на миди-треке, который подключён к инструмент-треку есть итемы)
  • после рендера возвращает всё назад
Для работы нужен reapy_boost

Python:
from typing import Any, Dict, List, Optional
import reapy_boost as rpr
from pprint import pprint


def not_empty(track: rpr.Track, region: rpr.Region) -> bool:
    if track.is_muted:
        return False
    for item in track.items:
        if region.start > item.position > region.end:
            return True
        if region.end > (item.position + item.length) > region.start:
            return True
    for send in track.receives:
        if not_empty(send.source_track, region):
            return True
    return False


def get_fx_states(track: rpr.Track) -> List[bool]:
    state = []
    for fx in track.fxs:
        state.append(fx.is_online)
        if fx != track.instrument:
            fx.is_online = False
    return state


def set_fx_states(track: rpr.Track, states: List[bool]) -> None:
    for fx, state in zip(track.fxs, states):
        if fx != track.instrument:
            fx.is_online = state


def get_track_state(track: rpr.Track) -> Dict[str, Any]:
    state = {}
    state['vol'] = track.get_info_value('D_VOL')
    state['pan'] = track.get_info_value('D_PAN')
    state['width'] = track.get_info_value('D_WIDTH')
    state['panmode'] = track.get_info_value('I_PANMODE')
    state['panlaw'] = track.get_info_value('D_PANLAW')
    state['FX'] = get_fx_states(track)
    track.set_info_value('D_VOL', 1)
    track.set_info_value('I_PANMODE', 3)
    track.set_info_value('D_PANLAW', -1)
    track.set_info_value('D_PAN', 0)
    track.set_info_value('D_WIDTH', 1)
    return state


def set_track_state(track: rpr.Track, state: Dict[str, Any]) -> None:
    track.set_info_value('D_VOL', state['vol'])
    track.set_info_value('I_PANMODE', state['panmode'])
    track.set_info_value('D_PAN', state['pan'])
    track.set_info_value('D_PANLAW', state['panlaw'])
    track.set_info_value('D_WIDTH', state['width'])
    set_fx_states(track, state['FX'])


def region_state(
    region: rpr.Region,
    stem_states: Optional[Dict[str, Any]] = None
) -> Dict[str, Any]:
    stems = region.rendered_tracks
    rendered_stems: List[rpr.Track] = []
    for stem in stems:
        if not_empty(stem, region):
            rendered_stems.append(stem)
        else:
            region.remove_rendered_track(stem)
    if stem_states is None:
        stem_states = {}
        for stem in rendered_stems:
            stem_states[stem.GUID] = get_track_state(stem)
        stem_states['rendered_tracks'] = stems
        return stem_states
    region.add_rendered_tracks(stem_states['rendered_tracks'])
    del stem_states['rendered_tracks']
    for stem_guid in stem_states:
        stem = rpr.Track.from_GUID(stem_guid)
        set_track_state(stem, stem_states[stem_guid])
    return {}


# =================

with rpr.inside_reaper():
    pr = rpr.Project()
    with rpr.undo_block('render stems'):
        region_states = {}
        for region in pr.regions:
            state = region_state(region)
            region_states[region.index] = state
        # render project
        rpr.perform_action(41824)
        for region in pr.regions:
            region_state(region, region_states[region.index])
 
Последнее редактирование:
  • Like
Реакции: Antonio и walks
25 Июл 2017
102
23
18
40
@PianoIst
Классно! Спаисбо, очень нужный скрипт.
Вот, жалуется на проблему синтаксиса. Кстати, вопрос - можно ли в Archie - Render Stems Template "вписать" твой скрипт с регион рендер матрикс. И ещё вопрос - как инсталировать reapy boost. Там есть мануал, но я не очень понял. Надо ли скачать директорию, если да, то куда её положить, прежде чем вводить команду в терминале. И что такое pip - нужно ли это, чтоб установить.
 

Вложения

Elijah K

Well-Known Member
25 Дек 2017
1.556
1.093
113
43
Тамбов
В Visual Mixer от @Michael при перемещении по слотам возникает такая надпись 123.jpg и микшер закрывается. Как это победить?
Я так понимаю, что происходит сбрасывание выделения треков, а это обязательное условие. Не пойму, баг это или что?
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
В Visual Mixer от @Michael при перемещении по слотам возникает такая надпись Посмотреть вложение 217933 и микшер закрывается. Как это победить?
Я так понимаю, что происходит сбрасывание выделения треков, а это обязательное условие. Не пойму, баг это или что?
Баг, гляну после выходных. Лучше писать в телеге или на форум. Рандомно спрашивать в темах - не лучшая затея.
 
  • Like
Реакции: Elijah K

Mateush1982

Active Member
5 Авг 2009
433
197
43
42
Krasnoyarskiy kray
Всем доброго дня! Прошу прощения если не сюда вопросик... Вроде поискал по форуму ответа на нашел... Есть ли такой скрипт. допустим наиграл гармонию, или вставил midi файл гармонический.. а скрипт продетектировал и создал бы регионы с обозначением аккордов данной прогрессии? Так что бы для удобства написания аранжировки.. Заранее спасибо за ответы.
 

Elijah K

Well-Known Member
25 Дек 2017
1.556
1.093
113
43
Тамбов
Всем доброго дня! Прошу прощения если не сюда вопросик... Вроде поискал по форуму ответа на нашел... Есть ли такой скрипт. допустим наиграл гармонию, или вставил midi файл гармонический.. а скрипт продетектировал и создал бы регионы с обозначением аккордов данной прогрессии? Так что бы для удобства написания аранжировки.. Заранее спасибо за ответы.
Нет такого
 

TashKey

New Member
10 Фев 2009
22
8
3
Ребята, напомните, пожалуйста - кажется, где-то был скрипт (или custom action), который в выбранных айтемах берет активные тэйки и переносит их на новый трек. Возможно, склеивает. Заранее спасибо.
 

TashKey

New Member
10 Фев 2009
22
8
3
Ну, сам и отвечу. :)
Такой Custom Action обнаружился, но у меня не пошел. Во-первых, нету у меня некоторых экшенов, хотя SWS свежий, во-вторых, не всё я там понял. Поэтому слепил свой. Корявенький, конечно, первенец, но работает и меня, в принципе, устраивает. Немного напрягает, что надо не забыть выделить не только айтемы, но и трек. Ну и Duplicate tracks как-то не кошерно, не на чистую дорожку, а со всеми потрохами... В общем, выделили айтемы с тейками и трек, запустили - получили на другой дорожке айтем, склеенный из активных тейков и нормализованый к -23 дБ LUFS. Это, конечно, по вкусу. ;)

Код:
Track: Duplicate tracks
Xenakios/SWS: Select previous tracks  
SWS: Unselect all items on selected track(s)
Take: Crop to active take in items
Item: Glue items
SWS/BR: Normalize loudness of selected items to -23 LUFS      
Item: Unselect (clear selection of) all items
218390
 
Последнее редактирование:
  • Like
Реакции: sve, lamamama и Nagor

mr.preacher

Member
15 Июл 2013
31
17
8
52
первоуральск
Здравствуйте друзья. Опишу свою хотелку\вопрос: Допустим, в плейбеке имеем ...цать регионов\песен с типичной формой (intro, verse, chorus и т.д. отмеченные соответствующими именами маркеров). Возможно ли создать скрипт, который будет считывать имя маркера текущего региона/песни? При этом должны игнорироваться одноименные маркеры других регионов\песен. Как это должно работать: закрепляем за клавишей "1" маркер с именем 1verse, за клавишей "2" маркер с именем 2verse и т.д. (например: поется третий припев, но вместо outro вокалист сигналит "1 verse", а затем "coda", оператор жмет клавишу "1" и после вступления первого куплета оператор жмет клавишу "7"= coda).
 

nounaim

Active Member
29 Авг 2010
284
52
28
Всем привет. Нашел скрипт для вертикального скрола треков, который прокручивает треки на один трек, и почему то у меня работает скрол только вниз, когда назначаю колесо мыши.
js_ReaScriptAPI установил.
Нашёл скрипт здесь - https://forums.cockos.com/showthread.php?t=269633

Вот сам скрипт:
Код:
function scroll_to_track(track)
  -- for original code (by spk77) see, https://forum.cockos.com/showpost.php?p=2226523&postcount=870
  local tcp_y = reaper.GetMediaTrackInfo_Value(track, "I_TCPY")
  local arrange = reaper.JS_Window_FindChildByID(reaper.GetMainHwnd(), 0x3E8)
  local ok, ar_vsb_position, ar_vsb_page, ar_vsb_min, ar_vsb_max, ar_vsb_trackPos = reaper.JS_Window_GetScrollInfo(arrange, "v")
  if ok then reaper.JS_Window_SetScrollPos(arrange, "v", tcp_y + ar_vsb_position) end
end

function ScrollToPreviousTrack()
  for i = reaper.CountTracks(0)-1,0,-1 do
    local tr = reaper.GetTrack(0,i)
    local tr_y = reaper.GetMediaTrackInfo_Value(tr, 'I_TCPY')
    if tr_y < 0 and reaper.IsTrackVisible(tr, false) then
      scroll_to_track(tr)
      break
    end
  end
end

function ScrollToNextTrack()
  for i = 0, reaper.CountTracks(0)-1 do
    local tr = reaper.GetTrack(0,i)
    local tr_y = reaper.GetMediaTrackInfo_Value(tr, 'I_TCPY')
    if tr_y > 0 and reaper.IsTrackVisible(tr, false) then
      scroll_to_track(tr)
      break
    end
  end
end

if not reaper.APIExists('JS_Window_SetScrollPos') then
  reaper.MB('js_ReaScriptAPI extension is required for this script.', 'Missing API', 0)
else -- call a scroll function,
   ScrollToNextTrack()
   --ScrollToPreviousTrack()
end
reaper.defer(function () end)
Подскажите пожалуйста -
1) Как заставить реагировать на прокрутку колеса мыши вверх?
2) Возможно ли модернизировать скрипт как то так ,чтоб он также реагировал на отображаемые треки автоматизации при прокрутке колеса?
Это было бы очень удобно.
А то сейчас он пролистывает сквозь треки автоматизации к следующему треку.
 
Последнее редактирование:

mitinglas

дМитрий Зайцев
  • Like
Реакции: Elijah K, Antonio и Landre

PianoIst

Well-Known Member
19 Май 2010
4.101
4.154
113
29
Kirchberg, kreis Zwickau
soundcloud.com
Вместо стандартной, достаточно ограниченной поддержки видео Reaper, пишу ему более-менее полноценный видеоредактор на основе ffmpeg.
Вот, наконец добился от него рендера!

По сравнению с обычным видеорежимом, мой автоматически добавляет кроссфейды. На этом пока преимущества заканчиваются.
Но вообще основная задача для него ‒ возможность быстро применять LUT на отрезки.

P.S. Как доберусь до более-менее приличной стадии ‒ настрою кросс-компиляцию, и будет доступен в dll/so/dlyb. Никакой сложной установки ffmpeg не надо. Достаточно, чтобы он запускался из командной строки.
 
Последнее редактирование:
  • Like
Реакции: incubator

PianoIst

Well-Known Member
19 Май 2010
4.101
4.154
113
29
Kirchberg, kreis Zwickau
soundcloud.com
получилось кросс-компилировать. Можно скачать и потыкать.
Заодно там же есть экшн, который нормализует все тейки
 
  • Like
Реакции: Trasher

Antonio

Well-Known Member
9 Ноя 2003
4.372
1.580
113
48
Алматы
По сравнению с обычным видеорежимом, мой автоматически добавляет кроссфейды.
Обычно кроссфейды не нужны, а в стандартном их легко получить с пресетом
245143


Имхо, не лучшее вложение ценного ресурса - времени. Чтобы превзойти "стандартную ограниченную поддержку видео в рипере" его уйдёт страшно представить сколько. Если нужны луты, то лучше осваивать резольв
 
  • Like
Реакции: PianoIst и truemanofan

PianoIst

Well-Known Member
19 Май 2010
4.101
4.154
113
29
Kirchberg, kreis Zwickau
soundcloud.com
@Antonio, resolve освоен, только телодвижений с ним много для простой нарезки музыкальных видео: туда видео сконвертируй, мультитреки залей; потом обратно мультитреки экспортируй, сведи; потом всё равно доставать ffmpeg, чтобы поменять аудио на микс. А ещё, чего доброго ‒ intro/outro приклеить ‒ опять resolve что ли открывать? Это как раз задача для ffmpeg. Мне уже очень давно хочется иметь какую-то обёртку над ffmpeg чуть более полноценную, чем avidemux, и чуть менее похожую на видеоредактор, чем OpenShot.

Я просто заметил, что мне гораздо легче в Resolve сделать цветокоррекцию на png, экспортировать LUT и не вылезать из рипера ;)

На самом деле я уже 80% основных задач сделал: интерфейс прикрутить, да фильтров добавить ‒ будет няшка. По удобству и возможностям будет как минимум на уровне OpenShot и т.п., чего и хочется добиться.
 

Trasher

Well-Known Member
12 Янв 2013
629
440
63
Товарищи скриптописатели/программисты/теоретики, сорри за оффтоп.Вопрос???? Есть ли у кого мысли как осуществить(любым, но желательно самым простым/наивным способом) , назовём условно, "псевдокомпиляцию/разбор/прогноз_возможных_вариаций_текста_в_теле, хотя бы в псевдокод" функции printf, а также конструкций loop/while. (яп C|EEL2). Залип капитально прям(eel2 реализацию смотрел ничерта не понял).
 

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