我正在开发一个需要使用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];
与之相反的是,当尝试使用与上述相同的代码在实用程序库中播放完全相同的声音(或任何其他声音)时,根本不会播放任何声音,尽管错误为 nil 并且 audioPlayer 属性值是正确的(通道数,持续时间)。我已经确保
AVFoundation
框架在两个项目中都存在。此外,我的类使用
AVAudioPlayerDelegate
协议并实现了这两个方法:- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag;
- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error;
尝试播放声音后,没有调用这些方法之一。
如果我使用 AudioToolbox
框架,那么它会播放声音。但是出于几个原因,我希望使用 AVFoundation
。
有什么想法吗?我是否遗漏了 AVFoundation
的某些东西?这可能与从静态库中使用 AVAudioPlayer
有关吗?
提前感谢。