各位程序员大家好,
我正在尝试在tizen TV的本机应用程序中使用Elementary access library(来自Enlightenment)提供的“文字转语音”功能。
到目前为止,我只能阅读一次文本:当我多次调用API时,只有第一个调用呈现为音频。
我已经研究了基本访问的来源,但无法真正发现问题。
这是我的应用程序示例:
#include <app.h>
#include <Elementary.h>
#include <unistd.h>
#include <string>
using namespace std;
const char APP_PKG[] = "org.tizen.tts";
/// Struct to store application information and passed at start time to the efl framework
struct _appdata
{
const char *name;
Evas_Object *win;
};
static bool
_create(void *data)
{
elm_config_access_set(EINA_TRUE);
return true;
}
static bool
_control(app_control_h app_control, void *data)
{
for (int i = 1; i <= 2; i++) {
string text = to_string(i) + ". Read me please.";
elm_access_say(text.c_str());
// sleep(10);
}
return true;
}
int
main(int argc, char *argv[])
{
_appdata ad = {0,};
ad.name = APP_PKG;
ui_app_lifecycle_callback_s lifecycle_callback = {0,};
lifecycle_callback.create = _create;
lifecycle_callback.app_control = _control;
return ui_app_main(argc, argv, &lifecycle_callback, &ad);
}
我尝试过使用
elm_access_force_say
,也在循环内移动elm_config_access_set(EINA_TRUE)
,但是每次句子只说一次。源代码中的Here是
elm_access_say
调用的一些代码。看来api调用了espeak可执行文件,奇怪的是我在设备上找不到任何espeak可执行文件。Tizen提供了一个在本机应用程序中使用TTS引擎的API,但仅适用于手机和手表(至少在文档中)。
如果有人尝试在本地电视上使用TTS引擎,或者对Elementary访问库有更多的经验,并且想分享一些知识,我将非常感谢。
最佳答案
如果您使用的是Tizen 4.0或更高版本,并且想使用辅助功能框架多次阅读文本,请使用elm_atspi_bridge_utils_say。下面的代码段演示了如何读取连续的数字。
statc void reade_n_times(int n) {
char buf[32];
for (int i=1;i<=n;++i){
snprintf(bug,sizesizeof(buf), "%d", i);
elm_atspi_bridge_utils_say(buf, EINA_FALSE, say_cb, NULL);
}
}
可以在此处找到elm_atspi_bridge_utils_say的完整规范:
https://developer.tizen.org/dev-guide/tizen-iot-headed/4.0/group__Elm__Atspi__Bridge.html#gafde6945c1451cb8752c67f2aa871d12d“
关于c++ - 借助Tizen TV上的基本访问权限多次阅读文字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57970488/