java - 在 Android 的 Java 中使用 Microsoft Speech API 文本到语音?
问题描述
我正在尝试在我的 Android 的 java 项目中使用 Microsoft Speech API text-to-speech。它不工作。是否可以在 java 中使用此 API?
语音转文本工作正常,我找到了快速入门并且使用它没有问题。
但是,没有用于文本到语音的 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...
有人能帮我吗?
解决方案
我会建议一个替代方案。为什么不尝试使用 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();
}
推荐阅读
- kotlin - LiveData 转换映射功能
- reactjs - react-share 参数 'href' 应该代表一个有效的 URL
- python - psycopg2.DatabaseError:状态为 PGRES_TUPLES_OK 的错误,并且没有来自 Flask Celery 应用程序中的 libpq 错误的消息
- python - 如何根据每个子列表的第一个条目中的值将列表的 python 列表拆分为 3 个单独的列表?
- spring - Spring Batch - 如何将从 CSV 读取的行存储到可重新启动的执行上下文中
- opencv - 安装后导入opencv时Jupyter Notebook出错:libGL.so.1:无法打开共享对象文件:没有这样的文件或目录
- python - rpy2 内联图显示 Jupyter Notebook 中损坏的 UTF 标签
- amazon-cloudfront - 在 AWS Cloudfront 中,如何仅使主页无效?
- android - Android - 约束布局 - 边距与 layout_constraintWidth_percent
- excel - 数字与列表之间的复杂相似匹配