java - 文本转语音 Android Studio

标签 java android android-studio text-to-speech google-text-to-speech

我正在尝试为阿拉伯语制作一个 TTS 应用程序,但是每当我想要初始化我的 TTS 时,它总是失败。我不知道我应该做什么来解决它。我尝试在模拟器上输入 TTS 引擎,但它没有向我显示任何内容。所以我不确定问题是来自模拟器还是我的代码。

  TTS = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
    @Override
    public void onInit(int status) {
        if (status==TextToSpeech.SUCCESS){
            int res = TTS.setLanguage(Locale.forLanguageTag("ar-XA"));
            if (res == TextToSpeech.LANG_MISSING_DATA || res == TextToSpeech.LANG_NOT_SUPPORTED){

                Log.e("TTS","Language not Supporter");
            }
            else{
                speak.setEnabled(true);
            }

        }
        else{
            Log.e("TTS","Init Failed");
        }
    }
});

最佳答案

这些信息可以帮助您在 Android 模拟器上运行 TTS。

当我第一次尝试您的代码时,我收到 LANG_NOT_SUPPORTED 错误,但很快意识到我的特定模拟器实例没有安装 TTS 引擎。

要使用模拟器安装 TTS 引擎,我必须使用 Google Play 模拟器(只有一小部分 AVD 模拟器有)。从 Android 虚拟设备管理器中,您可以创建虚拟设备并通过 Play 商店查看(例如在手机下)一些虚拟设备:Pixel 4、Pixel 3a、Pixel 3、Pixel、Nexus 5X、Nexus 5。

然后我使用了带有 API 25 的 Nexus 5。(我已经创建了它。)

模拟器运行后,我可以看到列出的 Play Store 应用程序。像在手机上一样运行 Play 商店应用程序(您必须使用 Google 帐户对自己进行身份验证,就像在手机上一样)。使用搜索栏并搜索“Google 语音服务” - 如果尚未安装,请安装此应用程序。这是一个对我有用的 TTS 引擎示例。由于这是唯一安装的 TTS 引擎,因此也是默认引擎。因此,如果您选择加载其他引擎,那么您就必须选择合适的引擎。 (引擎名称是包名称,例如 com.google.android.tts。)

然后我运行了您的代码(稍作修改),如下所示。我添加了一些诊断来列出可用的语言和变体。我还在这里查看了可用的语言和区域:https://cloud.google.com/speech-to-text/docs/languages例如,只选择“ar-iq”(但“ar”也有效)。

请注意,您的“ar-XA”是用于语音而不是引擎语言的语言标签。

TTS = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
    @Override
    public void onInit(int status) {
        if (status==TextToSpeech.SUCCESS){

            Set<Locale> avail = TTS.getAvailableLanguages();
            for (Locale locale : avail) {
                Log.e(TAG,"local: "+locale);
                if (locale.getDisplayVariant() != null) {
                    Log.e(TAG,"  var: "+locale.getVariant());
                }
            }
            List<TextToSpeech.EngineInfo> engineInfo = TTS.getEngines();
            for (TextToSpeech.EngineInfo info : engineInfo) {
                Log.e(TAG,"info: "+info);
            }

            int res = TTS.setLanguage(Locale.forLanguageTag("ar-iq"));
            if (res == TextToSpeech.LANG_MISSING_DATA || res == TextToSpeech.LANG_NOT_SUPPORTED){

                Log.e("TTS","Language not Supporter");
            }
            else{
                //speak.setEnabled(true);

                TTS.speak("اَلْعَرَبِيَّةُ", TextToSpeech.QUEUE_ADD, null);
            }

        }
        else{
            Log.e("TTS","Init Failed");
        }
    }
});

一旦您安装了 TTS 引擎并且您的代码或以上代码可以正常工作 - 我认为您可以使用设置来安装您的语音数据:

Settings | Speech | Text-to-speech output | (choose Speech Services by Google) and select the gear icon | and select your voice data.

您还可以通过编程方式使用语音数据。

请注意,您可以使用构造函数安装另一个 TTS 引擎(不是默认引擎):

TextToSpeech(Context context, TextToSpeech.OnInitListener listener, String engine)

Google TTS 引擎附带的阿拉伯语语音具有以下语言标签 - 我猜当设置语言时,会使用以下首选语音之一:

ar-xa-x-arz-local
ar-xa-x-arc-local

关于java - 文本转语音 Android Studio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68866638/

相关文章:

android - 将 ImageView 大小与 ConstrainLayout 的比例用于响应性

Android Studio 3.1 无法正确解析 "Theme.AppCompat"样式

java - 如何获取spring已经向jmx注册的bean?

java - String.replace() 不替换所有出现的地方

java - 在 JDBC 中缓存

java - 检查字符串是否在字符串的 ArrayList 中

java - 使用 LibGDX 和 BaseGameUtils 创建 gameHelper 时如何修复空指针异常?

android - 设备不与 Firebase 交互,但模拟器会

Android将我自制的CA证书识别为用户证书,并且无法正确安装

java - Android 中的暂停和恢复线程。工作室