java– 销毁Nuance会话

java– 销毁Nuance会话,第1张

概述我有一个活动创建一个“音频”类,并尝试使用AndroidTexttoSpeechAPI来读取一些文本.如果不支持该语言,它会尝试使用MediaPlayer从服务器播放自定义mp3文件.最后,如果MediaPlayer失败,它会使用NuanceSpeechKit来读取文本:我的问题是当我销毁活动时,我想破坏/停止Nuance音频,我

我有一个活动创建一个“音频”类,并尝试使用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会话所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1117349.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存