c++ - 我怎样才能将 wchar_t* 交给 espeak 而不让德语字符发音不正确?
问题描述
我正在使用 espeak-ng 将德语交通信息转换为语音。请参阅此示例文本:
B6 Weserstraße B71 Seeborg vorübergehende Begrenzung der Breite。B213 Wildeshauser Landstraße Delmenhorst-Deichhorst wegen Baustelle gesperrt。
espeak 方法调用如下所示:
unsigned int spoken_message_uuid = 0;
espeak_ERROR Speak (wstring text)
{
espeak_ERROR error = EE_OK;
unsigned int *uuid = &spoken_message_uuid;
const wchar_t *input = text.c_str ();
wcout << L"Speaking text:" << endl << input << endl;
error = espeak_Synth (input, text.length (), 0, POS_CHARACTER, 0, espeakCHARS_WCHAR | espeakENDPAUSE | espeakSSML, uuid, NULL);
return error;
}
我现在的问题如下:所有德语特殊字符(ä、ö、ü、ß)都没有正确说出!相反,A Tilde ein Viertel
口语文本中出现了类似的内容,好像 UTF-8 文本被错误地视为 ASCII。
以下是 espeak-ng 和 g++ 的各自版本:
pi@autoradio:/import/valen/autoradio $ espeak-ng --version
eSpeak NG text-to-speech: 1.50 Data at: /usr/lib/arm-linux-gnueabihf/espeak-ng-data
pi@autoradio:/import/valen/autoradio $ g++ --version
g++ (Raspbian 6.5.0-1+rpi1+b1) 6.5.0 20181026
pi@autoradio:/import/valen/autoradio $ apt-cache policy espeak-ng
espeak-ng:
Installiert: 1.50+dfsg-7~bpo10+1
Installationskandidat: 1.50+dfsg-7~bpo10+1
Versionstabelle:
*** 1.50+dfsg-7~bpo10+1 100
100 http://deb.debian.org/debian buster-backports/main armhf Packages
100 /var/lib/dpkg/status
1.49.2+dfsg-8 500
500 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages
espeak 已从 Debian 的 buster-backports repo 安装以替换版本 1.49,该版本也不起作用。我使用的声音是 mb-de5。
解决方案
好的,这不完全是一个解决方案,只是一种解决方法,但至少它有效:我交出 astring
而不是 a wstring
。原来的字符串是 UTF-8 编码的,所以所有的特殊字符都适合一个string
resp。char*
多变的。这是改编后的代码:
unsigned int spoken_message_uuid = 0;
espeak_ERROR Speak (string text)
{
espeak_ERROR error = EE_OK;
unsigned int *uuid = &spoken_message_uuid;
const char *input = text.c_str ();
cout << "Speaking text:" << endl << input << endl;
error = espeak_Synth (input, text.length (), 0, POS_CHARACTER, 0, espeakCHARS_UTF8 | espeakENDPAUSE | espeakSSML, uuid, NULL);
return error;
}
推荐阅读
- javascript - 哪些 HTML 属性在 Javascript 上有不同的名称?
- python - 如何从一系列三角形中获得中间曲线(一系列中间点)?
- javascript - 正则表达式将基本算术与字母匹配并将它们分组
- json - 以角度迭代打字稿中的json文件?
- amazon-ec2 - 使用 dask labextensions 连接到远程集群
- java - 从浏览器角度+ spring boot + jwt尝试时获得500内部服务“在SecurityContext中找不到身份验证对象”
- python - 发送帖子请求的最快方法是什么?
- python - 如何使用棉花糖python烧瓶从sqlite查询中获取json响应
- css - 如何在具有引导类的 div 之间设置边距?
- apache-flink - Prometheus Gauge 注册到 Flink 失败