Текст TTS получен и обработан, но НЕ СЛЫШЕН на LG Optimus S - PullRequest
3 голосов
/ 18 сентября 2011

С одной стороны, эта проблема сложна, потому что у меня один и тот же точный код, работающий отлично на 3 разных телефонах Android 2.2, но не работающий на LG Optimus S (под управлением Android 2.2 тоже).

С другой стороны, эта проблема воспроизводима, поэтому на пути к разгадке тайны может быть некоторая надежда.

Проблема проявляется в том, что первые два текстовых сегмента, переданные в механизм TTS (Pico), обрабатываются (и слышатся через динамик!) Правильно на всех телефонах, включая проблемный (LG Optimus S).

Но третий и четвертый сегменты передаются в механизм TTS, после того, как шаг RECOGNIZED RecognitionController распознает все доброкачественные журналы во всех телефонах, за исключением того, что в проблемном телефоне ничего не слышно динамик! - несмотря на получение всех OnUtteranceCompleted () даже для проблемного телефона!

Я знаю, что код правильный, потому что он отлично работает на всех других телефонах, поэтому я не знаю, что может быть причиной этого.

Может быть, это неадекватные ресурсы процессора? неадекватные ресурсы памяти?

Если это так, почему он работает для первых двух текстовых сегментов, но не работает для последующих двух текстовых сегментов?

Если это может помочь обнаружить что-то «странное» в поведении системы, я включаю пример logcat пропавшей речи TTS на проблемном телефоне:

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 android.media.AudioManager@45a4f450
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 android.media.AudioManager@46039d08
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

ОБНОВЛЕНИЕ I: Проблема (только в LG Optimus S LS670) возникает только после первого запуска распознавателя речи . Я могу послать любое количество текстовых сегментов, некоторые из которых очень длинные, и движок TTS прекрасно говорит вслух. Но в тот момент, когда телефон переходит в режим прослушивания (разумеется, не во время разговора), TTS перестает звучать громко. Как будто отключение звука некоторых динамиков происходит автоматически, как только включается распознаватель речи, но не восстанавливается автоматически, как только распознавание речи выполнено.

На самом деле я попытался вставить audioManager.setMicrophoneMute(false); в RecognitionListener.onEndOfSpeech(), но это не помогло.

ОБНОВЛЕНИЕ II: Я даже попытался добавить к RecognitionListener.onEndOfSpeech() следующее, думая, что перезапуск двигателя TTS может сбросить ошибку где-то - это тоже не помогло:

Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, TTS_STATCHECK);    

Идеи? Предложения?

1 Ответ

1 голос
/ 20 сентября 2011

Проблема решена простым принятием обновления прошивки OTA с Android 2.2.2 (Froyo) до Android 2.3.3 (Gingerbread).

Оказывается, это была ошибка в ОС, в частностиROM (LS670ZVD), не в моем коде.

...