AVAudioPlayer不能播放任何声音
我正在研究需要使用AVFoundation
框架播放一些声音的iOS应用程序。 Xcode 4中的工作区结构包含两个项目:
在构建实用程序库之后,它会生成一个静态库,该库在主应用程序中用作框架。
所以,当试图通过使用下面的代码在主应用程序内播放声音时,它按预期工作。
NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
NSString *path = [NSString stringWithFormat:@"%@/sound.mp3", resourcePath];
NSURL *url = [NSURL fileURLWithPath:path];
NSError *error = nil;
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url
error:&error];
[audioPlayer play];
相反,当试图使用与上述相同的代码在实用程序库内播放完全相同的声音(或任何其他声音)时,即使错误为零且audioPlayer属性值为正确声音(数字的频道,持续时间)。
我已经确定AVFoundation
框架在两个项目中。
另外,我的类使用AVAudioPlayerDelegate
协议并实现了这两种方法:
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag;
- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error;
尝试播放声音后,不会调用这些方法。
如果我使用AudioToolbox
框架,那么它会播放声音。 但我有兴趣使用AVFoundation
有几个原因。
对发生了什么的任何想法? 我是否错过了AVFoundation
一些内容? 它可能与在静态库中使用AVAudioPlayer
有关吗?
提前致谢。
我找到了解决方案,它与我没有提及并没有考虑的事情有关:我正在使用自动引用计数(ARC)进行编译。
ARC向音频播放器插入释放呼叫,因此它在离开创建方法后立即释放。 它与AVAudioPlayer
无关,但与ARC无关。
为了解决这个问题,我刚刚为处理声音的类创建了一个AVAudioPlayer
属性,以便它不再由ARC发布。 至少,这个类在发布之前不会被释放。
有关ARC的更多信息,请参阅自动引用计数:清零弱引用,并详细说明为什么出现此问题。
是的,一点没错; ARC也是我的代码的原因。
我介绍了一个属性:
@property (strong, nonatomic) AVAudioPlayer *audioPlayer;
这使一切工作良好。
使用它它肯定会工作....
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
NSURL *url = [NSURL fileURLWithPath:@"path of the sound file :)"];
_player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
[_player setDelegate:self];
[_player prepareToPlay];
[_player play];
链接地址: http://www.djcxy.com/p/50999.html