pvspitch

pvspitch — Suit la hauteur et l'amplitude d'un signal PVS.

Description

Suit la hauteur et l'amplitude d'un signal PVS et les restitue dans des variables de taux-k.

Syntaxe

kfr, kamp pvspitch fsig, kthresh

Exécution

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).

Exemples

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 690. 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
; Audio out   Audio in
-odac           -iadc    ;;;RT audio I/O
; For Non-realtime ouput leave only the line below:
; -o pvspitch.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

sr = 44100
ksmps = 128
nchnls = 1


giwave ftgen 0, 0, 4096, 10, 1, 0.5, 0.333, 0.25, 0.2, 0.1666 

instr 1

ifftsize = 1024
iwtype = 1    /* cleaner with hanning window */

a1 inch 1 ;Realtime audio input
;a1   soundin "input.wav" ;Use this line for file input

fsig pvsanal   a1, ifftsize, ifftsize/4, ifftsize, iwtype
kfr, kamp pvspitch   fsig, 0.01

adm  oscil     kamp, kfr * 1.5, giwave  ;Generate note a fifth above detected pitch

       out    adm
endin


</CsInstruments>
<CsScore>

i 1 0 30

e

</CsScore>
</CsoundSynthesizer>


Voir aussi

pvsanal, pvsynth, pvsadsyn, pvscent

Crédits

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.csounds.com/journal/2006winter/pvspitch.html