苹果开发 笔记(12)AVAudioPlayer

昨天晚上尝试了一下AVAudioPlayer ,正当尝试播放一个歌曲的时候,突然就不播放了。很奇怪的事情发生了,查看了资料,修改了一行代码就好。
原来AVAudioPlayer 被莫名地回收了,是弱引用的缘故吗? 没有报错,很正常 就是歌曲播放不出来。尝试了把AVAudioPlayer 的对象声明strong 后,很顺利播放出来。
AVAudioPlayer播放本地的歌曲还是可以,尝试了网络却不行。不知道为什么,也尝试把其加载到本地用NSData去解决,现在还没实验完成。但是我估计是可行的。
AVAudioPlayer 本身init类型方法有接受NSData参数 也有NSURL参数的。播放期间,遇到卡主的情况,其他代码都执行不到。不知道不是线程问题。加了一个异步执行的线程后,又没事了。
可以说,AVAudioPlayer 这个坑也真不少。一个是对象强弱性引起自动回收,然后歌曲就不能播放。一个是播放歌曲的时候,会卡主 导致其他代码都执行不到没任何反应。我猜想是阻塞了。

    NSError *err =nil;
    NSString *path= [[NSBundle mainBundle] pathForResource:@"2" ofType:@"mp3"];
    NSURL *fileURL = [NSURL fileURLWithPath:path];
    NSData *data = [[NSData alloc]initWithContentsOfURL:fileURL];
    //AVAudioPlayer *player =[[AVAudioPlayer alloc]initWithContentsOfURL:fileURL error:&err];
    AVAudioPlayer *player =[[AVAudioPlayer alloc]initWithData:data error:&err];
    self.audipPlayer = player;
    player.volume =1;
    [player prepareToPlay];    
    BOOL isucess = [player play];
    if (!isucess)
    {
        NSLog(@"%@",err);
    }
    else 
    {
        NSLog(@"播放中");
    }
   AVAudioPlayer *player =[[AVAudioPlayer alloc]initWithContentsOfURL:fileURL error:&err]; 
   这里可以用NSURL做参数。

开始 [player prepareToPlay]; 我很奇怪为什么要这行代码?我尝试去掉后 其实还是可以播放歌曲。

 self.audipPlayer = player;//自定义了一个AVAudioPlayer对象,赋值给它。歌曲就可以播放了。或者直接创建的时候这样处理
 self.audipPlayer =[[AVAudioPlayer alloc]initWithData:data error:&err];

而不是
AVAudioPlayer *player =[[AVAudioPlayer alloc]initWithData:data error:&err]; 直接这样子就没下文了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值