【问题标题】:Android: Why STREAM_MUSIC effected by STREAM_VOICE_CALL?Android:为什么 STREAM_MUSIC 受 STREAM_VOICE_CALL 影响?
【发布时间】:2015-05-30 11:31:14
【问题描述】:

我正在为我的 android 应用程序实现文本到语音功能。我知道 Text to Speech 将使用 STREAM_MUSIC 作为默认流。当我调用文本到语音时,它正在以预期的音量说话。但我想知道,当我调用 Text to Speech 时,如果设备中有任何正在进行的呼叫会导致我的语音音量低。我不明白它是如何发生的。 电话将用户 AudioManager.STREAM_VOICE_CALL。会影响 AudioManager.STREAM_MUSIC 音量吗?

即使电话中有任何正在进行的通话,我也想以默认音量播放我的演讲。

请任何人都可以指导我了解这些 AudioManager 流,它们会影响哪些以及如何影响。

这是我的文字转语音调用方法

 private void speakMessage(String audibleString){
            tTts.speak(audibleString, TextToSpeech.QUEUE_ADD, null);
    }

提前致谢

【问题讨论】:

    标签: android android-audiomanager android-speech-api


    【解决方案1】:

    您所经历的称为音频闪避。它是当另一个音频源获得焦点时由操作系统(或有时另一个应用程序)自动执行的操作(类似于视图获得焦点的方式)。一次只能有一个音频源具有焦点。当另一个音频源获得焦点时,当前的音频源可能会闪避(安静)、暂停或单独放置。您可以使用AudioManager 请求STREAM_MUSICrequestAudioFocus() 获得焦点。

    编辑:audio focus 的附加信息。

    【讨论】:

    • 感谢您的回复。我也知道 requestAudioFocus() 的事情。正如您在回答中提到的那样,我早些时候也怀疑过。但实际上,就我而言,一旦收到传入消息,我就会请求 STREAM_MUSIC 的音频焦点并触发 TTS。如果没有主动来电,一切都是完美的。如果我收到消息 TTS 正在触发但音量较低,则我的手机中有任何正在进行的呼叫。我不明白为什么即使我也要求集中注意力,音量却在减少。
    • @RaghuRamiReddy 不幸的是,这只是一个焦点请求;你不能保证你会真正得到关注。您可以尝试获得exclusive audio access,但我不确定它是否适用于电话。您可能需要检查requestAudioFocus() 的返回值,看看您是否真正获得焦点。
    • @pathfindereliteany 你有什么想法:一个流类型的焦点是通过请求另一个流焦点来实现的?假设我的应用程序请求的 STREAM_MUSIC 可以通过电话应用程序 STREAM_VOICE_CALL 请求来实现吗?我的问题是我在盯着我的讲话时收到了很大的信息,但在讲话中我接到了电话。然后讲话并没有停止,而是降低了音量。而且我没有在应用程序中控制流音乐的音量。我正在使用文本到语音引擎来说出我的信息。愿 TTS 引擎处理此音频焦点丢失。 ——
    • @RaghuRamiReddy 好问题。恐怕我对这个问题的了解不足。看我发的link,应该比我能解释的更好。
    • @pathfinderelite 我发现了我的问题。当通话进行时,android 系统会将 AudioManager getMode() 值更新为 MODE_IN_CALL。在这种情况下,android 系统默认会减少所有其他声音以使语音通信良好。 MODE_IN_COMMUNICATION 也一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    相关资源
    最近更新 更多