2010-06-15 3 views
1

У меня есть приложение для Android, которое использует API TTS (текст в речь). Все работает отлично, но теперь я хочу угаснуть/выключить или даже остановить музыку (в случае, если пользователь играет музыку с предустановленным музыкальным проигрывателем), когда приложение говорит текст. Прямо сейчас, я думаю, что музыка и сообщения TTS воспроизводятся в одном потоке (MUSIC), и может быть трудно понять голосовые сообщения.fade in и out music во время разговора с текстом

Я попытался воспроизвести текст в другом потоке, например AudioManager.STREAM_NOTIFICATIONS. Он останавливает музыку, но не возвращается, когда текст говорит, поэтому я не достиг цели. Еще ничего не нашли, поэтому я надеюсь, что кто-то может помочь здесь. Благодаря!

ответ

5

У меня наконец-то есть что-то работающее. Не идеально. Довольно грязный трюк. На всякий случай это может помочь кому-то:

Это исправлено в API 8 с помощью методов requestAudioFocus и abandomAudioFocus для AudioManager.

Но для прежних версий вы можете попробовать это. Играйте в TTS через другой канал потока, скажем, STREAM_NOTIFICATIONS. Затем вам просто нужно вернуть фокус звука в STREAM_MUSIC. Как вы можете это достичь? Отправка строки молчания ("") в TTS, но на этот раз через STREAM_MUSIC. Эффект будет: музыка остановлена, ваше сообщение TTS будет произнесено, и, наконец, ваша музыка вернется после голосового оповещения. Нехорошо или чем-то гордиться, но ... если кто-то знает по-другому, я буду признателен

+0

Новое в API 21 is playSilentUtterance http://developer.android.com/reference/android/speech/tts/TextToSpeech.html#playSilentUtterance(long, int, java.lang.String) –

0

Не могли бы вы использовать TextToSpeech.OnUtteranceCompletedListener вместе с AudioManager.setStreamVolume для этого?

+0

Не думайте, что работа , в случае, если вы играете свое сообщение TTS через STREAM_MUSIC, что совпадает с фоновой музыкой. Если вы играете через другой поток, например STREAM_NOTIFICATION, вам все равно придется иметь дело с возвратом фокуса. И я нашел только один способ исправить это, что является грязным взломом, описанным в моем предыдущем сообщении. – ggomeze

+0

Я вижу. Я понимаю, что теперь это больше связано с возвратом внимания после «высказывания», которое вы правы - это не похоже на то, что это возможно без 'requestAudioFocus'. – aganders3