我有一个活动创建一个“音频”类,并尝试使用Android Text to Speech API来读取一些文本.如果不支持该语言,它会尝试使用MediaPlayer从服务器播放自定义mp3文件.最后,如果MediaPlayer失败,它会使用nuance SpeechKit来读取文本:
我的问题是当我销毁活动时,我想破坏/停止nuance音频,我不知道如何关闭nuance音频.
活动类
private Audio audio;@OverrIDeprotected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.my_layout); audio = new Audio(this).play("my text to read");}@OverrIDeprotected voID onPause() { audio.pause(); super.onPause();}@OverrIDeprotected voID onDestroy() { audio.destroy(); super.onDestroy();}
音频课
private TextToSpeech tts;private MediaPlayer player;private Session session;public voID play(String text) { // check if supported if (supported) tts.speak(text, TextToSpeech.QUEUE_FLUSH, null); else mediaPlayer(text);}private voID mediaPlayer(String text) { // make some querIEs on server to find the file url if (queryFoundfile) { player = new MediaPlayer(); player.setDataSource(myfileUrl); player.setAudioStreamType(3); player.prepare(); player.start(); } else nuancePlayer(text);}private voID nuancePlayer(String text) { Transaction.Options options = new Transaction.Options(); options.setLanguage(new Language("eng-USA")); session = Session.Factory.session(activity, myServer, appKey); session.speakString(text, options, new Transaction.Listener() { @OverrIDe public voID one rror(Transaction transaction, String s, TransactionException e) { e.printstacktrace() } }); // it reaches here and nuance plays the audio}// these are the methods I call when the activity is paused or destroyedpublic voID pause() { if (tts != null) tts.stop(); if (player != null) player.stop(); if (nuance != null) nuance.getAudioPlayer().stop(); // don't work}public voID destroy() { if (tts != null) tts.shutdown(); if (player != null) player.release(); if (nuance != null) nuance.getAudioPlayer().stop(); // don't work}
如果我使用Text to Speech或MediaPlayer,如果我销毁我的Activity,音频会立即被销毁.但是,如果nuance正在播放,我似乎无法破坏音频.它只是在说话.
我做了一些调试,并调用了pause()和destroy()方法.此外,nuance.getAudioPlayer不为null并且是正在播放的AudioPlayer.当我在他身上调用方法stop()时,我无法找到他没有停止的原因.
什么是nuance?
这是我第一次使用nuance,所以我对此并不熟悉.基本上我认为这是AndroID Text to Speech的替代品.
Nuance Developers
为什么我的项目有这个?
我的项目有4种主要语言,我需要一个文本到语音功能来阅读一些文本.问题是,androID Text to Speech不支持nuance支持的其中一些语言.
为什么nuance是我的最后选择?
因为nuance有成本.我尝试使用androID TTS或MediaPlayer.只有当这两个失败时,我才会使用nuance.阅读我的文字是最后的手段!
解决方法:
根据更改日志,此问题自一年前就已知,尚未修复(根据更改日志).
对于临时解决方案,直到他们给您固定版本,您可以执行以下 *** 作:
将文本分成小块而不是一次播放完整的文本(如音频),将这些小文本块排队到音频播放器中,以便在完成播放当前块而不是完整文本后音频将停止.
因为根据下面给出的更改日志中的已知问题:
请注意这一行:
但是,如果多个Audios排队等待播放并且调用了stop(),则下一个音频将不会开始播放,队列将被清除.
我希望这能帮到您.
总结以上是内存溢出为你收集整理的java – 销毁Nuance会话全部内容,希望文章能够帮你解决java – 销毁Nuance会话所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)