Помогите создать экшн / кастом экшн / скрипт (1 онлайн

Furqat

Well-Known Member
27 Окт 2012
728
289
63
Tashkent
Наиграл партию миди, запустил RetroRecMidi(EUGEN27771) скрипт.
Теперь, подскажите возможно ли создать вот такой кастом-экшн(или скрипт):
Move selected item(s) edges(left,right) to grid...???(название придумал сам)
Вот гифка:
ITEM EDGES TO GRID.gif
 

Furqat

Well-Known Member
27 Окт 2012
728
289
63
Tashkent
@Furqat, скрипт подгоняет концы выделенных айтемов к ближайшим делениям сетки. Содержимое остается на месте
Спасибо огромное.
А можно ли RetroRec(EUGEN27771) скрипт и Ваш скрипт воткнуть в один кастом экшн?
Было бы суперудобно.
Пока сам не могу проверить, электричество отключили)))
 
  • Like
Реакции: Slick

Furqat

Well-Known Member
27 Окт 2012
728
289
63
Tashkent
@lil-burn, вот это крутяк!!!
Только что проверил.
Ваш скрипт и на аудио сигналах работает.
============================
Упс. На аудио сигналах иногда работает иногда нет.
С чем это связано?
 
Последнее редактирование:

lil-burn

Well-Known Member
15 Авг 2012
903
638
93
Екатеринбург
@Furqat, может быть такая ситуация, когда айтем меньше половины деления сетки, а т.к. скрипт подгоняет к ближайшим делениям, то ничего не происходит, иначе длина айтема была бы = 0. Можно сделать конкретно для этого случая исключение, можно сделать скрипт, который всегда будет подгонять в сторону увеличения длины.

@Al Brazy, скоро будет
 
  • Like
Реакции: Furqat

Furqat

Well-Known Member
27 Окт 2012
728
289
63
Tashkent
@Furqat, может быть такая ситуация, когда айтем меньше половины деления сетки, а т.к. скрипт подгоняет к ближайшим делениям, то ничего не происходит, иначе длина айтема была бы = 0. Можно сделать конкретно для этого случая исключение, можно сделать скрипт, который всегда будет подгонять в сторону увеличения длины.

@Al Brazy, скоро будет
Будем ждать тогда)))
 

lil-burn

Well-Known Member
15 Авг 2012
903
638
93
Екатеринбург

D-Forest

Active Member
23 Ноя 2013
328
229
43
Курск
Подскажите, можно ли при помощи SWS команд или как-нибудь еще поместить активное "float" окно плагина в центр экрана?
[DOUBLEPOST=1457182085,1457181495][/DOUBLEPOST]И еще вопрос вопросов: можно ли как-то сделать так чтобы по нажатию горячей клавиши, например Alt+F1 запускался скрипт который активирует набор горячих клавиш, а при повторном нажатии Alt+F1 этот набор горячих клавиш отключался?

Например. Биндим клавиши Q = Alt+F1, W = Alt+F2, и так далее а потом нажатием 1 хоткея включаем и отключаем эти привязки. То есть 1 нажатием превращаем обычную компьютерную клавиатуру в эдакую матрицу горячих клавиш на которой подвешены всякие действия (после чего подключаем 2 клавиатуру и наклеиваем на кнопки стикеры с обозначением действий, чтобы а) разгрузить интерфейс б) не запоминать 40-60-80 хоткеев но иметь быстрый доступ ко всему по нажатию Alt+F1)
 
Последнее редактирование:

lil-burn

Well-Known Member
15 Авг 2012
903
638
93
Екатеринбург
@D-Forest,

можно ли при помощи SWS команд или как-нибудь еще поместить активное "float" окно плагина в центр экрана?
Можно, если поставить мышь в центр экрана и создать кастом с участием одного из этих экшенов
upload_2016-3-8_0-54-20.png
Вроде, пока только так.

можно ли как-то сделать так чтобы по нажатию горячей клавиши, например Alt+F1 запускался скрипт который активирует набор горячих клавиш, а при повторном нажатии Alt+F1 этот набор горячих клавиш отключался?
Можно, но пока это реализуемо только с помощью правки, а точнее добавления строк у файла reaper-kb.ini, процесс достаточно трудоемкий, если интересно - в этом же топике, примерно на 10 страниц назад, ищите сообщение @Aleksandr Oleynik, это его идея.
 

abrokadabra2

Member
2 Дек 2014
85
16
8
temirtau
Всем привет нужэн скрипт . select pitch envelope . на итеме или тейке подскажите как её выделить
 

lil-burn

Well-Known Member
15 Авг 2012
903
638
93
Екатеринбург
@abrokadabra2, это скрипт от @EUGEN27771.
там нужно поменять 2 строки (можно вообще только 5-ю, заменить 'Volume' на 'Pitch')
в итоге получится:
Код:
//==Get Act Take from 1-st Item==//
Item_ID=GetSelectedMediaItem(0,0);
Take_ID=GetActiveTake(Item_ID);
//==Get Basic Envelopes by Name==//
Env_Pitch_ID=GetTakeEnvelopeByName(Take_ID, "Pitch");SetCursorContext(2, Env_Pitch_ID);
//Env_Pan_ID=GetTakeEnvelopeByName(Take_ID, "Pan");SetCursorContext(2, Env_Pan_ID);
//Env_Mute_ID=GetTakeEnvelopeByName(Take_ID, "Mute");SetCursorContext(2, Env_Mute_ID);
UpdateArrange();
 

abrokadabra2

Member
2 Дек 2014
85
16
8
temirtau
burn . это eеl или lua
[DOUBLEPOST=1457432012,1457431391][/DOUBLEPOST]Burn спасибо всё работает буду екшен мутить
 

Furqat

Well-Known Member
27 Окт 2012
728
289
63
Tashkent
Вот опять я на счет скриптов RetroRec(EUGEN27771).
Как настроить скрытые треки (с JS-ками) так, чтобы rec arm для них никогда не отключался.
Может есть экшн какой, чтобы постоянно включал rec arm перед RetroRec?
Для чего это нужно?!?!?!
У меня основные операции делаются с ctrl, так настроил маус модифаер удобным.
И часто нажимаю на rec arm с ctrl, когда быстро работаю.
А эта зараза(привычка) отключает rec arm в скрытых треках RetroRec-а.
Надеюсь обьяснил.
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
@Furqat, залочить трек с включенным rec-arm нельзя, вернее можно(через чанк), но если Рипер не дает возможности сделать это своими обычными средствами, то,видимо, на то есть причины.
Но,можете попробовать
PHP:
--Lock RetroRec Tracks--
---------------------------
function Find_JS_Track(Name)
local track,retval,cur_name
for i = 1,reaper.CountTracks(0) do
  track = reaper.GetTrack(0, i-1)
  retval,cur_name = reaper.GetSetMediaTrackInfo_String(track, "P_NAME", "", false)
  if cur_name == Name then return track end
end 
end
---------------------------
function Lock_Track(track)
local retval,tr_chunk,find_str
  --Change Setting for track--
  reaper.SetMediaTrackInfo_Value(track, "I_RECARM",1)--RECARM
  reaper.SetMediaTrackInfo_Value(track, "I_RECMON",1)--RECMON
  -----
  retval,tr_chunk = reaper.GetTrackStateChunk(track, "", false)
   --reaper.ShowConsoleMsg(tr_chunk)
     ----Change chunk for track--
     find_str = string.match(tr_chunk, "PEAKCOL"  )
     tr_chunk = string.gsub(tr_chunk, find_str, "LOCK 1".."\n"..find_str)
     reaper.SetTrackStateChunk(track, tr_chunk, true)
     --reaper.ShowConsoleMsg(tr_chunk)
end
---------------------------
---------------------------
reaper.Undo_BeginBlock()
  track = Find_JS_Track("ForRetroRec(Audio) v20151213(b1)")
    if track then Lock_Track(track) end
  track = Find_JS_Track("ForRetroRec(MIDI) v20151213")
    if track then Lock_Track(track) end
reaper.Undo_EndBlock("~Lock RetroRec Tracks~", -1)
 
Последнее редактирование:
  • Like
Реакции: Furqat

Furqat

Well-Known Member
27 Окт 2012
728
289
63
Tashkent
@Furqat, залочить трек с включенным rec-arm нельзя, вернее можно(через чанк), но если Рипер не дает возможности сделать это своими обычными средствами, то,видимо, на то есть причины.
Но,можете попробовать
PHP:
--Lock RetroRec Tracks--
---------------------------
function Find_JS_Track(Name)
local track,retval,cur_name
for i = 1,reaper.CountTracks(0) do
  track = reaper.GetTrack(0, i-1)
  retval,cur_name = reaper.GetSetMediaTrackInfo_String(track, "P_NAME", "", false)
  if cur_name == Name then return track end
end
end
---------------------------
function Lock_Track(track)
local retval,tr_chunk,find_str
  --Change Setting for track--
  reaper.SetMediaTrackInfo_Value(track, "I_RECARM",1)--RECARM
  reaper.SetMediaTrackInfo_Value(track, "I_RECMON",1)--RECMON
  -----
  retval,tr_chunk = reaper.GetTrackStateChunk(track, "", false)
   --reaper.ShowConsoleMsg(tr_chunk)
     ----Change chunk for track--
     find_str = string.match(tr_chunk, "PEAKCOL"  )
     tr_chunk = string.gsub(tr_chunk, find_str, "LOCK 1".."\n"..find_str)
     reaper.SetTrackStateChunk(track, tr_chunk, true)
     --reaper.ShowConsoleMsg(tr_chunk)
end
---------------------------
---------------------------
reaper.Undo_BeginBlock()
  track = Find_JS_Track("ForRetroRec(Audio) v20151213(b1)")
    if track then Lock_Track(track) end
  track = Find_JS_Track("ForRetroRec(MIDI) v20151213")
    if track then Lock_Track(track) end
reaper.Undo_EndBlock("~Lock RetroRec Tracks~", -1)
А это .eel скрипт?
==================
Проверил только что, .lua работает))))))))
 
Последнее редактирование:

kentforth

Active Member
25 Ноя 2011
444
113
43
37
Подскажите как сделать экшн. Я записал миди партию из нескольких нот в главном окне. И хочу чтобы эти ноты переместились на октаву вверх или низ. Чтобы каждый раз не заходить в окно midi editor выделять ноты и их перемещать, а всё делать в главном окне. Простой transpose айтема не надо, надо видеть как сами ноты изменяют положение. Как это сделать?
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
@@Michael, имеется в виду,что есть еще транспонирование без визуального отображения(типа, как в свойствах айтема),ноты остаются на месте, но звучат выше или ниже.
П.С. Или речь о FFT ? Что-то я уже соображаю туго. Просто находится макс. амплитуда на определенной частоте. Размер окна нужен большой для хорошего разрешения по частоте,поэтому,по идее, надо делать часто перекрывающиеся окна,а края заполнять нулями(вроде так должно работать лучше). А так получаются погрешности по времени и по частоте немного.
============
[DOUBLEPOST=1457790646,1457788556][/DOUBLEPOST]@@Michael, если есть пару минут свободных,подскажи,как blit работает. В общем,например,я получаю форму волны,по блокам, и нужно перерисовать только один последний блок,а уже нарисованное сдвинуть на масштаб,не перерисовывая.
1234.gif
Сейчас это без толку жрет ресурсы.
Ну или другие случаи.
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
EUGEN27771, а, я думал что-то посложнее (сам смотрю в сторону comb-filters + автокорелляции спектра).

Blit примерно так работает:
Код:
      if update_gfx then -- cначала определяем триггер, по которому в какой-либо из буферов будет писаться графика
        gfx.dest = 1 -- номер буфера 1..32 (кажется)
        gfx.setimgdim(1, -1, -1) -- этим я сбрасываю графику внутри этого буфера, иначе она будет писаться поверх того, что уже есть
        gfx.setimgdim(1, w, h) -- определяем размеры записываемой графики
        gfx.a = 1
        gfx.rect(0,0, w,h) -- рисуем что требуется
      end


gfx.dest = -1  -- -1 - это основной слой
gfx.a = 1 -- альфа для буферов
gfx.blit(1, 1, 0, -- этим вытаскиваем первый буфер и сразу его переворачиваем/обрезаем/сжимаем при необходимости
          0,0,w,h,
          0,0,w,h,0,0)
 
  • Like
Реакции: Archie's и EUGEN27771

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
@@Michael,честно говоря, меня уже от всяких фильтров тошнит, с учетом, что английский я слабо понимаю, а вся инфа на нем.
И математики куча, мне бы лет на 10 раньше это все, а сейчас еще математику учить - это слишком, только какие-то книги для дебилов, и с картинками.
Но саму методику я находил и на русском, там до 1/6 Гц точность, при соблюдении всех условий.
Спасибо за инфу по blit!
=====
Все, работает,еще раз спасибо!!!
В общем,проблема была в gfx.setimgdim,насколько я понял,это как-бы init для буфера, теперь есть простор :)
 
Последнее редактирование:

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