Использование преобразования текста в речь Microsoft Speech API в java для Android?

Я пытаюсь использовать преобразование текста в речь Microsoft Speech API в моем java-проекте для Android. Это не работает. Можно ли использовать этот API в Java?

Преобразование речи в текст работает, я нашел быстрый старт и без проблем использовал его.

Однако примера java для преобразования текста в речь нет, только в С#, С++ (Windows) и С++ (Линукс).

Я пытался адаптировать код в java, но он не работает, и я понятия не имею, почему.

 public void onTextToSpeechButtonClicked(View v) {
        TextView txt = (TextView) this.findViewById(R.id.texttospeech); // 'texttospeech' is the ID of my text view

        try {
            // THIS LINE ISN'T WORKING
            com.microsoft.cognitiveservices.speech.internal.SpeechConfig config = com.microsoft.cognitiveservices.speech.internal.SpeechConfig.FromSubscription(speechSubscriptionKey, serviceRegion); 

            config.SetSpeechRecognitionLanguage("fr-FR");
            assert(config != null);

            // Creates a speech synthesizer using the default speaker as audio output
            SpeechSynthesizer synthesizer = SpeechSynthesizer.FromConfig(config);
            assert(synthesizer != null);

            SpeechSynthesizer synthesizer1 = SpeechSynthesizer.FromConfig(config);


            SpeechSynthesisResult result = synthesizer.SpeakTextAsync(txt.toString()).Get();

            // Checks result
            if (result.getReason().equals(ResultReason.SynthesizingAudioCompleted)){
                txt.setText("The text has been said.");
            }
            else if (result.getReason().equals(ResultReason.Canceled)){
                SpeechSynthesisCancellationDetails cancellation = SpeechSynthesisCancellationDetails.FromResult(result);
                txt.setText("CANCELED: Reason  = "+cancellation.getReason());
                if (cancellation.getReason().equals(CancellationReason.Error)){
                    txt.append("ErrorCode = "+cancellation.getErrorCode()+" / ErrorDetails = "+cancellation.getErrorDetails()+" / Did you update the subscription info ?");
                }
            }
            synthesizer.delete();

        } catch (Exception ex) {
            Log.e("SpeechSDKDemo", "unexpected " + ex.getMessage());
            assert(false);
        }
    }

Что у меня есть в журнале, так это:

E/ples.quickstar: No implementation found for void com.microsoft.cognitiveservices.speech.internal.carbon_javaJNI.swig_module_init() (tried Java_com_microsoft_cognitiveservices_speech_internal_carbon_1javaJNI_swig_1module_1init and Java_com_microsoft_cognitiveservices_speech_internal_carbon_1javaJNI_swig_1module_1init__)
D/AndroidRuntime: Shutting down VM


    --------- beginning of crash
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.microsoft.cognitiveservices.speech.samples.quickstart, PID: 4106
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:389)
        at android.view.View.performClick(View.java:6597)
        at...

Кто-нибудь может мне помочь?

Вы гуглили свой вопрос, прежде чем публиковать его здесь? Потому что я нашел много информации, связанной с Microsoft Speech API и Java. Ответ — нет, реализовать Microsoft SAPI на Java невозможно. Я разовью свой ответ.

georges619 03.05.2019 10:27
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
1 292
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я искал, совместим ли Microsoft Speech API с Java, и ответ - нет. Это также кажется немного очевидным, потому что Microsoft = C++/C#, который не имеет ничего общего с Java. Кроме того, в своем посте вы упомянули быстрый старт. При этом используется пакет SDK для распознавания речи Cognitive Services, а не Microsoft SAPI.

Однако существуют собственные библиотеки Java, поддерживающие преобразование текста в речь. Вот сообщение, относящийся к механизмам преобразования текста в речь. Вот еще Информация об этом. Также доступны библиотеки для Android:

Я бы предложил альтернативу. Почему бы не попробовать вместо этого использовать Windows tts, отправив текст в команду powershell, которую можно выполнить из java-кода:

 String[] command = {"powershell.exe", "Add-Type -AssemblyName System.Speech; (New-Object System.Speech.Synthesis.SpeechSynthesizer).Speak('" + message +"');"};
 try {
        ProcessBuilder pb = new ProcessBuilder(command);
        Process process = pb.start();
        System.out.format("Process exit code: %d", process.waitFor());
        ProcessInputOutput.readStdnOutput(process);
    }
    catch (Exception e){
        e.printStackTrace();
    }

Другие вопросы по теме