pinkish

pinkish — Génère une approximation d'un bruit rose.

Description

Génère une approximation d'un bruit rose (réponse à -3dB/oct) par une de ces deux méthodes :

  • un générateur de bruit à taux multiples d'après Moore, codé par Martin Gardner

  • un banc de filtres dessinés par Paul Kellet

Syntaxe

ares pinkish xin [, imethod] [, inumbands] [, iseed] [, iskip]

Initialisation

imethod (facultatif, par défaut=0) -- sélectionne la méthode de filtrage :

  • 0 = méthode de Gardner (par défaut).

  • 1 = banc de filtres de Kellet.

  • 2 = Un banc de filtres quelque peu plus rapides par Kellet, avec une réponse moins précise.

inumbands (facultatif) -- ne fonctionne qu'avec la méthode de Gardner. Nombre de bandes de bruit à générer. Le maximum vaut 32 et le minimum vaut 4. Les valeurs plus élevées donnent un spectre plus lisse, mais au-delà de 20 bandes il y aura des fluctuations lentes presque comme une composante continue. La valeur par défaut est 20.

iseed (facultatif, par défaut=0) -- ne fonctionne qu'avec la méthode de Gardner. s'il est non nul, sert de graine au générateur de nombres aléatoires. S'il est nul, le générateur sera initialisé à partir de la valeur de l'horloge. Vaut 0 par défaut.

iskip (facultatif, par défaut=0) -- s'il est non nul, l'état interne n'est pas (ré)initialisé (utile pour les notes liées). Vaut 0 par défaut.

Exécution

xin -- pour la méthode de Gardner : amplitude de taux-k ou -a. Pour les filtres de Kellet : normalement un bruit de taux-a de distribution uniforme obtenu à partir de rand (31-bit) ou de unirand, mais ça peut être n'importe quel signal de taux-a. La valeur de crête de la sortie varie largement (±15%) même sur de longues périodes, et sera habituellement d'un niveau bien inférieur à celui de l'amplitude de l'entrée. Les valeurs de crête peuvent aussi dépasser occasionnellement l'amplitude de l'entrée ou celle du bruit.

pinkish tente de générer un bruit rose (c-à-d un bruit avec la même énergie dans chaque octave), par une des deux méthodes suivantes.

La première méthode, par Moore & Gardner, ajoute plusieurs signaux de bruit blanc (jusqu'à 32), générés à des taux en octave (sr, sr/2, sr/4, etc). Les valeurs pseudo aléatoires sont obtenues à partir d'un générateur interne sur 32 bit. Ce générateur est local à chaque instance de l'opcode et initialisable (comme pour rand).

La seconde méthode est un filtrage passe-bas avec une réponse d'environ -3dB/oct. Si l'entrée est un bruit blanc uniforme, la sortie sera un bruit rose. Avec cette méthode, on peut utiliser n'importe quel signal comme entrée. Le filtre de haute qualité est plus lent, mais il a moins d'ondulations et un intervalle de fréquences opératoires légèrement plus large que les versions moins gourmandes en calcul. Avec les filtres de Kellet, il n'y a pas de graine pour le générateur de nombres aléatoires.

La réponse en fréquence de la sortie dans la méthode de Gardner comporte quelques anomalies dans les intervalles basse-moyenne et moyenne-haute fréquence. On peut générer plus d'énergie en basse fréquence en augmentant le nombre de bandes. Cette méthode est aussi un peu plus rapide. Le filtre raffiné de Kellet a un spectre très lisse, mais un intervalle efficace plus limité. Le niveau augmente légèrement à l'extrémité haute du spectre.

Exemples

Voici un exemple de l'opcode pinkish. Il utilise le fichier pinkish.csd.

Exemple 608. Exemple de l'opcode pinkish.

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 pinkish.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

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

; Instrument #1.
instr 1
  awhite unirand 2.0

  ; Normalize to +/-1.0
  awhite = awhite - 1.0  

  apink  pinkish awhite, 1, 0, 0, 1

  out apink * 30000
endin


</CsInstruments>
<CsScore>

; Play Instrument #1 for one second.
i 1 0 1
e


</CsScore>
</CsoundSynthesizer>


Bruit filtré (Kellet) pour une note liée (iskip est non nul).

Crédits

Auteurs : Phil Burk et John ffitch
Université de Bath/Codemist Ltd.
Bath, UK
Mai 2000

Nouveau dans la version 4.07 de Csound

Adapté pour Csound par Rasmus Ekman

La méthode par bandes de bruit est dûe à F. R. Moore (ou R. F. Voss), et fut présentée par Martin Gardner dans un article de Scientific American souvent cité. La présente version fut codée par Phil Burk après une discussion sur la liste de diffusion de music-dsp, avec des optimisations significatives suggérées par James McCartney.

Le banc de filtres a été dessiné par Paul Kellet, et posté sur la liste de diffusion de music-dsp.

La discusssion complète sur le bruit rose a été rassemblée sur une page HTML par Robin Whittle, qui est actuellement consultable à http://www.firstpr.com.au/dsp/pink-noise/.

Notes ajoutées par Rasmus Ekman en Septembre 2002.