UE4+科大讯飞SDK 语音转文字之字符串转码问题
将科大讯飞的SDK,譬如iat_record_sample,语音转文字模块继承到UE4项目后发现,有几个问题
1.语音识别的字符串为非Unicode,先转换此字符串为FString
static void show_result(char *string, char is_over)
{
int len = MultiByteToWideChar(CP_ACP, 0, string, -1, nullptr, 0);
wchar_t *str = new wchar_t[len + 1];
wmemset(str, 0, len + 1);
MultiByteToWideChar(CP_ACP, 0, string, -1, str, len);
//此处得到FString
FString OutStr = FString(str);
delete[]str;
}
2.Demo中 helper_thread_proc相关的处理注释掉。这个是Demo示例工程,开线程一直监听键盘的指令,没啥用
在UE4调用的地方直接用sr_start_listening(&iat);sr_stop_listening(&iat);就行。
3.调用sr_start_listening函数几个问题:
3.1 在sr_start_listening后,UE4中绑定了静态代理来回调此事件的处理结果,也就是语音识别后的字符串处理函数。在这个函数中不能出现动态加载的事情,否则会出现线程安全的问题。要用的东西最好提前加载好,在这个函数中只使用对象就行
3.2 在这个函数中如果有创建UE4 Slate相关的代码。特别是SScrollBox控件,也会出现类似的线程安全崩溃。预加载也没有用,尽量避免使用或者寻找替代写法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.