使用Android的Microsoft语音API文本到言语



我试图在我的android的Java项目中使用Microsoft语音API文本到语音。它不起作用。可以在Java中使用此API吗?

语音到文本正在起作用,我找到了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...

有人可以帮我吗?

我建议替代方案。为什么不尝试通过将文本发送到可以从Java代码执行的PowerShell命令来使用Windows TTS:

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

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

但是,有允许文本到语音的本机Java库。这是与文本到语音引擎有关的帖子。这是有关它的更多信息。Android也有可用的库:

  • 使用文本到语音引擎
  • Android文档

相关内容

  • 没有找到相关文章

最新更新