pitchamdf — Suit la hauteur d'un signal en se basant sur la méthode AMDF.
Suit la hauteur d'un signal en se basant sur la méthode AMDF (fonction de différence de grandeur moyenne). Retourne les signaux de hauteur et d'amplitude détectées. La methode est assez rapide et devrait fonctionner en temps réel. Cette technique est habituellement plus efficace avec des signaux monophoniques.
kcps, krms pitchamdf asig, imincps, imaxcps [, icps] [, imedi] \
[, idowns] [, iexcps] [, irmsmedi]
imincps -- estimation de la fréquence minimale (en Hz) présente dans le signal.
imaxcps -- estimation de la fréquence maximale présente dans le signal.
icps (facultatif, 0 par défaut) -- estimation de la fréquence initiale du signal. Si elle vaut 0, icps = (imincps+imaxcps) / 2. La valeur par défaut est 0.
imedi (facultatif, 1 par défaut) -- taille du filtre médian appliqué à la sortie kcps. La taille du filtre sera imedi*2+1. Si elle vaut 0, aucun filtre médian n'est appliqué. La valeur par défaut est 1.
idowns (facultatif, 1 par défaut) -- facteur de sous-échantillonnage pour asig. Doit être un entier. Un facteur idowns > 1 donne une exécution plus rapide, mais au risque d'une détection de hauteur moins bonne. L'intervalle utile est 1 - 4. La valeur par défaut est 1.
iexcps (facultatif, 0 par défaut) -- fréquence, en Hz, d'exécution de l'analyse de hauteur. Si elle vaut 0, iexcps est fixé à imincps. C'est habituellement raisonnable, mais l'expérimentation avec d'autres valeurs peut conduire à de meilleurs résultats. Vaut 0 par défaut.
irmsmedi (facultatif, 0 par défaut) -- taille du filtre médian appliqué à la sortie krms. La taille du filtre sera irmsmedi*2+1. Si elle vaut 0, aucun filtre médian n'est appliqué. La valeur par défaut est 0.
kcps -- sortie de la hauteur détectée
krms -- sortie de l'amplitude détectée
Habituellement, pitchamdf fonctionne mieux avec des signaux monophoniques et il est assez fiable si des valeurs initiales appropriées sont choisies. En donnant à imincps et à imaxcps des valeurs aussi proches que possible que celles de la hauteur du signal, on obtient une meilleur détection et de meilleurs résultats.
Parce que le processus ne peut détecter la hauteur qu'après un délai initial, l'affectation à icps d'une valeur proche de la hauteur initiale réelle du signal protège des données erronées du début.
Le filtre médian évite les sauts de kcps. Expérimentez pour déterminer la valeur optimale de imedi pour un signal donné.
Les autres valeurs initiales peuvent habituellement prendre leurs valeurs par défaut. Passer asig dans un filtre passe-bas avant pitchamdf peut améliorer les résultats, en particulier avec des formes d'onde complexes.
Voici un exemple de l'opcode pitchamdf. Il utilise le fichier pitchamdf.csd.
Exemple 763. Exemple de l'opcode pitchamdf.
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 real audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o pitchamdf.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; by Menno Knevel 2022 sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ;clean audio asig soundin p4 outs asig, asig endin instr 2 ;use pitch Sfile = p4 asig soundin Sfile asig tone asig, 1000 ;lowpass-filter kcps, krms pitchamdf asig, 100, 500, 200 asig poscil krms, kcps, 1 ;re-synthesize with sawtooth printf "now %s is used...\n\n", 1, Sfile outs asig, asig endin </CsInstruments> <CsScore> f1 0 16384 10 1 0.5 0.3 0.25 0.2 0.167 0.14 0.125 .111 ;sawtooth i 1 0 3 "fox.wav" i 2 3 3 "fox.wav" i 1 6 4 "singFemale.aif" i 2 10 4 "singFemale.aif" i 1 15 2 "drumsMlp.wav" i 2 17 2 "drumsMlp.wav" </CsScore> </CsoundSynthesizer>