mute/silent 模式打开时声音仍然播放
Sounds still play when mute/silent mode is ON
我正在使用 AudioServicesPlaySystemSoundWithCompletion 播放系统声音,并使用 AVAudioPlayer 播放自定义声音。
为什么打开静音开关会播放声音?我已经尝试了 "AVAudioSession".
的所有类别
我尝试了以下代码:
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategorySoloAmbient)
try AVAudioSession.sharedInstance().setActive(true)
也试过这个:
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: AVAudioSessionCategoryOptions.mixWithOthers)
try AVAudioSession.sharedInstance().setActive(true)
我尝试了这个 link 中定义的所有类别,但是当 phone 静音(静音开关打开)时,声音总是在播放。
https://developer.apple.com/reference/avfoundation/avaudiosession/audio_session_categories
我正在播放这样的声音:
系统声音:
AudioServicesPlaySystemSoundWithCompletion(1304, nil)
自定义声音:
let url = Bundle.main.url(forResource: "sound01", withExtension: ".wav")
do {
if audioPlayer != nil {
audioPlayer!.stop()
audioPlayer = nil
}
if let soundURL = soundURL {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: AVAudioSessionCategoryOptions.mixWithOthers)
try AVAudioSession.sharedInstance().setActive(true)
audioPlayer = try AVAudioPlayer(contentsOf: soundURL)
}
guard let audioPlayer = audioPlayer else {
return
}
audioPlayer.prepareToPlay()
audioPlayer.play()
} catch let error {
print(error.localizedDescription)
}
我是不是做错了什么?
修复是使用 AudioServicesPlayAlertSound 函数而不是 AudioServicesPlaySystemSoundWithCompletion 函数。
我们也不能使用AVAudioPlayer。我们需要通过为每个自定义声音创建声音 ID 来使用 AudioServicesPlayAlertSound 函数。
let soundURL = Bundle.main.url(forResource: "test01", withExtension: ".wav")
if let soundURL = soundURL {
var soundID : SystemSoundID = 0
AudioServicesCreateSystemSoundID(soundURL as CFURL, &soundID)
AudioServicesPlayAlertSound(soundID)
}
我正在使用 AudioServicesPlaySystemSoundWithCompletion 播放系统声音,并使用 AVAudioPlayer 播放自定义声音。
为什么打开静音开关会播放声音?我已经尝试了 "AVAudioSession".
的所有类别我尝试了以下代码:
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategorySoloAmbient)
try AVAudioSession.sharedInstance().setActive(true)
也试过这个:
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: AVAudioSessionCategoryOptions.mixWithOthers)
try AVAudioSession.sharedInstance().setActive(true)
我尝试了这个 link 中定义的所有类别,但是当 phone 静音(静音开关打开)时,声音总是在播放。 https://developer.apple.com/reference/avfoundation/avaudiosession/audio_session_categories
我正在播放这样的声音:
系统声音:
AudioServicesPlaySystemSoundWithCompletion(1304, nil)
自定义声音:
let url = Bundle.main.url(forResource: "sound01", withExtension: ".wav")
do {
if audioPlayer != nil {
audioPlayer!.stop()
audioPlayer = nil
}
if let soundURL = soundURL {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: AVAudioSessionCategoryOptions.mixWithOthers)
try AVAudioSession.sharedInstance().setActive(true)
audioPlayer = try AVAudioPlayer(contentsOf: soundURL)
}
guard let audioPlayer = audioPlayer else {
return
}
audioPlayer.prepareToPlay()
audioPlayer.play()
} catch let error {
print(error.localizedDescription)
}
我是不是做错了什么?
修复是使用 AudioServicesPlayAlertSound 函数而不是 AudioServicesPlaySystemSoundWithCompletion 函数。
我们也不能使用AVAudioPlayer。我们需要通过为每个自定义声音创建声音 ID 来使用 AudioServicesPlayAlertSound 函数。
let soundURL = Bundle.main.url(forResource: "test01", withExtension: ".wav")
if let soundURL = soundURL {
var soundID : SystemSoundID = 0
AudioServicesCreateSystemSoundID(soundURL as CFURL, &soundID)
AudioServicesPlayAlertSound(soundID)
}