C# 有没有办法在Windows语音合成器讲话时显示音频波形?

C# 有没有办法在Windows语音合成器讲话时显示音频波形?,c#,audio,real-time,speech-synthesis,C#,Audio,Real Time,Speech Synthesis,我正在制作一个程序,使用Windows语音识别来监听命令,我正在使用语音合成器来提供实时反馈。我想知道是否有可能使用合成器的结果来创建音频波(类似于录制声音时在Audacity中看到的),该音频波将在合成器继续讲话时实时显示。我试图给人一种能够“看到”节目谈话的效果,而不仅仅是听到它。我不知道从哪里开始,任何建议/帮助都将不胜感激 从上的Windows Vista,您可以通过以下方式捕获当前音频会话的音频缓冲区: 现在WASAPI不适合被托管应用程序调用。你可能需要品沃克舞。但是你很幸运!

我正在制作一个程序,使用Windows语音识别来监听命令,我正在使用语音合成器来提供实时反馈。我想知道是否有可能使用合成器的结果来创建音频波(类似于录制声音时在Audacity中看到的),该音频波将在合成器继续讲话时实时显示。我试图给人一种能够“看到”节目谈话的效果,而不仅仅是听到它。我不知道从哪里开始,任何建议/帮助都将不胜感激

从上的Windows Vista,您可以通过以下方式捕获当前音频会话的音频缓冲区:

现在WASAPI不适合被托管应用程序调用。你可能需要品沃克舞。但是你很幸运!有一个托管库包装API:

它提供了许多有用的对象来播放音频缓冲区和流。您可以通过将包加载到项目中

要创建用于捕获实时音频缓冲区的流,您需要执行以下操作:

            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!
                           }
                }
            }
要了解如何创建一个数据流,您可能需要查看一些教程。(提示:询问谷歌

为了让你上路,看看这个或这个


还请注意,大多数教程都介绍了如何创建标准44.1 kHz 16位立体声音频格式的波形。 Windows喜欢将其音频缓冲为88 kHz 32位立体声PCM音频格式。这意味着每秒将有88000个32位采样到prcoess,这将对应于2个通道,并且具有从0.0到1.0的
float
值。(而不是-32k到+32k
integer
值)


Windows在内部执行此操作,因为浮点示例更适合混合不同的音频源。

回答此问题需要教程或书籍或非常长的答案,这都是离题的。你已经使用了哪些概念?你使用图书馆吗?如何熟悉设备/驱动程序?您使用哪种Microsoft API进行语音合成?我曾经使用MSSAPI,例如,可以保存一个WAV文件而不是说话。然后可以播放和显示WAV文件。也许今天有更好的方法,所以让人们知道你正在使用什么以及你已经尝试了什么。