【发布时间】:2023-04-08 02:33:02
【问题描述】:
即使没有插入耳机,我也想将 iOS VoiceOver 声音定向到耳机。
换句话说,当我的应用程序打开时,VoiceOver 声音(以及我在应用程序中使用AVSpeechUtterance 等播放的其他声音)绝不应该通过扬声器,而是应该从耳机中发出(如果已连接)。
任何人都可以就此提出建议吗?
【问题讨论】:
标签: ios iphone core-audio avaudiosession audiosession
即使没有插入耳机,我也想将 iOS VoiceOver 声音定向到耳机。
换句话说,当我的应用程序打开时,VoiceOver 声音(以及我在应用程序中使用AVSpeechUtterance 等播放的其他声音)绝不应该通过扬声器,而是应该从耳机中发出(如果已连接)。
任何人都可以就此提出建议吗?
【问题讨论】:
标签: ios iphone core-audio avaudiosession audiosession
iOS 设备不会打开耳机插孔以进行音频输出,除非当前已将可识别(适当阻抗等)的耳机或耳机插入插孔。
VoiceOver 音频将始终发送到耳机,前提是插入了有效的耳机,并且没有被覆盖。
【讨论】:
let session: AVAudioSession = AVAudioSession.sharedInstance() try session.setCategory(AVAudioSessionCategoryPlayAndRecord) try session.overrideOutputAudioPort(AVAudioSessionPortOverride.None) try session.setActive(true)
显然,除非将配件插入耳机插孔(这会激活物理开关以将声音引导至耳机),否则无法强制将声音引导至耳机。
我已经使用以下代码(在 Swift 中)实现了我的目的,该代码将 VoiceOver 和其他声音引导到电话扬声器(我们从那里接听电话)并在我的应用程序处于前台时使扬声器静音。
let session: AVAudioSession = AVAudioSession.sharedInstance()
do {
try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
try session.overrideOutputAudioPort(AVAudioSessionPortOverride.None)
try session.setActive(true)
} catch {
print("Couldn't override output audio port")
}
【讨论】: