首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NAudio -如何将正弦波仅发送到插孔上的一个音频通道

NAudio -如何将正弦波仅发送到插孔上的一个音频通道
EN

Stack Overflow用户
提问于 2011-09-22 06:14:45
回答 1查看 2K关注 0票数 5

我在Visual Studio2010中使用了一个现有的单声道(非立体声) NAudio示例,来自:

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

并将其更改为具有双声道立体声音频,如下所示:

代码语言:javascript
运行
复制
public abstract class WaveProvider32 : IWaveProvider 
{ 
  public WaveProvider32() : this(44100, 2) // Was 44100, 1
  {
  }
.
.
. 
}

当我尝试将正确的采样值放在第一个float in buffer和第二个float in buffer中时,我希望在右声道上得到一个正弦波,而在左边没有音频。

我在左声道和右声道看到相同频率的10倍低振幅反相位正弦波。

这是因为某种信号溢出,还是我不理解代码应该如何工作?

以下是我如何更改WaveProvider32的示例:

代码语言:javascript
运行
复制
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/

EN

回答 1

Stack Overflow用户

发布于 2011-09-22 18:18:18

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

代码语言:javascript
运行
复制
for (int n = 0; n < sampleCount; n += 2)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7507347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档