我正在编写一个程序,它使用Windows语音识别来监听命令,并使用语音合成器提供实时反馈。我想知道是否有可能使用合成器的结果来创建音频波形(类似于您在录制声音时在Audacity中看到的),并在合成器继续说话时实时显示。我试图给人一种能够“看到”节目谈话的效果,而不仅仅是听到它。我不知道从哪里开始,任何建议/帮助都将不胜感激。
发布于 2015-09-19 07:18:19
从Windows Vista开始,您可以通过以下方式捕获当前音频会话的音频缓冲区:
现在,WASAPI不适合被托管应用程序调用。您可能需要PInvoke函数。但是你很幸运!有一个包装该API的托管库:
它提供了许多有用的对象来处理音频缓冲区和流。您可以通过nuget将包加载到项目中
要创建用于捕获实时音频缓冲区的Stream,您需要执行以下操作:
using (WasapiCapture capture = new WasapiLoopbackCapture()) {
capture.Initialize();
using(MemoryStream mstr = new MemoryStream())
using (WaveWriter wvWriter = new WaveWriter(mstr, capture.WaveFormat)) {
capture.DataAvailable +=
(object sender, DataAvailableEventArgs e) => {
wvWriter.Write(e.Data, e.Offset, e.ByteCount);
// Do some stuff with that Data!
}
}
}要了解如何创建注入到流中的数据的WaveForm,您可能需要查看一些教程。(提示:问问)
为了帮助您上路,请查看此stackoverflow question或此CodeProject article
还请注意,大多数教程涵盖了如何创建标准44.1 kHz 16位立体声PCM音频格式的波形。Windows喜欢将其音频缓冲为88 kHz 32位IEEE_FLOAT立体声PCM音频格式。这意味着你每秒将有88,000个32位样本进行处理,这些样本将对应于2个通道,并且具有从0.0到1.0的float值。(而不是-32k到+32k integer值)
Windows在内部做到了这一点,因为浮点采样更适合于混合不同的音频源。
https://stackoverflow.com/questions/32661962
复制相似问题