在原生 Tizen TV 上使用 Elementary 访问多次阅读文本
Read text multiple times with Elementary access on native Tizen TV
各位程序员大家好,
我正在尝试在 tizen TV 的本机应用程序中使用 Elementary access library(来自 Enlightenment)提供的文本转语音功能。
到目前为止,我已经能够阅读文本,但只有一次:当我多次调用 API 时,只有第一次调用呈现为音频。
我已经调查了 elementary access 的来源,但无法真正发现问题。
这是我的应用示例:
#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 提供 API 用于在本机应用程序中使用 TTS 引擎,但仅适用于移动设备和手表(至少在文档中)。
如果有人尝试过在原生电视上使用 TTS 引擎,或者对 Elementary access 库有更多经验,并愿意分享一些知识,我将不胜感激。
如果您使用的是 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“
将此页面用于 4.0 可穿戴 API 参考。 API tizen-iot-headed
的参考不是最新的。
https://docs.tizen.org/application/native/api/mobile/4.0/group__Elm__Atspi__Bridge.html
各位程序员大家好,
我正在尝试在 tizen TV 的本机应用程序中使用 Elementary access library(来自 Enlightenment)提供的文本转语音功能。
到目前为止,我已经能够阅读文本,但只有一次:当我多次调用 API 时,只有第一次调用呈现为音频。 我已经调查了 elementary access 的来源,但无法真正发现问题。
这是我的应用示例:
#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 提供 API 用于在本机应用程序中使用 TTS 引擎,但仅适用于移动设备和手表(至少在文档中)。
如果有人尝试过在原生电视上使用 TTS 引擎,或者对 Elementary access 库有更多经验,并愿意分享一些知识,我将不胜感激。
如果您使用的是 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“
将此页面用于 4.0 可穿戴 API 参考。 API tizen-iot-headed
的参考不是最新的。
https://docs.tizen.org/application/native/api/mobile/4.0/group__Elm__Atspi__Bridge.html