首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SoundEffect在从SpeechLib分配缓冲区时引发错误

SoundEffect在从SpeechLib分配缓冲区时引发错误
EN

Stack Overflow用户
提问于 2011-05-10 11:40:58
回答 2查看 936关注 0票数 2

我正在开发Windows 7应用程序,它可以读取一些文本并说出文本。

micsoroft库- interop.speechlib.dll将我的文本转换为缓冲区(字节数组)。而Windows 7的SoundEffect插件就是这么说的。

这一切都很好,但有时它会引起问题-

缓冲区无效。确保缓冲区长度为非零,并满足音频格式的块对齐要求。

发言守则如下:

代码语言:javascript
复制
SoundEffect se = new SoundEffect(buffer, 15000, AudioChannels.Stereo);
FrameworkDispatcher.Update();
se.Play();

请建议我,我在哪里做错了。

编辑从一些测试中得出结论,问题的根本原因是缓冲区的生成。下面是从文本生成缓冲区的代码。

代码语言:javascript
复制
 using (MemoryStream ms = new MemoryStream())
 {

     SpeechLib.SpVoice oVoice = new SpeechLib.SpVoice();
     SpeechLib.SpFileStream cpFileStream = new SpeechLib.SpFileStream();
     cpFileStream.Open(filename, SpeechLib.SpeechStreamFileMode.SSFMCreateForWrite, false);
     oVoice.AudioOutputStream = cpFileStream;
     oVoice.Speak(value, SpeechLib.SpeechVoiceSpeakFlags.SVSFDefault);
     oVoice = null;
     cpFileStream.Close();
     cpFileStream = null;

     byte[] ImageData=File.ReadAllBytes(filename);
     return ImageData;
 }

谢谢你,纳雷什·戈拉达拉

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-11 09:54:43

经过一些测试,它通过设置通道模式工作。它通过将通道模式设置为mono来工作。

代码语言:javascript
复制
SoundEffect se = new SoundEffect(buffer, 30000, AudioChannels.Mono);

单声道与立体声上查看它们之间的差异

票数 2
EN

Stack Overflow用户

发布于 2011-05-10 12:22:16

我怀疑你没有遵守块对齐的要求。报价

什么是块对齐,我如何计算它? 在一个句子中,块对齐值是指特定格式的音频原子单元(又称块)中的字节数。对于PCM格式,公式非常简单:“块对齐=每个样本的字节数*通道数”。例如,mono 16位PCM格式的块对齐值是2,而立体声16位PCM格式的块对齐值是4。我们有一些方便的帮助程序可以帮助计算块对齐值-- GetSampleSizeInBytes和GetSampleDuration从时间单位转换到块对齐字节值和返回。

http://blogs.msdn.com/b/ashtat/archive/2010/06/03/soundeffect-creation-in-xna-game-studio-4.aspx

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

https://stackoverflow.com/questions/5949451

复制
相关文章

相似问题

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