kAudioSessionProperty_OverrideAudioRoute 和 kAudioSessionProperty_OverrideCategoryDefaultToSpeaker 之间的区别
Difference between kAudioSessionProperty_OverrideAudioRoute & kAudioSessionProperty_OverrideCategoryDefaultToSpeaker
我对 iOS 中的音频路由覆盖感到困惑,并且不理解 Apple documentation 中关于 kAudioSessionProperty_OverrideAudioRoute
和 kAudioSessionProperty_OverrideCategoryDefaultToSpeaker
之间区别的文档
那么它们之间有什么区别呢?我们应该什么时候使用一个和另一个?
相似之处:
- 两者都只适用于播放和录制类别 (
kAudioSessionCategory_PlayAndRecord
/AVAudioSessionCategoryPlayAndRecord
)
- 两者都覆盖了奇怪的播放和录音选择,默认音频输出到超级安静、小巧的接收器(事实上,播放和录音类别是为 VOIP 设计的,您可以在其中按住 phone 靠近您的耳朵并像使用...电话一样使用它phone,从而避免您的听力受损)
差异:
kAudioSessionProperty_OverrideAudioRoute
是
- 较旧(iOS 2.1 及以上)
- 只写,略显神秘
- 在有耳机的情况下工作,在这种情况下设置
kAudioSessionOverrideAudioRoute_Speaker
也会更改内置麦克风的输入,忽略耳机的麦克风
- 它会在音频中断和路由更改(例如 phone 呼叫、警报 - adding/removing 音频设备)时恢复为 "default"。目前尚不清楚它是否会在类别更改期间恢复。如果是这样,那将是另一个相似之处。
kAudioSessionProperty_OverrideCategoryDefaultToSpeaker
是
- "newer"(iOS 3.1 及以上版本)
- read/write
- 仅在没有其他外部音频设备(例如耳机)可用时有效
- 在路线更改或中断期间,其值不会重置为默认值 (
FALSE
)。
在这两者中,kAudioSessionProperty_OverrideAudioRoute
似乎与 API 一样奇特,因为它有奇怪的副作用和令人惊讶的自行关闭的习惯,所以我会使用 kAudioSessionProperty_OverrideCategoryDefaultToSpeaker
。
当然,C AudioSession API 在 iOS 7 中已被弃用,因此您应该使用 AVAudioSession
等价物 AVAudioSessionPortOverrideSpeaker
和 AVAudioSessionCategoryOptionDefaultToSpeaker
。
并且 QA1754 以比我更通俗易懂的方式描述了这两种方法之间的区别。
我对 iOS 中的音频路由覆盖感到困惑,并且不理解 Apple documentation 中关于 kAudioSessionProperty_OverrideAudioRoute
和 kAudioSessionProperty_OverrideCategoryDefaultToSpeaker
之间区别的文档
那么它们之间有什么区别呢?我们应该什么时候使用一个和另一个?
相似之处:
- 两者都只适用于播放和录制类别 (
kAudioSessionCategory_PlayAndRecord
/AVAudioSessionCategoryPlayAndRecord
) - 两者都覆盖了奇怪的播放和录音选择,默认音频输出到超级安静、小巧的接收器(事实上,播放和录音类别是为 VOIP 设计的,您可以在其中按住 phone 靠近您的耳朵并像使用...电话一样使用它phone,从而避免您的听力受损)
差异:
kAudioSessionProperty_OverrideAudioRoute
是
- 较旧(iOS 2.1 及以上)
- 只写,略显神秘
- 在有耳机的情况下工作,在这种情况下设置
kAudioSessionOverrideAudioRoute_Speaker
也会更改内置麦克风的输入,忽略耳机的麦克风 - 它会在音频中断和路由更改(例如 phone 呼叫、警报 - adding/removing 音频设备)时恢复为 "default"。目前尚不清楚它是否会在类别更改期间恢复。如果是这样,那将是另一个相似之处。
kAudioSessionProperty_OverrideCategoryDefaultToSpeaker
是
- "newer"(iOS 3.1 及以上版本)
- read/write
- 仅在没有其他外部音频设备(例如耳机)可用时有效
- 在路线更改或中断期间,其值不会重置为默认值 (
FALSE
)。
在这两者中,kAudioSessionProperty_OverrideAudioRoute
似乎与 API 一样奇特,因为它有奇怪的副作用和令人惊讶的自行关闭的习惯,所以我会使用 kAudioSessionProperty_OverrideCategoryDefaultToSpeaker
。
当然,C AudioSession API 在 iOS 7 中已被弃用,因此您应该使用 AVAudioSession
等价物 AVAudioSessionPortOverrideSpeaker
和 AVAudioSessionCategoryOptionDefaultToSpeaker
。
并且 QA1754 以比我更通俗易懂的方式描述了这两种方法之间的区别。