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.
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)
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 **
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.
De plus, j'ai essayé de n'avancer que la 16e note avec la touche C. Image avec repos.
** * La touche X est également au bâton pour fermer la fenêtre, et parfois cela ne fonctionne pas bien ... un mystère. ** **
À 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.
«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)