我正在制作一个使用Windows语音识别的程序来监听命令,我正在使用语音合成器来提供实时反馈。我想知道是否可以使用合成器的结果来创建音频波(类似于录制语音时Audacity中的内容),当合成器继续时,它将实时显示说话。我试图发挥能够看到'节目谈话,而不仅仅是听到它。我不知道从哪里开始,任何建议/帮助将不胜感激。
答案 0 :(得分:0)
从Windows Vista开始,您可以通过以下方式捕获当前音频会话的音频缓冲区:
现在,托管应用程序调用WASAPI并不好。你可能需要PInvoke funktions。但你很幸运!有一个托管库包装API:
它提供了许多有用的对象来播放音频缓冲区和流。您可以通过nuget
将包加载到项目中要创建用于捕获 live 音频缓冲区的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数据,可能需要查看一些教程。 (提示:询问 Google )
为了让您继续前行,请查看此stackoverflow question或此CodeProject article
另请注意,大多数教程都介绍了如何创建标准44.1 kHz 16位立体声PCM音频格式的波形。
Windows喜欢将其音频缓冲为88 kHz 32位IEEE_FLOAT立体声PCM音频格式。这意味着您每秒钟将拥有88,000个32位样本,这些样本将对应于2个通道,其float
值范围为0.0到1.0。 (而不是-32k到+ 32k integer
值)
Windows 内部,因为浮点样本更适合混合不同的音频源。