pvspitch — Suit la hauteur et l'amplitude d'un signal PVS.
Suit la hauteur et l'amplitude d'un signal PVS et les restitue dans des variables de taux-k.
kamp -- amplitude de la fréquence fondamentale
kfr -- fréquence fondamentale
fsig -- flot pv en entrée
kthresh -- seuil d'analyse (compris entre 0 et 1). Les valeurs élevées éliminent les composantes de faible amplitude de l'analyse.
L'algorithme de détection de hauteur implémenté dans pvspitch est basé sur l'hypothèse de J. F. Schouten du processus neuronal du cerveau utilisé pour déterminer la hauteur d'un son d'après l'analyse de fréquence de la membrane basilaire. Sauf pour certaines considérations plus loin, pvspitch cherche essentiellement le plus grand facteur commun des crêtes spectrales du son analysé pour trouver la hauteur qui peut lui être attribuée.
En général, les sons analysés présentant une caractéristique de hauteur auront des crêtes dans leur spectre suivant la position de leurs harmoniques. Il y a cependant quelques exceptions. Certains sons dont la représentation spectrale est continue peuvent provoquer une sensation de hauteur. De tels sons sont expliqués par le centroïde ou centre de gravité du spectre et dépassent le cadre de la méthode de détection de hauteur implémentée par pvspitch. (L'utilisation d'opcodes tels que pvscent peut être plus appropriée dans ce cas).
pvspitch est capable (en utilisant un fsig d'analyse généré par pvsanal) de localiser les crêtes spectrales d'un signal. Le paramètre de seuil (kthresh) est de la plus grande importance, car son ajustement peut introduire des harmoniques faibles mais significatifs pour le calcul du fondamental. Cependant, si l'on donne une valeur trop faible à kthresh, cela peut amener des partiels sans relation dans l'algorithme d'analyse ce qui compromettra la précision de la méthode. Ces étapes initiales simulent la réponse de la membrane basilaire en identifiant les caractéristiques physiques du son analysé. Le choix de kthresh dépend du niveau actuel du signal analysé, car ses valeurs (comprises entre 0 et 1) couvrent tout l'intervalle dynamique d'un bin d'analyse (de -inf à 0dBFS).
Il est important de se souvenir que l'entrée de l'opcode pvspitch est supposée se caractériser par des partiels importants dans le spectre. Si ce n'est pas le cas, le résultat retourné par l'opcode peut n'avoir aucune relation avec la hauteur du signal entrant. Si une trame contenant plusieurs partiels sans rapport a été analysée, le plus grand facteur commun de ces valeurs de fréquence autorisant des "harmoniques" adjacents sera choisi. Ainsi, des trames bruiteuses peuvent être caractérisées par une sortie basse fréquence de pvspitch. Ce fait permet un type primitif de détection de transitoire instrumental, car la portion d'attaque de certains sons instrumentaux contient des composants inharmoniques. Si l'on connaît la fréquence la plus basse de la mélodie analysée, alors toutes les fréquences détectées sous ce seuil représentent une lecture erronée due à la présence de partiels sans rapport.
Afin de faciliter un test efficace de l'algorithme de pvspitch, une valeur d'amplitude proportionnelle à celle qui est observée dans la trame de signal est également retournée (kamp). On peut ainsi utiliser les résultats de pvspitch pour piloter un oscillateur dont on peut comparer à l'écoute la hauteur avec celle du signal original (dans l'exemple ci-dessous, un oscillateur génère un signal qui se trouve une quinte au-dessus de la hauteur détectée).
Voici un exemple de l'opcode pvspitch. Il utilise le fichier pvspitch.csd. Cette exemple utilise l'entrée audio en temps réel mais on peut tout aussi bien utiliser un fichier son en entrée.
Exemple 851. Exemple de l'opcode pvspitch
Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;realtime audio out ;-iadc ;;;uncomment -iadc if realtime audio input is needed too ; For Non-realtime ouput leave only the line below: ;-o pvspitch.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; by Richard Boulanger & Menno Knevel 2021 sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 giwave ftgen 0, 0, 4096, 10, 1, 0.5, 0.333, 0.25, 0.2, 0.1666 instr 1 ifftsize = 1024 iwtype = 1 ; hanning window a1 soundin "flute.aiff" fsig pvsanal a1, ifftsize, ifftsize/4, ifftsize, iwtype kfr, kamp pvspitch fsig, p4 ; estimate pitch, use treshold settings adm poscil kamp, kfr, giwave ; sawtooth gets pitch from the flute outs adm, adm endin </CsInstruments> <CsScore> ; treshold i 1 0 3 .1 i 1 3 3 .01 i 1 6 3 .001 e </CsScore> </CsoundSynthesizer>
Auteur : Alan OCinneide |
Août 2005, ajouté par Victor Lazzarini, Août 2006 |
Une partie du texte a été adaptée de l'article de Alan Ocinneide "Introducing PVSPITCH: A pitch tracking opcode for Csound" dans la parution du Csound Journal de l'hiver 2006. L'article est disponible ici : www.csoundjournal.com/2006winter/pvspitch.html |