2011-09-21 5 views
3

je pris une mono existante (non stéréo) exemple NAudio pour Visual Studio 2010 à partir de:NAudio - Comment envoyer une onde sinusoïdale à un seul canal audio sur la prise

http://mark-dot-net.blogspot.com/2009/10/playback-of-sine-wave-in-naudio.html

et changé d'avoir deux audio stéréo canal comme indiqué ci-dessous:

public abstract class WaveProvider32 : IWaveProvider 
{ 
    public WaveProvider32() : this(44100, 2) // Was 44100, 1 
    { 
    } 
. 
. 
. 
} 

Lorsque je tente de placer la valeur correcte de l'échantillon dans le premier flotteur dans un tampon et un zéro dans le second flotteur dans un tampon, je me attendais à avoir une onde sinusoïdale sur la canal droit et pas d'audio sur la gauche. Je vois la même fréquence 10x plus faible amplitude déphasé onde sinusoïdale sur le canal gauche par rapport au canal droit.

Est-ce que cela provient d'une sorte de signal qui traverse ou je ne comprends pas comment le code devrait fonctionner?

Voici un exemple de la façon dont je l'ai changé WaveProvider32:

public class SineWaveProvider32 : WaveProvider32 
{ 
. 
. 
. 
public override int Read(float[] buffer, int offset, int sampleCount) 
{ 
    int sampleRate = WaveFormat.SampleRate; 
    for (int n = 0; n < sampleCount; n += 1) 
    { 
    buffer[n+offset] = (float)(Amplitude * Math.Sin((2 * Math.PI * sample * Frequency)/ sampleRate)); 

    buffer[n+offset+1] = (float)(0); 
    sample++; 

    if (sample >= sampleRate) 
    { 
     sample = 0; 
    } 
    } 
    return sampleCount; 
} 
} 

Tous les conseils sur ce que je fais mal?

Cordialement

Note: Le projet NAudio est situé à:

http://naudio.codeplex.com/

Répondre

3

Votre boucle doit avoir + = 2, pas + = 1.

for (int n = 0; n < sampleCount; n += 2) 
Questions connexes