Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2018-01-16 22:48:48 Théorie sonore et minim

AcousticQuantum
membre
Date d'inscription: 2014-11-25
Messages: 33

Théorie sonore et minim



Bonjour tout le monde big_smile

Voici un code dont j'entends bien que l'utilité peu sembler étrange lol, mais je ne parviens pas à comprendre le résultat obtenu...

J'aurais besoin de quelqu'un de suffisamment calé en théorie sonore pour m'aider à comprendre cette bizarrerie... roll

Voici une petite explication des calculs effectué dans le code ci-dessous...


Posons - une fréquence d'échantillonnage de 44100 Hz
           - une onde sonore  de 100 Hz (le calcul est plus simple avec cette fréquence...)
           - un bufferSize de 1024 samples

Alors le nombre de samples pour que cette onde effectue une oscillation complète est de 44100 / 100 = 441 (ligne 24).

(Mon onde oscillera donc de 1024 / 441 = +/- 2.32 fois le temps d'un buffer).

Déjà, ai-je bon jusque ici? hmm

Afin de "transposer" chacune des oscillations de mon onde dans un cercle,  je map mes samples de 1 à 441 entre 1 et 360 (ligne 25).

J'effectue ensuite un cosinus pour chacun de ces samples afin de trouver ma position en x et je prends l'amplitude de chacun de ces samples pour ma position en y (ligne 26 et 27).

Pourquoi diable n'obtiens-je un rond parfait uniquement qu'à la fréquence de 516.797 hz et de ses multiples???

En théorie, je devrais obtenir ce résultat peu importe la fréquence de mon onde (du moment qu'il s'agit d'une sinusoide), non?

import ddf.minim.*;
import ddf.minim.ugens.*;

Minim minim;
AudioOutput out;
Oscil wave;
float nbSamples, angle, x0, y0, z0, x1, y1, z1;
float freq = 516.797;

void setup(){ 
  size(600, 400, P3D);
  stroke(255);
  ortho();
  minim = new Minim(this);
  out = minim.getLineOut(Minim.MONO, 1024);
  wave = new Oscil(freq, 1, Waves.SINE);
  wave.patch(out);
}

void draw(){
  background(0);
  translate(width/2, height/2, 0);
  for(int i = 0; i < out.bufferSize(); i++){
    nbSamples = 44100 / freq;
    angle = (i * 360 / nbSamples) % 360;
    x1 = 100 * cos(radians(angle));
    y1 = 100 * out.left.get(i);
    line(x0, y0, x1, y1);
    x0 = x1;
    y0 = y1;
  }
}

NB: Il faut modifier la fréquence freq de mon code pour comprendre les résultats saugrenus dont je parlais.

Assez étrangement, j'ai fait une petite recherche sur le net au sujet de cette fréquence de 516.797 hz et voici ce que j'ai trouvé: http://www.lim.di.unimi.it/IEEE/CILANO/C3214.HTM
Cette fréquence précise aurait donc un rôle dans notre perception tonale!

En vous remerciant de l'intérêt porté à mon problème! wink

Au plaisir de vous lire!

Dernière modification par AcousticQuantum (2018-01-16 22:49:23)

Hors ligne

 

#2 2018-01-17 00:43:43 Re : Théorie sonore et minim

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: Théorie sonore et minim



Bonsoir,

Pour apporter un élément de réponse :
516.797 = 12 * (44100 / 1024)
De ce fait, il y a un nombre entier de sinusoïdes dans le tampon. C'est pour cela que le cercle est stable.
Il faut que tu définisses ce que tu souhaites faire pour que notre aide soit utile.

Bon courage.

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024