ios audioplayer播放声音失败是由于最简单的错误

本文探讨了iOS应用中使用AVAudioPlayer播放音频遇到的问题及解决办法。作者发现当开启Objective-C++自动引用计数时,音频播放会异常停止。通过深入研究,最终确定问题是由于AVAudioPlayer实例在播放未完成前就被释放导致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如题。。。

网上下了某播放音频的demo工程,真机调试一切正常。

自己照着写了一个,竟然播放不出任何声音,查询所有的代码,找不到不对的地方,一个很诡异的状况是:正常运行播放不了任何声音,单步调试到audio player播放的地方,声音竟然出来了。。。。。。难道是主线程中断了audio player的播放?

AVAudioPlayer * avPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:recordedTmpFile error:&error];

[avPlayer prepareToPlay];

[avPlayer play];


问google大神,发现ios5之后有很多这样的情况。

一个不靠谱的解决方案是:

	AVURLAsset* audioAsset = [AVURLAsset URLAssetWithURL:TmpFile options:nil];
    	CMTime audioDuration = audioAsset.duration;
    	float audioDurationSeconds = CMTimeGetSeconds(audioDuration);
  在播放的代码之后,将线程强制sleep音乐的时间。。。。。。。
	[NSThread sleepForTimeInterval:audioDurationSeconds];
	http://stackoverflow.com/questions/8269037/ios-5-avaplayer-not-working-anymore
      这个答案。。。不得不说外国人有时候也挺有才的。。。。
     最后实在没有办法,就按工作经验来,打开build setting一个一个核对。。。。。。。安静
     竟然发现:是开启了apple LLVM compiler的 "objective--c++ automatic reference counting ABI incompatibility"!!!
    我去!!!这不是编译器自动替我计算引用计数的强大功能么。。。。。。。瞬间了悟了。
	原来avplayer在play过后,运行到了作用域结尾,结束引用,被release掉了,声音自然就停了。
	这个故事教育我们:1.出了问题不要都怪在苹果的LLVM上,大部分情况是代码本身的问题
					2.不求甚解是一件多么具有摧毁力的事情。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值