2013-01-02 5 views
2

Donc, je suis en train de coder un synthétiseur à partir de rien en C# en utilisant NAudio. Je l'ai fait jouer des fréquences différentes, ce qui est cool, mais je remarque que les hauteurs sont nettement plus fortes que les basses. Est-ce en raison de cet effet:Loudness égal par fréquence

http://en.wikipedia.org/wiki/Equal-loudness_contour

Ou suis-je en train de faire quelque chose de mal quand je générer l'onde sinusoïdale? Comment pourrais-je implémenter une courbe de contour Equal-loudness si elle est vraiment nécessaire?

Merci

Mon code:

NAudio attend un tampon rempli de valeurs à virgule flottante dans la gamme de -1 à +1 pour représenter la forme d'onde.

Génération onde sinusoïdale:

buffer[n + offset] = (float)(Amplitude * Math.Sin(angle)); 
angle = (angle + angleIncrement) % (2 * Math.PI); 

Définition d'une fréquence:

public double Frequency 
{ 
    set 
    { 
     angleIncrement = 2 * Math.PI * value/sampleRate; 
    } 
    get 
    { 
     return angleIncrement * sampleRate/2/Math.PI; 
    } 
} 
+0

Votre code a l'air ok (tant que 'Amplitude' est constant). –

+0

'Amplitude' représenterait la puissance de l'utilisateur à jouer la note. C'est constant pour l'instant dans mes tests. Dans ce cas, pensez-vous que je devrais mettre en place un contour de loudness/ – John

+0

J'ai déjà posté: "L'oreille humaine ne fonctionne pas comme ça, elle est fortement non-linéaire." L'échelle à gauche de ce graphique est logarithmique, 3 dB est égal à un facteur 2. –

Répondre

1

Contrôle de l'amplitude de l'audio de votre synthétiseur basé sur les contours égale intensité sonore est probablement pas ce que vous voulez.

En théorie, vous devez connaître le niveau absolu (SPL) produit par les haut-parleurs afin de choisir le contour approprié. En pratique, un problème plus important serait lorsque vous étendez votre synthétiseur pour utiliser des formes d'onde complexes au lieu de simples sons purs, éventuellement traités par des filtres, etc. Les contours d'intensité égale sont basés sur des sons purs et génèrent des signaux complexes. fréquences) vous auriez plutôt besoin d'un modèle de loudness pour estimer le volume de votre son synthétisé.

0

Vous pouvez utiliser la pondération A. Ce n'est pas la façon la plus précise de quantifier le volume, mais c'est OK. Il faudrait aller assez loin dans l'acoustique pour faire mieux. Plus here.

Questions connexes