我正在研究一个需要使用AVFoundation
框架播放一些声音的iOS应用程序。在Xcode 4的工作空间结构,包含两个项目:AVAudioPlayer不播放任何声音
- 工作区
- 应用程序本身(主体工程)
- 一个实用程序库
建立实用程序库后,导致在主应用程序中使用静态库作为框架。
因此,当试图通过使用下面的代码在主应用程序内播放声音时,它按预期工作。
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
有关吗?
在此先感谢。
你能告诉我们什么是错误变量输出? AVAudioPlayer * audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; –
@Maudicus,正如我所说,播放声音后错误为零。我找到了解决方案,它与我没有提及但没有考虑的事情有关:我正在编译ARC。 ARC向音频播放器插入一个释放调用,所以在离开创建它的方法之后,释放调用被解除分配,如[在这里]解释的那样(http://stackoverflow.com/questions/7692866/avaudioplayer-stops-playing-immediately -with-arc) – msoler
对不起,我复制了你的代码,它工作。错过了关于错误的陈述是零。我很高兴它解决了 –