【问题标题】:Using Microsoft Speech API text-to-speech in java for Android?在 Android 的 Java 中使用 Microsoft Speech API 文本到语音?
【发布时间】:2019-09-20 00:53:07
【问题描述】:

我正在尝试在我的 Android 的 java 项目中使用 Microsoft Speech API 文本转语音。它不工作。是否可以在 java 中使用此 API?

语音转文本工作正常,我找到了the Quickstart,使用它没有问题。

但是,没有文本到语音的 java 示例,仅在 C#C++ (Windows)C++ (Linux) 中。

我尝试在 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...

有人可以帮我吗?

【问题讨论】:

  • 在将问题发布到此处之前,您是否在 Google 上搜索过您的问题?因为我找到了很多与 Microsoft Speech API 和 Java 相关的资料。答案是否定的,不可能在 Java 中实现 Microsoft SAPI。我会制定我的答案。

标签: java android text-to-speech sapi speech-synthesis


【解决方案1】:

我搜索了 Microsoft Speech API 是否与 Java 兼容,答案是否定的。这似乎也有点明显,因为 Microsoft = C++ / C# 这与 Java 一点也不相似。 此外,在您的帖子中,您提到了the Quickstart。这使用认知服务语音 SDK 而不是 Microsoft SAPI。

但是,有一些本地 Java 库允许 Text-To-Speech。这是与文本转语音引擎相关的post。这里有更多关于它的information。 还有一些适用于 Android 的库:

【讨论】:

    【解决方案2】:

    我会建议一个替代方案。为什么不尝试使用 windows tts,而是将文本发送到可以从 java 代码执行的 powershell 命令:

     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();
        }
    

    【讨论】:

      猜你喜欢
      • 2018-11-20
      • 1970-01-01
      • 2014-12-19
      • 2017-10-29
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      相关资源
      最近更新 更多