//recorder设置
recordSession = AVAudioSession.sharedInstance()
recordSession.setCategory(AVAudioSessionCategoryPlayAndRecord, error: nil)
//player设置
self.player.volume = 1.0
self.player.delegate = self
let session = AVAudioSession.sharedInstance()
session.setCategory(AVAudioSessionCategoryPlayback, error: nil)
//Player的设置有多种玩法
/* MixWithOthers is only valid with AVAudioSessionCategoryPlayAndRecord, AVAudioSessionCategoryPlayback, and AVAudioSessionCategoryMultiRoute */
static var MixWithOthers: AVAudioSessionCategoryOptions { get }
/* DuckOthers is only valid with AVAudioSessionCategoryPlayAndRecord, AVAudioSessionCategoryPlayback, and AVAudioSessionCategoryMultiRoute */
static var DuckOthers: AVAudioSessionCategoryOptions { get }
/* AllowBluetooth is only valid with AVAudioSessionCategoryRecord and AVAudioSessionCategoryPlayAndRecord */
static var AllowBluetooth: AVAudioSessionCategoryOptions { get }
/* DefaultToSpeaker is only valid with AVAudioSessionCategoryPlayAndRecord */
static var DefaultToSpeaker: AVAudioSessionCategoryOptions { get }
1.一个app内的多个player是可以同时播放的,之前做的音乐播放没处理好就会出现两首歌同时播放的情况o(╯□╰)o
2.放在全局里面的好处就是不需要那么多的初始化和setting设置,会节省很多时间
3.是否打断之类的模式在setCategory方法中的AVAudioSessionCategoryPlayAndRecord等值的设置,不能一一解释,我记得有人是通过一张表格去解释每个选项是否打断(包括本app和与其他app)、是否占用输入、是否占用输出等,现在找不到了,就给一些我用过的设置吧,record时用的是AVAudioSessionCategoryPlayAndRecord,play的时候比较多,AVAudioSessionCategoryPlayback是指即使硬件静音也阻止不了发出声音,还有其他的设置就参照apple doc吧,改动太多,不好解释。类似下代码:
4.关于云音乐的,体验下来可能也是有些瑕疵的,简单的做法是这样的,先播放流媒体,同时下载,progress实际上就是下载的进度,如果流媒体卡顿,则拿到currentTime用本地播放,如果没有卡顿则一直播放流媒体。可能有更好的方法,抛砖引玉了。
希望能够帮到你