gpt4 book ai didi

c++ - Microsoft Text-To-Speech 不会说重音字符

转载 作者:行者123 更新时间:2023-11-28 01:22:56 25 4
gpt4 key购买 nike

我正在使用 Microsoft sapi 库开发文本转语音应用程序。我实现了朗读功能,发现重音字符 (à,á,â,ä,é,è,ê,í,ì,î,ó,ò,ô,ö,ù,ú,û,ü ) 不会说出来。这是我的代码:

int ttsSpeak( const char* text ) //Text to Speech speaking function
{
if( SUCCEEDED(hr) )
{
hr = SpEnumTokens( SPCAT_VOICES, NULL, NULL, &cpEnum );

cpEnum->Item( saveVoice, &cpVoiceToken );
cpVoice->SetVoice( cpVoiceToken ); //Initialization of the voice

string str( text );
cout << str;
std::wstring stemp = std::wstring( str.begin(), str.end() );
LPCWSTR sw = ( LPCWSTR )stemp.c_str(); //variable allowing to speak my entered text

printf( "Text To Speech processing\n" );
hr = cpVoice->Speak( sw, SPF_DEFAULT, NULL ); //speak my text

saveText = text;

cpEnum.Release();
cpVoiceToken.Release();
}
else
{
printf( "Could not speak entered text\n" );
}

return true;
}

我调试了我的应用程序,发现变量 str 获取重音字符。但是,我创建了一个名为 stempwstring 变量,其中我的字符串被转换,这里重音字符被替换为一个空方 block 。然后,创建一个 LPCWSTR 变量(指向常量宽字符串的长指针)以读出输入的文本。下面是我的变量值的图片。

Variable values

也许我的代码有问题,但我该怎么做才能确保重音字符被说出来?

最佳答案

不能简单地将单字节或多字节字符串(char, std::string)复制到宽字符串( wchar_t, std::wstring).您需要在编码或字符集之间进行适当的转换。

您必须确定用于两个字符串的正确编码。在 Windows 上,std::string 数据通常采用本地编码,例如 Windows-1252,而 std::wstring 数据采用 UTF-16。

在 Windows 上,您可以使用 MultiByteToWideChar用于转换。

或者,您可以使用标准函数,例如 mbstowcsstd::mbtowc

关于c++ - Microsoft Text-To-Speech 不会说重音字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55263883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com