pitchamdf

pitchamdf — Suit la hauteur d'un signal en se basant sur la méthode AMDF.

Description

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.

Syntaxe

kcps, krms pitchamdf asig, imincps, imaxcps [, icps] [, imedi] \
      [, idowns] [, iexcps] [, irmsmedi]

Initialisation

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.

Exécution

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.

Exemples

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>


Crédits

Auteur : Peter Neubäcker
Munich, Allemagne
Août 1999

Nouveau dans la version 3.59 de Csound.