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

  • Автор темы Автор темы drzhnn
  • Дата начала Дата начала
Всем привет.
Нужно двигать тональность всего проекта до тех пор пока вокалист не скажет - вот, это то где мой голосовой диапазон будет работать хорошо.
Для этого пишу всю гармонию синтов через midi дорожки.
Каким скриптом выделять и двигать вверх/вниз все миди партии проекта?
Возможно на вопрос уже отвечать и я все прощелкать.
А как же барабасы? Если они в миди то их трогать нельзяяяяя!
 
@Maestro Sound, для ударных в минусовках использую подходящие петли, временно их хватает.
Можно конечно как говорит Slick миди выделять руками, обходя вавки но это не очень удобно.
В идеале было бы иметь два скрипта один из которых выделяет все миди и двигает на полтона вверх, другой тоже самое, но на полтона вниз.
 
В идеале было бы иметь два скрипта один из которых выделяет все миди и двигает на полтона вверх, другой тоже самое, но на полтона вниз.
Archie_Item; Pitch down one semitone all midi items(all midi take).lua / Raw
Archie_Item; Pitch up one semitone all midi items(all midi take) .lua / Raw
 
  • Like
Реакции: Ga_rY
обходя вавки но это не очень удобно
почему обходя то? ) обходя материал, который не нуждается в изменении питча (эффекты, барабаны). но бывает куча материала в wav, который надо так же транспонировать.
 
Item properties: Pitch item up one semitone
Item properties: Pitch item down one semitone
Вот эти транспонируют и миди и аудио
 
@Archchie, спасибо огроменное, это то что надо.
@Slick, согласен, все правильно у Вас более широкий вариант, но вот именно в моем узком случае нужно менять тональность только миди.
 
@Ga_rY, я хотел без изменения питча айтема сделать, вот
Код:
local count_items = reaper.CountMediaItems(0)
if count_items ~= 0 then
local retval, set_value = reaper.GetUserInputs( "Transpose all MIDI items", 1, "Set value", 0)
  if retval then
    reaper.Undo_BeginBlock(1)
    reaper.PreventUIRefresh(1)
    for i = 0, count_items-1 do
      local get_item = reaper.GetMediaItem(0, i)
      local count_takes = reaper.CountTakes(get_item)
      for i = 0, count_takes-1 do
        local get_take = reaper.GetTake(get_item, i)
        local get_midi = reaper.TakeIsMIDI(get_take)
        if get_midi == true then
          local _, notes = reaper.MIDI_CountEvts(get_take)
          for i = 0, notes-1 do
            local retval, sel, muted, startppq, endppq, chan, pitch, vel = reaper.MIDI_GetNote(get_take, i)
            reaper.MIDI_SetNote(get_take, i, sel, muted, startppq, endppq, chan, pitch + set_value, vel)
          end
        end
      end
      reaper.UpdateItemInProject(get_item)
    end
    reaper.Undo_EndBlock("Transpose all MIDI items", -1)
    reaper.PreventUIRefresh(-1)
  end
end
 
Последнее редактирование:
@Ga_rY, да, именно так. То есть на уровне источника. Еще он с окном где вводишь сколько полутонов
 
@borisuperful, сейчас попробовал этот скрипт который постом выше.
Получается следующий глюк: когда вводишь значения 1-2 вроде все нормально, а когда 3 и больше, начинается микроглюки в партии.
Первый скриншот до, второй после того как подняли на 3.
 

Вложения

  • Screenshot_1.png
    Screenshot_1.png
    67,4 KB · Просмотры: 226
  • Screenshot_2.png
    Screenshot_2.png
    70,6 KB · Просмотры: 222
@Ga_rY, наверное бажит API. Это будет еще и по разному на разных нотах
З.Ы, Кажется причина в привязке к сетке
 
@Ga_rY, Если надо что бы двигались ноты, то вот
Archie_Item; Move all notes in all midi items one semitone up.lua (Raw)
Archie_Item; Move all notes in all midi items one semitone down.lua (Raw)
Archie_Item; Move all notes in all midi items in semitones(User Input).lua (Raw)
-------------------------------------------------------------------------------------------------
наверное бажит API.
Нет, это не апи бажит.
Во первых при удалении и при перемещении надо тщательно продумывать циклы, так как меняется порядок перемещаемого или удаляемого, а в нотах еще и нет своего собственного идентификатора и нумерация происходит по нумерации.
То есть пример на четырех нотах: Когда цикл от одного до кол-во нот (ноты стоят в одной позиции и от квантованы, а это означает, что первая нота- это нижняя, а последняя верхняя),так вот, если перемещение происходит в верх, то вот что произойдет, когда переместится первая нота в верх, то тут же вторая нота превратится в первую, а при второй итерации надо получить вторую ноту и тут мы и получим вторую ноту, тем самым мы пропустили уже одну ноту "первую, которая должна и быть второй" и т.д., а если перемещение происходит в низ, то все в порядке будет, за исключением одного "но*"
То есть на будущее, когда удаляешь или перемещаешь, надо делать цикл в соответствующем направлении. В данном случае например делается, если перемещаешь ноты в верх, то цикл должен быть от кол-во нот до нуля, а если перемещаешь в низ, то цикл должен быть от нуля до кол-во нот. То есть надо делать два цикла.
------
* Когда несколько нот стоят в одном положении и от квантованные (чего некогда не бывает), то все сработает правильно, при циклах которые я описал выше, а если ноты сдвинуты хоть на пол микрона(чего ты при максимальном зуме не увидишь), то тут уже начнутся глюки, так как скрипт уже начнет перебирать ноты не по порядку, "то есть по порядку - но по временному, которого мы не видим".
Что бы получать точно ноты, надо всегда заморачиваться с квантайзом, а для понимания - если ты мышкой потрогал ноту, то она тут же становится не от квантованной, хоть и даже привязана к сетке
 
@Archchie, я понял, просто не было еще времени задуматься :) Я предполагал, что можно было поиграть с циклами инкремент/декремент
 
  • Like
Реакции: Archie's
@borisuperful, И вот так вроде бы нельзя делать, когда цикл в цикле и все счетчики одинаковые
upload_2018-12-24_3-5-32.png
 
Последнее редактирование:
  • Like
Реакции: borisuperful
  • Like
Реакции: Archie's
@@Michael, Сегодня кстати натыкался вот на эту функцию "MIDI_GetAllEvts", но так и не вкурил, что она делает.
 
Ну вообще шикарно! Вы молодцы. Теперь подогнать тональность под голосовой диапазон стало на раз-два.
@Archchie, отдельное спасибо еще раз.
 
...rious\mpl_PitchEditor_functions/mpl_PitchEditor_data.lua:241: bad argument #1 to 'DeleteEnvelopePointRange' (TrackEnvelope expected)

При коррекции мышкой драгдроп, а при повторном запуске работает нормально/

И думаю шаг коррекции и масштаб делать по полутонам, а не октавами
 

Вложения

  • 11.png
    11.png
    33,2 KB · Просмотры: 224
Последнее редактирование:
Друзья, увидел в Кубейсе 10 возможность из готовых аккордов составлять гармонию, задался вопросом, как такое сделать в рипере.
Нашел Lokasenna_Theory Helper.lua :) Даже нашел ZD-complete-plus.reascale, чтобы работало. Но когда нажимаю в нем аккорды звука нет.
Подскажите, что нужно еще сделать, чтобы подбирать аккорды. Или может есть еще что-то, может скрипт или еще чего аналогичному как в кубе :oops:
 
Добрый день. Такой вопрос - существует скрипт, который индексирует сенды по принципу нарастания. 1+2 to 1+2, 1+2 to 3+4, 1+2 to 5+6, 1+2 to 7+8. Этот скрипт написал Михаил Пилявский. Вот он:
function main(tr)
if not tr then return end
for sendidx = 1, reaper.GetTrackNumSends( tr, 0 ) do
local dest = 2^(sendidx-1)
if dest == 1 then dest = 0 end
reaper.SetTrackSendInfo_Value( tr, 0, sendidx-1, 'I_DSTCHAN', dest )
end
end

for i = 1, reaper.CountSelectedTracks(0) do main(reaper.GetSelectedTrack(0,i-1)) end

Можно ли переписать этот скрипт так, чтоб первый сенд был 1+2 to 3+4? (А не 1+2 to 1+2)
 
@@Michael, в Reaper 6 перестал работать скрипт mpl_Link TCP MCP folder collapsed state (running in background). Не могли бы Вы поправить его?
 
@Ga_rY, я хотел без изменения питча айтема сделать, вот
Код:
local count_items = reaper.CountMediaItems(0)
if count_items ~= 0 then
local retval, set_value = reaper.GetUserInputs( "Transpose all MIDI items", 1, "Set value", 0)
  if retval then ....
@borisuperful, удобная штука... с окном для ввода! А можно его допилить, что бы питчил только выделенные айтем(ы)?
 
Последнее редактирование:
  • Like
Реакции: zybex00

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