AVAudioPlayer仅初始化一些文件

时间:2010-04-12 20:17:34

标签: iphone objective-c cocoa-touch avaudioplayer

我在使用files播放AVAudioPlayer时遇到问题。当我尝试播放某个m4a时,它运行正常。它也适用于我尝试的mp3。然而,无论我尝试播放它们的顺序如何,它每次都会失败一次mp3(15步,由Radiohead)。虽然视图加载和同时发生的所有事情都正确发生,但音频不是play。代码如下。我得到了“玩家加载”。另外两首歌的日志输出,但不是15步。我知道file path是正确的(我在应用程序中先前输出了日志,这是正确的)。有什么想法吗?

NSData *musicData = [NSData dataWithContentsOfURL:[[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:[song filename] ofType:nil]]];

NSLog([[NSBundle mainBundle] pathForResource:[song filename] ofType:nil]);
if(musicData)
{
    NSLog(@"File found.");
}

self.songView.player = [[AVAudioPlayer alloc] initWithData:musicData error:nil];

if(self.songView.player) 
{
    NSLog(@"Player loaded.");
}

[self.songView.player play];
NSLog(@"You should be hearing something now.");

2 个答案:

答案 0 :(得分:1)

很抱歉这么晚才进入派对。只想发布一个提示,以便将来对任何提及此内容的人都有用。

shaggy frog答案的小修正。正确的用法是:

NSError *anError = nil;
anAVAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:someURL] error:&anError];
if (!anAVAudioPlayer) {
    NSLog(@"localizedDescription : %@", [anError localizedDescription]);
}

答案 1 :(得分:0)

NSData *musicData = [NSData dataWithContentsOfURL:[[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:[song filename] ofType:nil]]];

此处,问题案例是musicData nil吗?

此外:

self.songView.player = [[AVAudioPlayer alloc] initWithData:musicData error:nil];

对于采用nil对象的方法,您不应传递NSError。如果你正确使用它,它可能会更多地解决你的问题:

NSError* error = nil;
self.songView.player = [[AVAudioPlayer alloc] initWithData:musicData error:&error];
if (error)
{
    NSLog(@"Error with initWithData: %@", [error localizedDescription]);
}