各位程序员大家好,

我正在尝试在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),但是每次句子只说一次。

源代码中的Hereelm_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/

10-13 08:00