首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在Windows语音合成器说话时显示音频波形?

有没有办法在Windows语音合成器说话时显示音频波形?
EN

Stack Overflow用户
提问于 2015-09-19 06:29:36
回答 1查看 475关注 0票数 0

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

EN

回答 1

Stack Overflow用户

发布于 2015-09-19 07:18:19

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

现在,WASAPI不适合被托管应用程序调用。您可能需要PInvoke函数。但是你很幸运!有一个包装该API的托管库:

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

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

代码语言:javascript
复制
            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在内部做到了这一点,因为浮点采样更适合于混合不同的音频源。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32661962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档