NAudio - Как отправить синусоидальный сигнал только на один аудиоканал на разъеме - PullRequest
4 голосов
/ 22 сентября 2011

Я взял существующий моно (не стерео) пример NAudio для Visual Studio 2010 из:

http://mark -dot-net.blogspot.com / 2009/10 / play-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 расположен по адресу:

http://naudio.codeplex.com/

1 Ответ

4 голосов
/ 22 сентября 2011

Ваш цикл for должен иметь + = 2, а не + = 1.

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