[PYTHON] Script pour changer la longueur du son avec REAPER

introduction

Il y a environ 20 ans, je faisais un pas dans Logic Il existe une fonction pour allonger la durée du son avec la touche TAB, Un mémo que je pensais qu'un script REAPER pourrait faire quelque chose de similaire. output.gif

scénario

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)

Les points qui ne vont pas bien

L'unité d'extension du son est-elle différente de l'unité de déplacement du curseur?

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

La valeur spécifiée par SetNote est une valeur de résolution MIDI appelée QN. Puisque la 16e note est la principale, 240 est ajouté par une décision fixe.

** * QN peut être géré musicalement et par partition quel que soit le tempo. Par contre, il faut se référer au tempo global pour le convertir en temps réel. ** **

960 = noire 480 = 8e note 240 = 16e note

--Déplacez le curseur

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

MoveEditCursor ... Je ne comprends pas vraiment cela.

Par essais et erreurs, j'ai l'impression que si je mets 1 à BPM120, il avance d'un temps. Je pensais qu'il était temps, et même si j'essayais QNTotTime ou quelque chose comme ça, c'était différent ...

RPR_TimeMap2_GetDividedBpmAtTime(0,0.125) Renvoie la même valeur que le tempo, donc commencez par 120 et Maintenant que j'ai la longueur d'un temps, je le multiplie par 1/4 pour en faire une longueur de 16e note. ** * Je ne suis pas sûr que cela rentre ici **

Réglage clé

Peut-être que la touche TAB change systématiquement de vue, donc attribuer des raccourcis ne fait pas du bien. (Cela ne fonctionne pas bien même s'il est attribué) Donc, cette fois, j'ai décidé d'utiliser le X de la touche inférieure gauche. J'utilise souvent Ctr-Z lorsque je fais une erreur.

image.png

De plus, j'ai essayé de n'avancer que la 16e note avec la touche C. Image avec repos.

image.png

** * La touche X est également au bâton pour fermer la fenêtre, et parfois cela ne fonctionne pas bien ... un mystère. ** **

C ’est un peu différent, mais je suis généralement satisfait.

À l'époque de Logic, c'était pour étirer le son (la durée est incertaine) avant que la note ne vienne, donc c'était aussi un accord. Dans REAPER, seule la dernière note enregistrée est étendue.

Compatible réseau

«J'ai corrigé la 16e note, mais je me demande si elle peut être modifiée ici. Pour s'adapter à la grille.

( 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

C'est comme ça?

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: -Laissez-le s'allonger avec la pédale (c'est du MIDI, mais que faire s'il explose accidentellement quand le mode est différent. Je veux qu'il ne fonctionne qu'en entrée pas à pas)

Recommended Posts

Script pour changer la longueur du son avec REAPER
Script Python qui compare le contenu de deux répertoires
Script Shell (Linux, macOS) qui affiche la date de la semaine dernière
Déboguer le script avec l'éditeur Sakura
L'histoire de la création d'un module qui ignore le courrier avec python
Une histoire qui visualise le présent de Qiita avec Qiita API + Elasticsearch + Kibana
Pandas avec des changements subtils dans les nombres et comment y faire face
L'histoire de la création d'une caméra sonore avec Touch Designer et ReSpeaker
Obtenez la valeur de retour d'un script shell externe (ls) avec python3
Changer la longueur des chaînes csv Python
Ceci et celui de la notation d'inclusion.
Alignez la taille de la barre de couleurs avec matplotlib
Script pour changer la description de fasta
Exécuter le script Python avec TS-220 cron
Vérifier l'existence du fichier avec python
La troisième nuit de la boucle avec pour
La deuxième nuit de la boucle avec pour
Compter le nombre de caractères avec écho
Avantages et inconvénients de Django que pensent les personnes ayant un an d'expérience
Autour de l'authentification de PyDrive2, un package pour faire fonctionner Google Drive avec Python
Avec LINEBot, j'ai fait une application qui m'informe de "l'heure du bus"
L'histoire de la méthode d'apprentissage qui a acquis LinuC Niveau 1 avec seulement ping -t
Script Python qui crée tous les fichiers UTF-8 sous le dossier avec BOM sans BOM
Notez que le calcul de la corrélation moyenne par paire était très facile avec les pandas
Un modèle qui identifie la guitare avec fast.ai
L'histoire de l'apprentissage profond avec TPU
Remarque: préparez l'environnement de CmdStanPy avec docker
Préparer l'environnement d'exécution de Python3 avec Docker
Raccourcir le temps d'analyse d'Openpose à l'aide du son
[Note] Exportez le html du site avec python.
paramètres zsh qui facilitent l'utilisation de virtualenv
Augmentez la taille de la police du graphique avec matplotlib
Calculez le nombre total de combinaisons avec python
Vérifiez la date du devoir de drapeau avec Python
Éliminez les inconvénients du widget QDock avec PySide
Défiez la tour de Hanoi avec recurs + stack
Script pour tweeter avec des multiples de 3 et des nombres avec 3 !!
Remplissez la largeur du bloc-notes Jupyter pour remplir le navigateur
Prédisez le deuxième tour de l'été 2016 avec scikit-learn
Vider le contenu de la base de données redis avec lua
Découvrez le jour par date / heure
La base de la théorie des graphes avec l'animation matplotlib
Visualisez le comportement de l'algorithme de tri avec matplotlib
Convertir le code de caractère du fichier avec Python3
Une doublure qui produit 10000 chiffres de rapport de circonférence avec Python
[Python] Déterminez le type d'iris avec SVM
L'histoire qui s'inscrit dans l'installation de pip
Script Python pour obtenir des informations de note avec REAPER
Un script python qui obtient le nombre de travaux pour une condition spécifiée sur Indeed.com
Un script qui combine les marges lors du collage d'un certain nombre de graphiques sur des tuiles avec gnuplot
Un script qui peut effectuer des tests de résistance en fonction du nombre de cœurs CPU
La théorie selon laquelle la clé du contrôle de l'infection du nouveau coronavirus est l'hyperdispersion de la sensibilité.
En voici une, je vais résumer les applications équipées "d'intelligence artificielle" qui m'intéressaient
Essayez de créer une forme d'onde (spectre audio) qui se déplace en fonction du son avec python
Il semble que le module de train_test_split change de 0.20 et que l'avertissement de dépréciation apparaisse à 0.18.
Un script qui poursuit sa recherche jusqu'à ce que l'URL correspondante soit mise en signet avec Hatena Bookmark
Un script qui envoie un ping au serveur enregistré et envoie un e-mail avec Gmail un certain nombre de fois en cas d'échec