如何将我的音频会话默认行为设置为快速播放?

Posted

技术标签:

【中文标题】如何将我的音频会话默认行为设置为快速播放?【英文标题】:how do I set my Audio Session Default Behavior to Playback in swift? 【发布时间】:2015-08-01 19:33:23 【问题描述】:

我的应用具有“点击”声音功能。我用了

import AVFoundation

然后以下函数运行“点击”声音:

var audioPlayer = AVAudioPlayer()

func playSound() 
    var soundPath = NSBundle.mainBundle().pathForResource("tick", ofType: "wav")
    var soundURL = NSURL.fileURLWithPath(soundPath!)
    self.audioPlayer = AVAudioPlayer(contentsOfURL: soundURL, error: nil)
    self.audioPlayer.play()

现在,如果用户正在运行音乐播放器,我的应用程序会导致音乐播放器停止。我在文档中阅读了有关音频会话默认行为的信息,但我不知道如何应用它。

你能帮忙吗?

谢谢!

【问题讨论】:

【参考方案1】:

如果你想知道 swift 2 的语法,这里是:

    let audiosession = AVAudioSession.sharedInstance()
    do 
        try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions: .DuckOthers)
     catch 
        print("AVAudioSession cannot be set: \(error)")
    

【讨论】:

谢谢! Swift 2.0 错误处理使用 do catch 对我来说仍然是一个新概念,你在这里完美地拼出了它。非常感谢。【参考方案2】:

根据您希望应用的行为方式,即您的应用的音效或音乐应如何与其他应用的背景音频会话进行交互,您可能需要同时调整音频会话类别和 categoryOption。

如果你只是想播放音效,比如“滴答”的声音,那么应该分别使用 AVAudioSessionCategoryAmbient 和 DuckOthers ,例如:

let audioSession = AVAudioSession.sharedInstance()
var error: NSErrorPointer = nil
audioSession.setCategory(AVAudioSessionCategoryAmbient, withOptions: .DuckOthers, error: error)

但是,我想您实际上是在尝试播放声音效果,在这种情况下,AudioServices API 是更合适的选择。您可以查看 AudioToolbox 框架中的 func AudioServicesPlaySystemSound(inSystemSoundID: SystemSoundID) 了解更多详情。

另一个常见的场景。如果您想让您的应用独占播放音频,即使有其他应用在后台播放音乐,您也需要将类别设置为 AVAudioSessionCategorySoloAmbient,例如:

let audioSession = AVAudioSession.sharedInstance()
var error: NSErrorPointer = nil
audioSession.setCategory(AVAudioSessionCategorySoloAmbient, error: error)

我希望你已经得到了你想要的东西。

【讨论】:

感谢您的回答 utogaria,我在上面的问题中添加了一行缺失的代码。我不知道这是否会有所作为,但我没有太多经验来理解在哪里以及如何放入您的代码,是否有更简单的解释来说明在哪里以及如何应用这些代码?

以上是关于如何将我的音频会话默认行为设置为快速播放?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 无法在扬声器上播放并将音频会话设置为录制

Core Audio(音频单元)音频会话和 MPVolumeView

iOS 7 背景音频

音频会话中断通知

何时以及如何正确停用您的音频会话?

如何使用连接池将我的 mgo 会话转换为 mongo-go-driver 客户端?