一方面,這個問題很難,因爲我在3種不同的Android 2.2手機上使用完全相同的代碼,但不能在LG Optimus S上運行運行Android 2.2也是如此)。在LG Optimus S上收到並處理了TTS文本,但沒有聽到
另一方面,這個問題是可重複的,所以解決這個謎團的方式可能會有一些希望。
這個問題體現在傳遞給TTS引擎(Pico)的前兩個文本段在所有手機上正確處理(並通過揚聲器聽到),包括有問題的手機(LG Optimus S)。
但傳遞給TTS引擎,演講後的第三和第四部分RecognitionController公認的一步,結果完全良性的日誌中的所有手機,除了在有問題的手機沒有通過揚聲器聽到! - 儘管接收所有OnUtteranceCompleted()即使對於有問題的手機!
我知道代碼是正確的,因爲它在所有其他手機上都能正常工作,所以我很難理解可能會導致這種情況的原因。
這可能是CPU資源不足嗎?內存資源不足?
如果是這樣,爲什麼它對前2個文本段起作用,但對連續的2個文本段不起作用?
如果能夠幫助在發現系統中的行爲,一些「奇怪」,我包括缺少的TTS語音的問題手機上的樣本的logcat:
INFO/RecognitionController(1773): State change: RECOGNIZING -> RECOGNIZED
INFO/RecognitionController(1773): Final state: RECOGNIZED
INFO/ServerConnectorImpl(1773): ClientReport{session_id=040af29064d281350f1325c6a361f003,request_id=1,application_id=voice-search,client_perceived_request_status=0,request_ack_latency_ms=93,total_latency_ms=2179,user_perceived_latency_ms=213,network_type=1,endpoint_trigger_type=3,}
INFO/AudioService(121): AudioFocus abandonAudioFocus() from [email protected]
DEBUG/AppRecognizer(2167): Proceed.
INFO/TTS received:(2167): Speaking text segment number three but NOTHING is coming out of the speaker!!!
VERBOSE/TtsService(572): TTS service received Speaking text segment number three but NOTHING is coming out of the speaker!!!
VERBOSE/TtsService(572): TTS processing: Speaking text segment number three but NOTHING is coming out of the speaker!!!
VERBOSE/TtsService(572): TtsService.setLanguage(eng, USA,)
INFO/SVOX Pico Engine(572): Language already loaded (en-US == en-US)
INFO/SynthProxy(572): setting speech rate to 100
INFO/SynthProxy(572): setting pitch to 100
INFO/ClientReportSender(1773): Sending 1 client reports over HTTP
INFO/TTS received:(2167): Speaking text segment number four but NOTHING is coming out of the speaker!!!
VERBOSE/TtsService(572): TTS service received Speaking text segment number four but NOTHING is coming out of the speaker!!!
WARN/AudioTrack(572): obtainBuffer timed out (is the CPU pegged?) 0x5b3988 user=00062b40, server=00061b40
VERBOSE/TtsService(572): TTS callback: dispatch started
VERBOSE/TtsService(572): TTS callback: dispatch completed to 1
VERBOSE/TtsService(572): TTS processing: Speaking text segment number four but NOTHING is coming out of the speaker!!!
VERBOSE/onUtteranceCompleted(2167): segment #3
VERBOSE/TtsService(572): TtsService.setLanguage(eng, USA,)
INFO/SVOX Pico Engine(572): Language already loaded (en-US == en-US)
INFO/SynthProxy(572): setting speech rate to 100
INFO/SynthProxy(572): setting pitch to 100
WARN/AudioTrack(572): obtainBuffer timed out (is the CPU pegged?) 0x5b3988 user=0007dc00, server=0007cc00
VERBOSE/TtsService(572): TTS callback: dispatch started
VERBOSE/TtsService(572): TTS callback: dispatch completed to 1
VERBOSE/onUtteranceCompleted(2167): segment #4
相應的日誌手機上完美的作品看起來是這樣的:
INFO/RecognitionController(1773): State change: RECOGNIZING -> RECOGNIZED
INFO/RecognitionController(1773): Final state: RECOGNIZED
INFO/ServerConnectorImpl(1773): ClientReport{session_id=040af29064d281350f1325c6a361f003,request_id=1,application_id=voice-search,client_perceived_request_status=0,request_ack_latency_ms=96,total_latency_ms=2449,user_perceived_latency_ms=140,network_type=1,endpoint_trigger_type=3,}
INFO/AudioService(121): AudioFocus abandonAudioFocus() from [email protected]
DEBUG/AppRecognizer(2167): Proceed.
INFO/TTS received:(2167): Speaking text segment number three (and I can hear it :)
VERBOSE/TtsService(572): TTS service received Speaking text segment number three (and I can hear it :)
VERBOSE/TtsService(572): TTS processing: Speaking text segment number three (and I can hear it :)
INFO/ClientReportSender(1773): Sending 1 client reports over HTTP
VERBOSE/TtsService(572): TtsService.setLanguage(eng, USA,)
INFO/SVOX Pico Engine(572): TtsEngine::setLanguage found matching language(eng) but not matching country().
INFO/SVOX Pico Engine(572): Language already loaded (en-US == en-US)
INFO/SynthProxy(572): setting speech rate to 100
INFO/SynthProxy(572): setting pitch to 100
INFO/TTS received:(2167): Speaking text segment number four (and I can hear it :)
VERBOSE/TtsService(572): TTS service received Speaking text segment number four (and I can hear it :)
INFO/AudioHardwareQSD(121): AudioHardware pcm playback is going to standby.
DEBUG/dalvikvm(3262): GC_EXPLICIT freed 6946 objects/326312 bytes in 76ms
WARN/AudioTrack(572): obtainBuffer timed out (is the CPU pegged?) 0x3ce730 user=00032e80, server=00031e80
WARN/AudioFlinger(121): write blocked for 170 msecs, 161 delayed writes, thread 0xdc08
VERBOSE/TtsService(572): TTS callback: dispatch started
VERBOSE/onUtteranceCompleted(2167): segment #3
VERBOSE/TtsService(572): TTS callback: dispatch completed to 1
VERBOSE/TtsService(572): TTS processing: Speaking text segment number four (and I can hear it :)
VERBOSE/TtsService(572): TtsService.setLanguage(eng, USA,)
INFO/SVOX Pico Engine(572): TtsEngine::setLanguage found matching language(eng) but not matching country().
INFO/SVOX Pico Engine(572): Language already loaded (en-US == en-US)
INFO/SynthProxy(572): setting speech rate to 100
INFO/SynthProxy(572): setting pitch to 100
WARN/KeyCharacterMap(2167): No keyboard for id 131074
WARN/KeyCharacterMap(2167): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
DEBUG/dalvikvm(7137): GC_EXPLICIT freed 1585 objects/93216 bytes in 67ms
DEBUG/dalvikvm(6697): GC_EXPLICIT freed 3108 objects/178688 bytes in 59ms
VERBOSE/TtsService(572): TTS callback: dispatch started
VERBOSE/onUtteranceCompleted(2167): segment #4
更新我:(只在LG擎天柱小號LS670)問題話音識別後只發生踢的第一次。我可以發送任意數量的文本片段,其中一些文本片段很長,並且TTS引擎可以完美地大聲說出來。但是一旦手機進入收聽狀態(當然不是與說話同時),TTS就會停止響亮地響起。就好像一些語音識別器一旦自動啓動但不能自動恢復,某些揚聲器會自動發生「靜音」,一旦語音識別完成。
我實際上繼續嘗試在RecognitionListener.onEndOfSpeech()
中插入audioManager.setMicrophoneMute(false);
但這並沒有幫助。
更新二:我甚至嘗試添加到RecognitionListener.onEndOfSpeech()
以下,認爲prehaps重啓TTS引擎可以somwhere復位的錯誤 - 這並沒有幫助:
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, TTS_STATCHECK);
想法?建議?