Ошибка преобразования текста в речь Huawei ML Kit

#android #android-studio #huawei-mobile-services #huawei-developers #huawei-ml-kit

#Android #android-студия #huawei-мобильные сервисы #huawei-разработчики #huawei-ml-kit

Вопрос:

Я работаю над приложением Translator, где мне нужно озвучить то, что перевел пользователь. Следуя инструкциям Huawei Text to Speech Doc, я получаю сообщение об ошибке.

onError: MLTtsError{errorID=11301, ErrorMsg=’Динамик не поддерживается. ‘, расширение=7002}

  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_speak_and_translate);

        showInterstitialAd();
        MLApplication.getInstance().setApiKey("Your Key");


        if (deviceManufacture.equalsIgnoreCase("Huawei")) {
            setUpHuaweiTts();
        } 
        
    }
    private void setUpHuaweiTts() {
        mlTtsConfig = new MLTtsConfig()
                // Set the text converted from speech to English.
                // MLTtsConstants.TtsEnUs: converts text to English.
                // MLTtsConstants.TtsZhHans: converts text to Chinese.
                .setLanguage(MLTtsConstants.TTS_EN_US)
                // Set the English timbre.
                // MLTtsConstants.TtsSpeakerFemaleEn: Chinese female voice.
                // MLTtsConstants.TtsSpeakerMaleZh: Chinese male voice.
                .setPerson(MLTtsConstants.TTS_SPEAKER_FEMALE_ZH)
                // Set the speech speed. Range: 0.2–1.8. 1.0 indicates 1x speed.
                .setSpeed(1.0f)
                // Set the volume. Range: 0.2–1.8. 1.0 indicates 1x volume.
                .setVolume(1.0f);
        mlTtsEngine = new MLTtsEngine(mlTtsConfig);
        mlTtsEngine.setTtsCallback(new MLTtsCallback() {
            @Override
            public void onError(String s, MLTtsError mlTtsError) {
                Log.d(TAG, "onError: "  mlTtsError);
            }

            @Override
            public void onWarn(String s, MLTtsWarn mlTtsWarn) {
                Log.d(TAG, "onWarn: ");
            }

            @Override
            public void onRangeStart(String s, int i, int i1) {
                Log.d(TAG, "onRangeStart: ");
            }

            @Override
            public void onAudioAvailable(String s, MLTtsAudioFragment mlTtsAudioFragment, int i, Pair<Integer, Integer> pair, Bundle bundle) {
                Log.d(TAG, "onAudioAvailable: ");
            }

            @Override
            public void onEvent(String s, int i, Bundle bundle) {
                // Callback method of a TTS event. eventId indicates the event name.
                switch (i) {
                    case MLTtsConstants.EVENT_PLAY_START:
                        Log.d(TAG, "onEvent: Play");
                        // Called when playback starts.
                        break;
                    case MLTtsConstants.EVENT_PLAY_STOP:
                        // Called when playback stops.
                        boolean isInterrupted = bundle.getBoolean(MLTtsConstants.EVENT_PLAY_STOP_INTERRUPTED);
                        Log.d(TAG, "onEvent: Stop");
                        break;
                    case MLTtsConstants.EVENT_PLAY_RESUME:
                        // Called when playback resumes.
                        Log.d(TAG, "onEvent: Resume");      
                        break;
                    case MLTtsConstants.EVENT_PLAY_PAUSE:
                        // Called when playback pauses.
                        Log.d(TAG, "onEvent: Pause");
                        break;

                    // Pay attention to the following callback events when you focus on only synthesized audio data but do not use the internal player for playback:
                    case MLTtsConstants.EVENT_SYNTHESIS_START:
                        // Called when TTS starts.
                        Log.d(TAG, "onEvent: SynStart");
                        break;
                    case MLTtsConstants.EVENT_SYNTHESIS_END:
                        // Called when TTS ends.
                        Log.d(TAG, "onEvent: SynEnd");
                        break;
                    case MLTtsConstants.EVENT_SYNTHESIS_COMPLETE:
                        // TTS is complete. All synthesized audio streams are passed to the app.
                        boolean isInterruptedCheck = bundle.getBoolean(MLTtsConstants.EVENT_SYNTHESIS_INTERRUPTED);
                        Log.d(TAG, "onEvent: SynComplete");
                        break;
                    default:
                        break;
                }
            }
        });
       mlTtsEngine.speak("test", MLTtsEngine.QUEUE_APPEND);
    }
 

В настоящее время я просто устанавливаю строку «test» для целей тестирования. Я должен получить текст из модели и настроить его для выступления. Я не видел ничего подобного в Документе, касающемся ошибки динамика.Я искал код ошибки на Huawei.

публичный статический конечный int ERR_ILLEGAL_PARAMETER

Недопустимый параметр.

Постоянное значение: 11301

LogCat: Отладка введите описание изображения здесь

LogCat: Ошибка введите описание изображения здесьЛюбая помощь была бы очень признательна. Спасибо.

Ответ №1:

Я указал не того пользователя с английским языком. Итак, меняем этот код строки

 .setPerson(MLTtsConstants.TTS_SPEAKER_FEMALE_ZH)
 

с

 .setPerson(MLTtsConstants.TTS_SPEAKER_MALE_EN)
 

работает отлично.