您好我尝试了类似问题的各种解决方案,但无法让我的代码工作。我在我的应用程序中调用了以下函数:
func PlaySound (WhenToPlaySound:String) {
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, error: nil)
AVAudioSession.sharedInstance().setActive(true, error: nil)
if WhenToPlaySound == "BeginningOfRound" {
if UIApplication.sharedApplication().applicationState == UIApplicationState.Background {
soundnotification.soundName = "BoxingBellStart.wav"
UIApplication.sharedApplication().scheduleLocalNotification(soundnotification)
println("timer is done in background mode")
} else {
// Load Sound
soundlocation = NSBundle.mainBundle().URLForResource("BoxingBellStart", withExtension: "wav")!
player = AVAudioPlayer(contentsOfURL: soundlocation, error: &Error)
player.volume = 1.0
// Play Sound
player.play()
println("timer is done in active mode")
}
} else {
if UIApplication.sharedApplication().applicationState == UIApplicationState.Background {
soundnotification.soundName = "Boxing.wav"
UIApplication.sharedApplication().scheduleLocalNotification(soundnotification)
println("timer is done in background mode")
} else {
// Load Sound
soundlocation = NSBundle.mainBundle().URLForResource("Boxing", withExtension: "wav")!
player = AVAudioPlayer(contentsOfURL: soundlocation, error: &Error)
player.volume = 1.0
// Play Sound
player.play()
println("timer is done in active mode")
}
}
}
除了两件事之外,它大部分都有效:
<击> 1。我无法覆盖扬声器音量。我希望在播放声音之前系统音量为全音量。 击>
为了解决我想要的第一个问题,但我不知道如何使用它:
AVAudioSession.sharedInstance().overrideOutputAudioPort(<#portOverride: AVAudioSessionPortOverride#>, error: <#NSErrorPointer#>)
提前致谢, 王牌
答案 0 :(得分:1)
overrideOutputAudioPort
会影响音频路由,而不会影响音量。
如果您想要&#34;覆盖扬声器音量&#34;,我认为您的意思是要从您的应用代码控制系统输出音量。这是不可能的,因为Apple认为输出量应始终保持在用户的控制之下。
AVAudioPlayer的volume
属性将卷 relative 设置为系统输出级别。默认为1.0(播放器音量==系统音量)。你不能把它更高,脊柱式的风格,改为1.1 ......
另请参阅我的回答here ...如果您想控制系统音量,则需要MPVolumeView提供的用户界面。
同样关于您的通知 - 如果用户将设备静音,您的应用就无法忽略该设置。
更新
关于通知,它并不像我建议的那样简单。如果将AVAudioSession类别设置为AVAudioSessionCategoryPlayback
(和read the apple docs on this setting),则可能会有效。
使用此类别时,您的应用音频将继续,静音开关设置为静音或屏幕锁定
您可能还需要添加音频&#39;到UIBackgroundModes
的{{1}}。