标签: onutterancecompleted

什么TtsService可以解释playEarcon()缺少onUtteranceCompleted()?

不久前,我发现playEarcon() 永远不会产生 onUtteranceCompleted().

在我刚才解释认为文件的时间"时的讲话被称为合成为" onUtteranceCompleted()暂时不适用的耳标,因为,一个耳标是不是真的TTS综合后的结果.

但是再看看Android的源代码,我根本找不到能够证明我解释的解释.

关于我的测试夹具的一些事实:

  1. onUtteranceCompleted()总是到达earcon之前的话语ID.那句话是一种普通的TTS话语,而不是一种耳语.
  2. 之后的earcon 确实发挥出来(即完全符合预期).
  3. onUtteranceCompleted()因为那个earcon 永远不会出现.这是非常一致和可重复的行为.

深入研究TtsService源代码,似乎只有2种方法可能会影响到达(或缺席)onUtteranceCompleted():

  1. TtsService.processSpeechQueue()
  2. TtsService.onCompletion()

如果你检查那个代码,你会看到第三个候选者,TtsService.getSoundResource()被排除(由于我的earcon缺乏onUtteranceComplete),因为上面的事实#2:earcon总是在玩,因此getSoundResource()不可能返回null.

使用相同的逻辑,第一个候选者TtsService.processSpeechQueue()也可以排除,对于相同的事实#2:earcon总是在播放,因此总是执行以下2个关键语句:

1108   mPlayer.setOnCompletionListener(this);
...
1111   mPlayer.start();
Run Code Online (Sandbox Code Playgroud)

所以,我们只剩下第二个候选人,TtsService.onCompletion(),作为一个playEarcon() 永远不会产生的 原因的可能解释onUtteranceCompleted():

public void onCompletion(MediaPlayer arg0) {
  // mCurrentSpeechItem may become null if it is stopped at the same
  // time it completes.
  SpeechItem currentSpeechItemCopy = mCurrentSpeechItem;
  if (currentSpeechItemCopy != null) {
    String …
Run Code Online (Sandbox Code Playgroud)

android text-to-speech onutterancecompleted android-mediaplayer

34
推荐指数
1
解决办法
721
查看次数

onUtteranceCompleted没有被调用?

即使我正确设置它:

HashMap<String, String> myHashRender = new HashMap<String, String>();
myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "utid");
mTts.speak("Speak something", TextToSpeech.QUEUE_ADD, myHashRender);
Run Code Online (Sandbox Code Playgroud)

mTts.setOnUtteranceCompletedListener(this);
Run Code Online (Sandbox Code Playgroud)

在onInit函数中返回成功.onUtteranceCompleted仍未被调用.虽然有重复的问题,但没有我能找到答案的地方.

我的Activity还实现了OnUtteranceCompletedListener.

请帮忙.

android text-to-speech onutterancecompleted

10
推荐指数
1
解决办法
4011
查看次数

AVSpeechUtterance以静音模式发声

我正在使用AVSpeechUtterance来讲述给定的文本.我正在使用下面的代码并在"iPhone Ringer模式"中正常工作,但当我将iPhone更改为"静音模式"时,话语声音变得无声.当它是"静音模式"时,我无法听到发声的声音.我该怎么做才能听到"静音模式"中的话语声音.

AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:@"Hello World"];
utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"];
[utterance setRate:AVSpeechUtteranceMinimumSpeechRate];
[utterance setVolume:1];
[self.speechSynthesizer speakUtterance:utterance];
Run Code Online (Sandbox Code Playgroud)

iphone objective-c ios onutterancecompleted avspeechsynthesizer

10
推荐指数
2
解决办法
2162
查看次数

如果收到的TTS太长,onUtteranceCompleted()会丢失

我刚刚在Android的TTS引擎中观察到"未记录的异常":如果要说的文本太长(大于4K个字符),那么onTetteranceCompleted()对于那个特定的话语将永远不会到达......

还有其他人遇到过这个吗?

这是一个已知的错误或限制吗?

可以做些什么来解决这个问题?

android text-to-speech onutterancecompleted

7
推荐指数
1
解决办法
671
查看次数

如何使用TTS(TextToSpeech),而字符串在Android中有超过4000个字符

我正在开发一个模块来读取文本文件并使用TTS作为语音播放.我已成功将TTS集成到我的模块中.还有前4000个字符的阅读和说话.

我有超过4000个字符的字符串,它可能有超过10000个字符.此时我无法使用TTS读取文件和播放.

我试过把大字符串分成字符串的一小部分.每个字符串部分有4000个字符.

当我正在播放第一个字符串部分时,它的工作正常.但在完成第一个弦乐部分之后,我想立即开始第二部分.但TTS没有启动它.

我在用

int pos = 0;

while(true) {

            String var = "";

            try {
                var = str.substring(pos, 3999);
                pos += 3999;
            } catch(Exception e) {
                var = str.substring(pos, str.length());
                break;
            }

            HashMap<String, String> map = new HashMap<String, String>();
            map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "utteranceId");
            tts.speak(var, TextToSpeech.QUEUE_ADD, map);
        }
Run Code Online (Sandbox Code Playgroud)

我已经尝试了很多.也在网上搜索但没有得到任何好的解决方案.

有一个setOnUtteranceCompletedListener()我认为这可能是有用的.但是,有谁能帮助我.如何使用TTS播放大文本.或任何其他可用的技术?

pdf android text-to-speech onutterancecompleted

5
推荐指数
1
解决办法
1028
查看次数

AVSpeechUtterance 完成处理程序

如何SpeakUtterance(utterance)在 Swift 中的函数上设置完成事件?我需要这个,这样我的演讲才不会被打断或打断。

avfoundation ios onutterancecompleted swift

1
推荐指数
1
解决办法
703
查看次数