c# - NAudio - 如何将正弦波仅发送到插孔上的一个音频 channel

标签 c# codec naudio trigonometry

我从 Visual Studio 2010 中获取了一个现有的单声道(非立体声)NAudio 示例:

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
  {
  }
.
.
. 
}

当我尝试将正确的样本值放在缓冲区中的第一个 float 中并且 缓冲区中的第二个 float 为零,我期望在 右声道,左声道无音频。

我看到相同频率但振幅低 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/

最佳答案

你的 for 循环应该有 += 2,而不是 += 1。

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

关于c# - NAudio - 如何将正弦波仅发送到插孔上的一个音频 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7507347/

相关文章:

c# - 如何使用 naudio 将立体声 pcm 样本转换为单声道样本

sockets - 使用NAudio播放来自android设备的音频字节流

c# - 如何为集合创建类似于空条件运算符的空条件运算符?

c# - 如何设置mp3和ffmpeg编解码库对cef的支持?

ios - 它是什么编解码器

video - 使用 ffmpeg 检查不完整的视频片段

c# - 从字节数组实时播放

c# - 使用 jquery 将行添加到客户端转发器内的表中

c# - 具有多列的 ASP.NET CheckBoxList

c# - 使用 Facebook SDK .NET 发布消息