首页 > iOS AVAudioPlayer播放 AVAudioRecorder录音问题

iOS AVAudioPlayer播放 AVAudioRecorder录音问题

如何保证只有1个Player在播放或者?

目前是,对于1个app内,很多个AVAudioPlayer Play.或者,AVAudioRecorder record .其他可以被打断?不需要我自己弄个全局变量保存正在播放的player.和正在录音的 recorder.
众所周知,我们的app播放可以打断别人的app的声音。

个人感觉打断也分为,直接中断和减弱别人的声音?不知道有没有

题外话,AVAudioPlayer的网络链接直接播放缓存问题

AVAudioPlayer 可以直接通过网址播放,但是这样看不到下载的进度,和最后要不要保留已经下好的。如果重新播放,都将进行重新下载。如网易云音乐就做的很好。


1.一个app内的多个player是可以同时播放的,之前做的音乐播放没处理好就会出现两首歌同时播放的情况o(╯□╰)o
2.放在全局里面的好处就是不需要那么多的初始化和setting设置,会节省很多时间
3.是否打断之类的模式在setCategory方法中的AVAudioSessionCategoryPlayAndRecord等值的设置,不能一一解释,我记得有人是通过一张表格去解释每个选项是否打断(包括本app和与其他app)、是否占用输入、是否占用输出等,现在找不到了,就给一些我用过的设置吧,record时用的是AVAudioSessionCategoryPlayAndRecord,play的时候比较多,AVAudioSessionCategoryPlayback是指即使硬件静音也阻止不了发出声音,还有其他的设置就参照apple doc吧,改动太多,不好解释。类似下代码:

 //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 }

4.关于云音乐的,体验下来可能也是有些瑕疵的,简单的做法是这样的,先播放流媒体,同时下载,progress实际上就是下载的进度,如果流媒体卡顿,则拿到currentTime用本地播放,如果没有卡顿则一直播放流媒体。可能有更好的方法,抛砖引玉了。

希望能够帮到你

【热门文章】
【热门文章】