Я взял существующий пример моно (не стерео) NAudio для Visual Studio 2010 из:
http://mark-dot-net.blogspot.com/2009/10/playback-of-sine-wave-in-naudio.html
и изменил его, чтобы иметь двухканальный стереозвук, как показано ниже:
public abstract class WaveProvider32 : IWaveProvider
{
public WaveProvider32() : this(44100, 2) // Was 44100, 1
{
}
.
.
.
}
Когда я пытаюсь поместить правильное значение выборки в первое число с плавающей запятой в буфере и ноль во второе число с плавающей запятой в буфере, я ожидал получить синусоидальную волну на правом канале и никакого звука на левом.
Я вижу ту же самую частоту, в 10 раз меньшую амплитуду синусоидальной волны, не совпадающую по фазе, на левом канале по сравнению с правым каналом.
Это из-за какого-то просачивания сигнала или я не понимаю, как должен работать код?
Вот пример того, как я изменил 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;
}
}
Любые советы о том, что я делаю неправильно?
С Уважением
Примечание. Проект NAudio находится по адресу: