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 et mary.wav.

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

; Initialize the global variables.
sr = 44100
kr = 4410
ksmps = 10
nchnls = 1

; synth waveform
giwave ftgen 2, 0, 1024, 10, 1, 1, 1, 1

; Instrument #1 - play an audio file with no effects.
instr 1
  ; get input signal with original freq.
  asig soundin "mary.wav"

  out asig
endin

; Instrument #2 - play the synth waveform using the
; same pitch and amplitude as the audio file.
instr 2
  ; get input signal with original freq.
  asig soundin "mary.wav"

  ; lowpass-filter
  asig tone asig, 1000
  ; extract pitch and envelope
  kcps, krms pitchamdf asig, 150, 500, 200
  ; "re-synthesize" with the synth waveform, giwave.
  asig1 oscil krms, kcps, giwave

  out asig1
endin


</CsInstruments>
<CsScore>

; Play Instrument #1, the audio file, for three seconds.
i 1 0 3
; Play Instrument #2, the "re-synthesized" waveform, for three seconds.
i 2 3 3
e


</CsScore>
</CsoundSynthesizer>


Crédits

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

Nouveau dans la version 3.59 de Csound.