- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个应用程序,它使用 libespeak(版本 1.47.11)以类似人类的声音宣布各种状态消息。
在应用程序中引入新线程之前,该方法一直运行良好。现在,通常情况下,预期的单词后面都会出现胡言乱语。有时,这些是先前宣布的较长消息的最后音节。其他时候它们是数字或只是零散的字母。
我的代码类似于:
#include <espeak/speak_lib.h>
// ...
std::string message = "The rain in Spain falls mainly in the plain.";
espeak_Initialize(
AUDIO_OUTPUT_PLAYBACK, // plays audio data asynchronously
500, // length of buffers for synth function, in ms
nullptr, // dir containing espeak-data, or null for default
0); // options are mostly for phoneme callbacks, so 0
espeak_ERROR err = espeak_Synth(
message.c_str(), // text
message.size(), // size
0, // position to start from
POS_CHARACTER, // whether above 0 pos is chars/word/sentences
message.size(), // end position, 0 indicating no end
espeakCHARS_AUTO | // flags: AUTO 8 bit or UTF8 automatically
espeakENDPAUSE, // ENDPAUSE sentence pause at end of text
nullptr, // message identifier given to callback (unused)
nullptr); // user data, passed to the callback function (unused)
if (err != EE_OK)
cerr << "Error synthesising speech" << endl;
// Wait until everything has been spoken
espeak_Synchronize();
我尝试分配一个大的、归零的缓冲区并将字符串复制到其中,然后将其传递给 libespeak,但这没有帮助。
这些调用的范围将持续存在,因为对 espeak_Synchronize
的调用会阻塞,直到语音完成,因此不会删除 message
字符串。就好像 libespeak 忽略了我所要求的长度。
请注意,如果我缩短 size
参数(第二个),则语音字符串将被截断。
另请注意,我仅从多线程应用程序中的单个线程调用 libespeak。
最佳答案
我找到了这个问题的解决方案,它不能解释为什么之前语音失败,但确实使语音听起来像预期的那样。实际上,现在代码的可读性也好一些了。
不要使用 AUDIO_OUTPUT_PLAYBACK
进行异步播放,然后通过 espeak_Synchronize
等待语音完成,而是使用 AUDIO_OUTPUT_SYNCH_PLAYBACK
进行同步播放,并删除最终的语音调用(它不会造成伤害,但不再需要。)
关于c++ - libespeak 在消息末尾发出额外的音节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21536545/
我有一个应用程序,它使用 libespeak(版本 1.47.11)以类似人类的声音宣布各种状态消息。 在应用程序中引入新线程之前,该方法一直运行良好。现在,通常情况下,预期的单词后面都会出现胡言乱语
我已经从github下载了最新版本的espeak-ng,并做了./autogen.sh ./configure make make install。 所以我写了一个测试程序,如下所示: #includ
我是一名优秀的程序员,十分优秀!