来自麦克风的实时音频播放。 C#

Posted

技术标签:

【中文标题】来自麦克风的实时音频播放。 C#【英文标题】:Real time audio playback from mic. c# 【发布时间】:2010-10-13 13:27:16 【问题描述】:

我希望创建一个应用程序,允许我从我的麦克风录制并通过其他电脑播放录音。不过,此时我只想让它在我自己的电脑上播放,这样我就可以让它工作了。

过去几个小时我一直在研究 NAudio,它似乎可以帮助我实现这个目标。

我只是想知道其他人是否有过这方面的经验,是否有可能?

谢谢, 斯图尔特

【问题讨论】:

您想要实时音频,还是只想在另一台计算机上播放录制的文件? 我想实时播放音频。因此,当我对着麦克风讲话时,我会尽快听到自己的声音。 【参考方案1】:

codeproject 上有一个示例项目:http://www.codeproject.com/KB/cs/Streaming_wave_audio.aspx 我不知道延迟有多低。

作为编解码器,我推荐 Speex(至少对于语音而言)。它是免费的、开源的,并提供低延迟和低带宽。

【讨论】:

非常感谢,我只是想将该应用程序拆分为两个单独的应用程序,一个用于广播,一个用于收听,但到目前为止还没有运气。你对我怎么能做到这一点有任何想法。我创建了两个应用程序,虽然我可以使用此代码工作,但是当我开始录制/收听时,它们似乎看不到对方,没有任何东西可以通过。 不知道。我从来没有研究过网络的东西。我只在 WaveIn/WaveOut 上使用了包装器。【参考方案2】:

Bass Audio Library 是另一个值得研究的可靠选择。

【讨论】:

【参考方案3】:

这是可能的,但您不太可能使用 WaveIn/WaveOut 获得低延迟(使用 WASAPI 可能会获得更好的结果)。您可以使用BufferedWaveProvider(在最新的源代码中)来存储从麦克风录制的音频并将输出提供给声卡。

【讨论】:

如果我理解正确的话,我会记录并保存到文件/缓冲区,然后从同一个缓冲区输出到扬声器?几乎同时?如果这听起来比实际难,我很抱歉。我是音频编程开发的初学者。 没错,将录制好的音频缓存在内存中,以便尽快返回声卡播放。看看 BufferedWaveProvider(上面加了一个链接)【参考方案4】:

NAudio 非常适合作为音频捕获和播放的起点,但正如 Mark 指出的那样,延迟可能是一个问题。

如果您采取下一步措施并希望通过网络发送音频数据,您将需要一个编解码器来压缩数据,因为 PCM 或 WAV 是未压缩的,而对于语音,您只需要 WAV 所需带宽的一小部分。 当您使用 C# 时,有一个可用的 Speex 的 C# 端口,称为 NSpeex,可能值得一看..

【讨论】:

以上是关于来自麦克风的实时音频播放。 C#的主要内容,如果未能解决你的问题,请参考以下文章

实时音频流到移动设备 - 动态播放速度

iOS:如何阅读播放实时音乐?

c#/.NET - 录制当前正在播放的音频

OpenAL播放捕获的音频数据c ++

实时音频流库

/dev/dsp 在centOS 6.x 中播放音频时未找到错误