PDA

View Full Version : scripts gesucht


Dragonetti
04-18-2019, 03:00 PM
Hallo
Ich habe schon alles abgesucht, aber diese scripts scheint es noch nicht zu geben.

Kann mir da jemand helfen?
Vielen Dank


im Midi Editor
Note Start to next grid
Note start to previous grid
Note end to previous grid
Note end to next grid
https://stash.reaper.fm/36116/sript2grid.gif

Jolu
04-19-2019, 06:16 AM
Versuch es mal mit der Aktion "Bearbeiten: Noten in Zeitauswahl einpassen". Beachte: Nur selektierte Noten werden eingepasst.

In Deinem Fall müsste die Zeitauswahl vom ersten roten Pfeil am Start, bis zum ersten roten Pfeil am Ende gezogen werden. Also einfach die gewünschte Rasterlänge als Zeitauswahl einstellen und die genannte Aktion anwenden.

Oder können die aufgelisteten Aktionen weiterhelfen?

• "Bearbeiten: Noten eine Rastereinheit nach links bewegen"
• "Bearbeiten: Noten eine Rastereinheit nach rechts bewegen"
• "Bearbeiten: Noten um eine Rastereinheit verlängern"
• "Bearbeiten: Noten um eine Rastereinheit kürzen"
• "Bearbeiten: Linke Kante der Note zum Edit-Cursor bewegen"
• "Bearbeiten: Rechte Kante der Note zum Edit-Cursor bewegen" usw.

solger
04-19-2019, 11:32 AM
Eventuell sind generell auch die 'Change note position by grid' und 'Change note length' Scripts von Stevie interessant.
Zu finden im Stevie Scripts ReaPack Repository: https://reapack.com/repos

Dragonetti
04-19-2019, 04:03 PM
@Jolu und Solger
Vielen Dank.
Leider klappen die Vorschläge nicht.
Ich habe 4 scipts für das editieren von Items im Arrangefenster.
Das selbe Prinzip hätte ich gerne auch für Midi Noten.
Ich habe die 4 scripts mal im Anhang abgelegt.(teilweise selber modifiziert)
Leider kann ich nicht wirklich lua programmieren.

Ich hätte gerne 4 shortcuts mit den jeweiligen Funktionen.
Anfang der Midi Note zum nächsten oder zum vorherigen Grid.
Ende der Midi Note zum nächsten oder vorherigen Grid.

Vielleicht hat noch jemand eine Idee
Vielen Dank im voraus

so wie hier im Arrange Fenster (steht auf 1/4 Grid)
https://stash.reaper.fm/36151/Item%20edit1.gif

_Stevie_
04-19-2019, 05:16 PM
'Change note Start' und 'Change note length' sollten eigentlich genau das machen, was du willst. Allerdings sind die Scripte fürs Mausrad. Ich würde sie mal probieren. Ich kann schauen, dass ich die Scripte für Shortcuts anpasse, wenn das mit dem Mausrad nicht so dein Ding ist.

Edit: ich sehe gerade, dass es für die beiden Scripte keine snap to grid version gibt. Kommt auf meine Todo. Weiß nur nicht, wann ich dazu komme. Ich schaue es mir morgen aber mal an.

Dragonetti
04-20-2019, 12:39 AM
Das ist nett.
Ich brauche die einzelnen Scripts als shortcuts auf meinem Touchscreen.
Über touchscreen einzelne Noten oder Items zu editieren ist in Reaper doch noch sehr hakelig. Die Anfasser sind für Mausbedienung ausgelegt und nicht für touch. Vielleicht gibt es wie bei FL da bald mal eine kleine Anpassung.

_Stevie_
04-21-2019, 04:47 PM
Die note end Scripte sind eigentlich fertig. Jetzt muss nur noch mein Repo mitspielen.
Das spinnt leider gerade etwas...

_Stevie_
04-22-2019, 04:38 AM
Quantize note end to next grid (bundle)
quantisiert das Notenende zum nächsten Grid (rundet also immer auf)

Quantize note end to previous grid (bundle)
quantisiert das Notenende zum vorherigen Grid (rundet also immer ab)

Quantize note end to closest grid (bundle)
quantisiert das Notenende zum nächstgelegenen Grid (rundet je nach Fall auf oder ab)

Dragonetti
04-22-2019, 12:25 PM
Ich weiß nicht genau wie ich die scripts installieren soll.
Ich habe einige scripts über RAW Text neu erstellt.
Muss ich dann alle sripts installieren?


Das jeweilige sript sollte das allgemeine Raster benutzen, was ich im Midi Editor voreinstellen kann.
Beim ersten mal quantiziern und beim wiederholten Ausführen sollte es dann immer um ein Grid Wert die Länge verändern.
Es geht mir also mehr ums trimmen als ums quantizieren.

Vielleicht kannst du mir noch Tips geben.
Vielen Dank

_Stevie_
04-22-2019, 03:28 PM
Du musst in der Tat den Paketmanager Reapack installieren und mein Repository hinzufügen.
https://reapack.com/user-guide

Mein Repo-Link: https://github.com/StephanRoemer/ReaScripts/raw/master/index.xml

Dann suchst du nach den entsprechenden Paketen, die ich oben aufgeführt habe.
Die Scripte machen exakt das, was du beschrieben hast. Entweder du nutzt das Grid Script,
was sich immer am aktuellen Grid orientiert oder die fixen Grid Scripte.

Dragonetti
04-23-2019, 04:57 AM
Vielen Dank
ein script "Script: sr_Quantize note end to next grid - grid.lua"
klappt ganz gut , für mich würde ich gerne die Funktion " wenn keine Note ausgewählt ist dann verschieb alle" rausnehmen.

das script "Script: sr_Quantize note end to previous grid - grid.lua"
funktioniert bei mir nicht

und für Note Start habe ich auch kein Script gefunden.

_Stevie_
04-23-2019, 05:09 AM
Ersetze einfach die Datei "sr_Quantize note end to next grid - grid.lua" mit dem Inhalt hier. Wenn du nur die Grid-Version brauchst, kannst du die anderen Dateien auch löschen (bundle, function, etc...).


-- quantize selected item(s) in arrange view (ignore note selection)

local function QuantizeNoteEnd(take)

_, notes_count, _, _ = reaper.MIDI_CountEvts(take) -- count notes and save amount to notes_count

for n = 0, notes_count - 1 do -- loop through all notes
_, selected, _, _, note_end_pos_ppq, _, _, _ = reaper.MIDI_GetNote(take, n) -- get note data

note_end = reaper.MIDI_GetProjTimeFromPPQPos(take, note_end_pos_ppq) -- convert note start to seconds
next_grid = reaper.BR_GetNextGridDivision(note_end) -- get next grid for current note (return value in seconds)
next_grid_ppq = reaper.MIDI_GetPPQPosFromProjTime(take, next_grid) -- convert next_grid to PPQ

reaper.MIDI_SetNote(take, n, nil, nil, nil, next_grid_ppq, nil, nil, nil, true) -- quantize note end to the next grid

end
reaper.MIDI_Sort(take)
end


-- check, where the user wants to change notes: MIDI editor, inline editor or anywhere else

local take, item, save_project_grid, save_swing, save_swing_amt, grid
local window, _, _ = reaper.BR_GetMouseCursorContext() -- initialize cursor context
local _, inline_editor, _, _, _, _ = reaper.BR_GetMouseCursorContext_MIDI() -- check if mouse hovers an inline editor

if window == "midi_editor" then -- MIDI editor focused

if not inline_editor then -- not hovering inline editor

_, save_project_grid, save_swing, save_swing_amt = reaper.GetSetProjectGrid(proj, false) -- backup current grid settings
take = reaper.MIDIEditor_GetTake(reaper.MIDIEditor_GetAct ive()) -- get take from active MIDI editor
grid, _, _ = reaper.MIDI_GetGrid(take) -- get grid value (in quarter note!) from MIDI editor
reaper.GetSetProjectGrid(proj, true, grid/4, save_swing, save_swing_amt) -- set new grid value according MIDI editor

QuantizeNoteEnd(take) -- quantize note end

reaper.GetSetProjectGrid(proj, true, save_project_grid, save_swing, save_swing_amt) -- restore saved grid settings

else -- hovering inline editor (will ignore item selection and only change data in the hovered inline editor)
take = reaper.BR_GetMouseCursorContext_Take() -- get take from mouse

QuantizeNoteEnd(take) -- quantize note end

end

else -- anywhere else (apply to selected items in arrane view)

if reaper.CountSelectedMediaItems(0) ~= 0 then
for i = 0, reaper.CountSelectedMediaItems(0)-1 do -- loop through all selected items
item = reaper.GetSelectedMediaItem(0, i) -- get current selected item
take = reaper.GetActiveTake(item)

if reaper.TakeIsMIDI(take) then -- make sure, that take is MIDI

QuantizeNoteEnd(take, project_grid) -- quantize note end

else
reaper.ShowMessageBox("The selected item #".. i+1 .." does not contain a MIDI take and won't be altered", "Error", 0)
end
end

else
reaper.ShowMessageBox("Please select at least one item", "Error", 0)
return false
end
end
reaper.UpdateArrange()
reaper.Undo_OnStateChange2(proj, "Quantize note end to next grid")



Was passiert bei dem Next Grid Script? Ich habs gerade probiert und hier klappt es.

Die Note Start Scripte sind noch nicht fertig.

Dragonetti
04-23-2019, 06:02 AM
Bei mir werden jetzt alle Midi Noten verschoben egal ab selected oder nicht.

Meintest du previous script, das next ist ja das was du mir eben nochmal geschickt hast.

Previous habe ich eben ausprobiert geht nur bis zum ersten previous grid, dann nicht weiter.

Dragonetti
04-23-2019, 06:05 AM
das note end to next grid funktioniert doch.

das note end to prev funktioniert nur einmal bis zum ersten prev grid

_Stevie_
04-23-2019, 07:45 AM
Da hab ich was durcheinandergebracht, sorry. Jetzt funktioniert das script nur bei nicht selektierten noten.

So sollte es aussehen:


-- @noindex


-- nudge note end in take in MIDI/inline editor (respect note selection)

local function NudgeNoteEndRightMIDIEditor(take)

_, notes_count, _, _ = reaper.MIDI_CountEvts(take) -- count notes and save amount to notes_count

for n = 0, notes_count - 1 do -- loop through all notes
_, selected, _, _, note_end_pos_ppq, _, _, _ = reaper.MIDI_GetNote(take, n) -- get note data

note_end = reaper.MIDI_GetProjTimeFromPPQPos(take, note_end_pos_ppq) -- convert note end to seconds
next_grid = reaper.BR_GetNextGridDivision(note_end) -- get next grid for current note (return value in seconds)
next_grid_ppq = reaper.MIDI_GetPPQPosFromProjTime(take, next_grid) -- convert next_grid to PPQ

if selected then -- selected notes always move, unselected only move if no notes are selected

reaper.MIDI_SetNote(take, n, nil, nil, nil, next_grid_ppq, nil, nil, nil, true) -- nudge note end to the next grid

end
end
reaper.MIDI_Sort(take)
end


-- check, where the user wants to change notes: MIDI editor, inline editor or anywhere else

local take, item, save_project_grid, save_swing, save_swing_amt, grid
local window, _, _ = reaper.BR_GetMouseCursorContext() -- initialize cursor context
local _, inline_editor, _, _, _, _ = reaper.BR_GetMouseCursorContext_MIDI() -- check if mouse hovers an inline editor

if window == "midi_editor" then -- MIDI editor focused

if not inline_editor then -- not hovering inline editor

_, save_project_grid, save_swing, save_swing_amt = reaper.GetSetProjectGrid(proj, false) -- backup current grid settings
take = reaper.MIDIEditor_GetTake(reaper.MIDIEditor_GetAct ive()) -- get take from active MIDI editor
grid, _, _ = reaper.MIDI_GetGrid(take) -- get grid value (in quarter note!) from MIDI editor
reaper.GetSetProjectGrid(proj, true, grid/4, save_swing, save_swing_amt) -- set new grid value according MIDI editor

NudgeNoteEndRightMIDIEditor(take) -- nudge note end

reaper.GetSetProjectGrid(proj, true, save_project_grid, save_swing, save_swing_amt) -- restore saved grid settings

else -- hovering inline editor (will ignore item selection and only change data in the hovered inline editor)
take = reaper.BR_GetMouseCursorContext_Take() -- get take from mouse

NudgeNoteEndRightMIDIEditor(take) -- nudge note end

end

else -- anywhere else (apply to selected items in arrane view)

if reaper.CountSelectedMediaItems(0) ~= 0 then
for i = 0, reaper.CountSelectedMediaItems(0)-1 do -- loop through all selected items
item = reaper.GetSelectedMediaItem(0, i) -- get current selected item
take = reaper.GetActiveTake(item)

if reaper.TakeIsMIDI(take) then -- make sure, that take is MIDI

NudgeNoteEndRightMIDIEditor(take) -- nudge note end

else
reaper.ShowMessageBox("The selected item #".. i+1 .." does not contain a MIDI take and won't be altered", "Error", 0)
end
end

else
reaper.ShowMessageBox("Please select at least one item", "Error", 0)
return false
end
end
reaper.UpdateArrange()
reaper.Undo_OnStateChange2(proj, "Nudge note end right to next grid - grid")



Und wegen des previous script:

Dann musst du das Grid verkleinern. Ich habe einen Mechanismus eingebaut, der die Note nicht kleiner werden lässt, als das aktuelle Grid.
Sonst hättest du Note mit Länger 1.

Dragonetti
04-23-2019, 08:30 AM
prev_grid ist gerade weg.
Du machst wahrscheinlich ein Update.

_Stevie_
04-23-2019, 08:36 AM
Ja genau, ich hab das Script umbenannt. Ich denke es ergibt doch mehr Sinn es "Nudge note end left to previous grid" und "Nudge note end right to next grid" umzubenennen. Mache noch ein paar Feinschliffe.

Dragonetti
04-23-2019, 09:08 AM
Ich habe hier mal note_start mit note_end ersetzt.
Das hat ganz gut geklappt.

Bei
prev_grid_ppq-1 habe ich die -1 noch hinzugefügt dann gehts, ist aber nicht optimal, man muss dann zweimal das script ausführen

-- @noindex


-- nudge note end in take in MIDI/inline editor (respect note selection)

local function NudgeNoteEndRightMIDIEditor(take)

_, notes_count, _, _ = reaper.MIDI_CountEvts(take) -- count notes and save amount to notes_count

for n = 0, notes_count - 1 do -- loop through all notes
_, selected, _, note_start_pos_ppq, _, _, _, _ = reaper.MIDI_GetNote(take, n) -- get note data

note_start = reaper.MIDI_GetProjTimeFromPPQPos(take, note_start_pos_ppq) -- convert note end to seconds
prev_grid = reaper.BR_GetPrevGridDivision(note_start) -- get next grid for current note (return value in seconds)
prev_grid_ppq = reaper.MIDI_GetPPQPosFromProjTime(take, prev_grid) -- convert next_grid to PPQ

if selected then -- selected notes always move, unselected only move if no notes are selected

reaper.MIDI_SetNote(take, n, nil, nil, prev_grid_ppq-1, nil, nil, nil, nil, true) -- nudge note end to the next grid

end
end
reaper.MIDI_Sort(take)
end


-- check, where the user wants to change notes: MIDI editor, inline editor or anywhere else

local take, item, save_project_grid, save_swing, save_swing_amt, grid
local window, _, _ = reaper.BR_GetMouseCursorContext() -- initialize cursor context
local _, inline_editor, _, _, _, _ = reaper.BR_GetMouseCursorContext_MIDI() -- check if mouse hovers an inline editor

if window == "midi_editor" then -- MIDI editor focused

if not inline_editor then -- not hovering inline editor

_, save_project_grid, save_swing, save_swing_amt = reaper.GetSetProjectGrid(proj, false) -- backup current grid settings
take = reaper.MIDIEditor_GetTake(reaper.MIDIEditor_GetAct ive()) -- get take from active MIDI editor
grid, _, _ = reaper.MIDI_GetGrid(take) -- get grid value (in quarter note!) from MIDI editor
reaper.GetSetProjectGrid(proj, true, grid/4, save_swing, save_swing_amt) -- set new grid value according MIDI editor

NudgeNoteEndRightMIDIEditor(take) -- nudge note end

reaper.GetSetProjectGrid(proj, true, save_project_grid, save_swing, save_swing_amt) -- restore saved grid settings

else -- hovering inline editor (will ignore item selection and only change data in the hovered inline editor)
take = reaper.BR_GetMouseCursorContext_Take() -- get take from mouse

NudgeNoteEndRightMIDIEditor(take) -- nudge note end

end

else -- anywhere else (apply to selected items in arrane view)

if reaper.CountSelectedMediaItems(0) ~= 0 then
for i = 0, reaper.CountSelectedMediaItems(0)-1 do -- loop through all selected items
item = reaper.GetSelectedMediaItem(0, i) -- get current selected item
take = reaper.GetActiveTake(item)

if reaper.TakeIsMIDI(take) then -- make sure, that take is MIDI

NudgeNoteEndRightMIDIEditor(take) -- nudge note end

else
reaper.ShowMessageBox("The selected item #".. i+1 .." does not contain a MIDI take and won't be altered", "Error", 0)
end
end

else
reaper.ShowMessageBox("Please select at least one item", "Error", 0)
return false
end
end
reaper.UpdateArrange()
reaper.Undo_OnStateChange2(proj, "Nudge note end right to next grid - grid")

_Stevie_
04-23-2019, 12:29 PM
Die Scripte sind jetzt alle oben.

Den Teil mit der "wenn nichts selektiert ist, sind alle Noten betroffen" musst du wieder manuell rausnehmen. Das ist eine Grundfunktion, die bei all meinen Scripten mit drin ist.

Dragonetti
04-23-2019, 01:53 PM
Die prev scripte funktionieren bei mir nicht.
Die quantisieren nur einmal und dann gehts nicht weiter in die previous Richtung.

_Stevie_
04-23-2019, 03:09 PM
Das ist wirklich seltsam. Hier klappt das alles:
https://i.imgur.com/2kBsFlp.gif

Dragonetti
04-24-2019, 06:33 AM
Bei mir klappts nicht.
WIN10 64bit
https://stash.reaper.fm/36174/nudge%202.gif

Könnte man das auch wie in einem vorigen Post (Item editing)mit
ApplyNudge machen?
https://stash.reaper.fm/36175/applyNudge.gif

_Stevie_
04-24-2019, 06:38 AM
Hast du das Script mal einem Shortcut zugewiesen?
Ich vermute, dass das Script (weil der MIDI editor durch die Action List keinen Focus hat), sich am Grid aus dem Arrange View orientiert. Weise mal einen Shortcut für die Action im MIDI Editor zu und probiere es nochmal.

EDIT: ApplyNudge geht meines Wissens nur für Items und Edit Cursor.

Dragonetti
04-24-2019, 06:48 AM
Mit shortcut geht auch nicht.

_Stevie_
04-24-2019, 06:50 AM
Puh, das ist echt sehr seltsam. Ich probiere das mal kurz mit einer Portable Install.

_Stevie_
04-24-2019, 07:38 AM
So, hab es mit einer cleanen portable Installation getestet und es funktioniert einwandfrei. Kannst du mal schauen, ob es bei dir dann auch funktioniert?
Du musst allerdings SWS dafür in der Portable installieren.

Dragonetti
04-24-2019, 08:37 AM
Wow da gehts.
Woran kanns denn liegen , dass es bei der normalen Version nicht klappt?
Ich probier mal noch ein bisschen rum.
Erstmal vielen Dank

_Stevie_
04-24-2019, 08:40 AM
DAS ist eine gute Frage! Ich hatte auch mal so ein Problem und hab tatsächlich alle Einstellungen Stück für Stück in der INI geändert, um herauszufinden, woran es liegt. War ein anderes Problem, aber war ähnlich nervig.

Ich bin so vorgegangen: hab die Hälfte der "verdächtigen INI" in die neue kopiert, um erst mal die Stelle grob auszumachen. Und dann habe ich mich vorgearbeitet. Würde mich auch brennend interessieren, welcher Eintrag dafür verantwortlich ist. Drücke die Daumen!

Dragonetti
04-24-2019, 08:42 AM
Ich such mal die INI

Dragonetti
04-26-2019, 05:22 AM
https://forum.cockos.com/showthread.php?p=1726072

wahrscheinlich liegts an dieser Sache ,
dass beim kopieren eines Items(ohne Snap) das Midi Event nicht mehr genau auf dem Grid liegt.

https://forum.cockos.com/showthread.php?t=206764&highlight=note+to+grid

Dragonetti
05-02-2019, 05:10 AM
Klappt soweit alles ganz gut, bis auf das Problem mit der Midinotenverschiebung.

Jetzt hätte ich gerne die "Midi Piano roll" toolbar im Docker an der unteren Seite des Bildschirms. Und da gibt es Probleme. Die "End" sripts funktionieren aber die "Starts" nicht mehr. Auch das Umschalten von Piano roll Ansicht auf Listen ansicht funktioniert nicht richtig.
Liegt das am Docker, dass der nicht richtig auf die piano roll zugreift?
https://stash.reaper.fm/36251/midi%20editor.gif