有很多关于从.NET录制声音的教程和博客。我已经从根本上阅读并理解了各种选项,但我不确定哪种方法最简单,同时仍能满足我的要求:
最小
理想地
我可以弄清楚实施的细节,并且只是根据我的要求设置寻找关于开始的最佳途径的建议。
答案 0 :(得分:4)
我更喜欢使用waveIn * API函数(waveInOpen等)录制音频。虽然这个API已经过时(15年以上)并且比你想要的更难处理,它可以完成上面提到的所有事情(除了一个),根本不需要DirectX,并且适用于每个版本的Windows回到Windows 95(尽管.Net在Windows 98之前的任何东西都不起作用),甚至包括Windows Mobile(当我发现它时,这最后一个事实引起了我的注意)。
它没有处理的一件事是保存为任何常见的压缩文件格式(但我不认为用DirectSound录制 - 另一个主要选项 - 处理这个)。但是,有许多.Net兼容的库可以为你处理这个要求(NAudio很好推荐,虽然我从未使用它)。使用waveIn *进行录制(与DirectSound相同的优势)的一个优点是您可以录制到内存中(而不是直接录制到文件中),因此您可以轻松地对音频执行任何操作(例如,将其保存到一个文件,剥离安静的部分,通过FFT过滤它,改变格式等)。许多.Net兼容的库被编写为处理内存缓冲区而不是文件,或者除了文件之外,因此将音频保留在内存中是一个很大的好处。
可以完成触发录制的开始和停止,但不是您可能想到的方式。使用waveIn * API,您基本上可以从默认音频源开始录制,并且API开始使用录制的声音填充内存缓冲区。每个缓冲区都填满后会收到通知,然后您可以使用每个缓冲区执行任何操作。对于实际录制到文件,您只需扫描每个缓冲区,如果缓冲区为空(不包含声音),您只需将其丢弃而不将内容写入文件。
这是一个CodeProject示例,展示了如何同时使用waveIn *和waveOut * API:
http://www.codeproject.com/KB/audio-video/cswavrec.aspx?msg=2137882
我之前在C#中实际使用过这个项目,并且效果很好。