[PYTHON] Skript zum Ändern der Klanglänge mit REAPER

Einführung

Vor ungefähr 20 Jahren trat ich in die Logik ein Es gibt eine Funktion, um die Länge des Klangs mit der TAB-Taste zu verlängern. Ein Memo, von dem ich dachte, dass ein REAPER-Skript etwas Ähnliches tun könnte. output.gif

Skript

tatAddLength.py


RPR_ClearConsole()

midieditor = RPR_MIDIEditor_GetActive()
take = RPR_MIDIEditor_GetTake( midieditor )

notecntOut = 0
ccevtcntOut = 0
textsyxevtcntOut = 0

( retval, take, notecntOut, ccevtcntOut, textsyxevtcntOut ) = RPR_MIDI_CountEvts(take, notecntOut, ccevtcntOut, textsyxevtcntOut )

noteidx = notecntOut-1  #last note
selectedOut = True
mutedOut = True
startppqposOut = 0
endppqposOut = 0
chanOut = 0
pitchOut = 0
velOut = 0

( retval, take, noteidx, selectedOut, mutedOut, startppqposOut, endppqposOut, chanOut, pitchOut, velOut ) = RPR_MIDI_GetNote(take, noteidx, selectedOut, mutedOut, startppqposOut, endppqposOut, chanOut, pitchOut, velOut )

retval = RPR_MIDI_SetNote( take, noteidx, True, mutedOut, startppqposOut, endppqposOut+240, chanOut, pitchOut, velOut, False )

adjust = 0.125 * 120/RPR_TimeMap2_GetDividedBpmAtTime(0,0.125) # Tempo
RPR_MoveEditCursor(adjust, False)

Punkte, die nicht gut gehen

Unterscheidet sich die Einheit zum Erweitern des Tons von der Einheit zum Bewegen des Cursors?

retval = RPR_MIDI_SetNote( take, noteidx, True, mutedOut, startppqposOut, endppqposOut+240, chanOut, pitchOut, velOut, False )

Der von SetNote angegebene Wert ist ein MIDI-Auflösungswert namens QN. Da die 16. Note die Hauptnote ist, werden 240 durch eine feste Entscheidung hinzugefügt.

** * QN kann unabhängig vom Tempo musikalisch und punktuell gehandhabt werden. Auf der anderen Seite muss auf das globale Tempo Bezug genommen werden, um es in Echtzeit umzuwandeln. ** ** **

960 = Viertelnote 480 = Achtelnote 240 = Achtelnote

adjust = 0.125 * 120/RPR_TimeMap2_GetDividedBpmAtTime(0,0.125) # Tempo
RPR_MoveEditCursor(adjust, False)

MoveEditCursor ... Ich verstehe das nicht wirklich.

Durch Versuch und Irrtum habe ich das Gefühl, dass wenn ich 1 bei BPM120 setze, es um 1 Schlag voranschreitet. Ich dachte, es wäre Zeit, und selbst wenn ich QNTotTime oder ähnliches ausprobierte, war es anders ...

RPR_TimeMap2_GetDividedBpmAtTime(0,0.125) Gibt den gleichen Wert wie das Tempo zurück, beginnen Sie also bei 120 und Jetzt, wo ich die Länge eines Schlags habe, multipliziere ich ihn mit 1/4, um die Länge der 16. Note zu erreichen. ** * Ich bin nicht sicher, ob es hier passt **

Tasteneinstellung

Möglicherweise wechselt die TAB-Taste systematisch die Ansicht, sodass sich das Zuweisen von Verknüpfungen nicht gut anfühlt. (Es funktioniert nicht gut, auch wenn es zugewiesen ist) Also entschied ich mich diesmal, das X der unteren linken Taste zu verwenden. Ich benutze oft Ctr-Z, wenn ich einen Fehler mache.

image.png

Außerdem habe ich versucht, nur die Achtelnote mit der C-Taste vorzuschieben. Bild mit Pausen.

image.png

** * Die X-Taste schlägt auch, um das Fenster zu schließen, und manchmal funktioniert es nicht gut ... ein Rätsel. ** ** **

Es ist ein bisschen anders, aber ich bin im Allgemeinen zufrieden.

Zur Zeit von Logic sollte der Sound gedehnt werden (die Länge ist ungewiss), bevor die Note kam, also war es auch ein Akkord. In REAPER wird nur die zuletzt aufgenommene Note erweitert.

Netzkompatibel

――Ich habe die 16. Note korrigiert, aber ich frage mich, ob sie hier geändert werden kann. Passend zum Raster.

( grid, take,  swingOutOptional,  noteLenOutOptional) = RPR_MIDI_GetGrid(take, 0, 0)

retval = RPR_MIDI_SetNote( take, noteidx, True, mutedOut, startppqposOut, endppqposOut+960*grid, chanOut, pitchOut, velOut, False )

adjust = grid * 60/RPR_TimeMap2_GetDividedBpmAtTime(0,0.25) # Tempo

Ist es so

tatAddLengthGrid.py


RPR_ClearConsole()

midieditor = RPR_MIDIEditor_GetActive()
take = RPR_MIDIEditor_GetTake( midieditor )

notecntOut = 0
ccevtcntOut = 0
textsyxevtcntOut = 0

( retval, take, notecntOut, ccevtcntOut, textsyxevtcntOut ) = RPR_MIDI_CountEvts(take, notecntOut, ccevtcntOut, textsyxevtcntOut )

noteidx = notecntOut-1  #last note
selectedOut = True
mutedOut = True
startppqposOut = 0
endppqposOut = 0
chanOut = 0
pitchOut = 0
velOut = 0

( retval, take, noteidx, selectedOut, mutedOut, startppqposOut, endppqposOut, chanOut, pitchOut, velOut ) = RPR_MIDI_GetNote(take, noteidx, selectedOut, mutedOut, startppqposOut, endppqposOut, chanOut, pitchOut, velOut )


( grid, take,  swingOutOptional,  noteLenOutOptional) = RPR_MIDI_GetGrid(take, 0, 0)

retval = RPR_MIDI_SetNote( take, noteidx, True, mutedOut, startppqposOut, endppqposOut+960*grid, chanOut, pitchOut, velOut, False )

adjust = grid * 60/RPR_TimeMap2_GetDividedBpmAtTime(0,0.25) # Tempo
RPR_MoveEditCursor(adjust, False)

ToDo: -Erlauben Sie es, mit dem Pedal verlängert zu werden (Dies ist MIDI, aber was tun, wenn es versehentlich explodiert, wenn der Modus anders ist. Ich möchte, dass es nur bei Stufeneingabe funktioniert)

Recommended Posts

Skript zum Ändern der Klanglänge mit REAPER
Python-Skript, das den Inhalt zweier Verzeichnisse vergleicht
Shell-Skript (Linux, macOS), das das Datum der letzten Woche ausgibt
Debuggen Sie das Skript mit Sakura Editor
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
Eine Geschichte, die die Gegenwart von Qiita mit Qiita API + Elasticsearch + Kibana visualisiert
Pandas mit subtilen Veränderungen in der Anzahl und wie man damit umgeht
Die Geschichte einer Soundkamera mit Touch Designer und ReSpeaker
Ruft den Rückgabewert eines externen Shell-Skripts (ls) mit python3 ab
Ändern Sie die Länge der Python-CSV-Zeichenfolgen
Dies und das der Einschlussnotation.
Richten Sie die Größe der Farbleiste an der Matplotlib aus
Skript zum Ändern der Beschreibung von Fasta
Führen Sie das Python-Skript mit TS-220 cron aus
Überprüfen Sie die Existenz der Datei mit Python
Die dritte Nacht der Runde mit für
Die zweite Nacht der Runde mit für
Zählen Sie die Anzahl der Zeichen mit Echo
Vor- und Nachteile von Django, die Menschen mit einjähriger Erfahrung denken
Rund um die Authentifizierung von PyDrive2, einem Paket zum Betreiben von Google Drive mit Python
Mit LINEBot habe ich eine Anwendung erstellt, die mich über die "Buszeit" informiert.
Die Geschichte der Lernmethode, mit der LinuC Level 1 nur mit ping -t erworben wurde
Python-Skript, das alle UTF-8-Dateien unter dem Ordner mit Stückliste ohne Stückliste erstellt
Beachten Sie, dass die Berechnung der durchschnittlichen paarweisen Korrelation mit Pandas sehr einfach war
Ein Modell, das die Gitarre mit fast.ai identifiziert
Die Geschichte des tiefen Lernens mit TPU
Hinweis: Bereiten Sie die Umgebung von CmdStanPy mit Docker vor
Bereiten Sie die Ausführungsumgebung von Python3 mit Docker vor
Verkürzung der Analysezeit von Openpose mithilfe von Sound
[Hinweis] Exportieren Sie das HTML der Site mit Python.
zsh-Einstellungen, die die Verwendung von virtualenv erleichtern
Erhöhen Sie die Schriftgröße des Diagramms mit matplotlib
Berechnen Sie die Gesamtzahl der Kombinationen mit Python
Überprüfen Sie das Datum der Flaggenpflicht mit Python
Beseitigen Sie die Unannehmlichkeiten von QDock Widget mit PySide
Fordern Sie den Turm von Hanoi mit Wiederholungen + Stapel heraus
Skript zum Twittern mit Vielfachen von 3 und Zahlen mit 3 !!
Füllen Sie die Breite des Jupyter-Notizbuchs, um den Browser zu füllen
Prognostizieren Sie die zweite Runde des Sommers 2016 mit scikit-learn
Entleere den Inhalt der Redis-Datenbank mit Lua
Finden Sie den Tag nach Datum / Uhrzeit heraus
Die Basis der Graphentheorie mit Matplotlib-Animation
Visualisieren Sie das Verhalten des Sortieralgorithmus mit matplotlib
Konvertieren Sie den Zeichencode der Datei mit Python3
Ein Liner, der mit Python ein Umfangsverhältnis von 10000 Stellen ausgibt
[Python] Bestimmen Sie den Typ der Iris mit SVM
Die Geschichte, die zur Installation von Pip passt
Python-Skript zum Abrufen von Notizinformationen mit REAPER
Ein Python-Skript, das die Anzahl der Jobs für eine bestimmte Bedingung von Indeed.com abruft
Ein Skript, das Ränder kombiniert, wenn mehrere Diagramme mit Gnuplot auf Kacheln eingefügt werden
Ein Skript, das Stresstests entsprechend der Anzahl der CPU-Kerne durchführen kann
Die Theorie, dass der Schlüssel zur Kontrolle der Infektion des neuen Coronavirus die Hyperdispersion der Anfälligkeit ist.
Hier ist eine, ich werde die mit "künstlicher Intelligenz" ausgestatteten Anwendungen zusammenfassen, an denen ich interessiert war
Versuchen Sie, mit Python eine Wellenform (Audiospektrum) zu erstellen, die sich entsprechend dem Klang bewegt
Es scheint, dass sich das Modul von train_test_split von 0,20 ändert und die Verfallswarnung bei 0,18 angezeigt wird.
Ein Skript, das so lange sucht, bis die entsprechende URL mit einem Hatena-Lesezeichen versehen ist
Ein Skript, das den registrierten Server anpingt und eine bestimmte Anzahl von E-Mails mit Google Mail sendet, wenn dies fehlschlägt