我正在尝试使用AVAudioPlayer创建一种音频播放列表。所以我使用了以下代码:
的·H 的
<AVAudioPlayerDelegate>
{
AVAudioPlayer *audioPlayer;
}
@property (nonatomic, retain) AVAudioPlayer *audioPlayer;
的的.m 的
@synthesize audioPlayer;
- (void)viewDidLoad
{
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
audioPlayer.numberOfLoops = 0;
audioPlayer.delegate = self;
[audioPlayer play];
}
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
if (flag)
{
[player release];
currentSong = currentSong + 1;
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:[songs objectAtIndex:currentSong] ofType:@"mp3"]];
artist.text = [artists objectAtIndex:currentSong];
song.text = [songs objectAtIndex:currentSong];
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
audioPlayer.delegate = self;
audioPlayer.numberOfLoops = 0;
[audioPlayer initWithContentsOfURL:url error:nil];
[audioPlayer play];
}
}
这适用于两首歌曲,但在此之后没有任何音频。知道为什么会这样吗?
谢谢, 丹尼斯
答案 0 :(得分:1)
在这一行中你正在创建一个音频播放器:
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
然后你在这一行再次启动它(不需要复制,可能还有一个保留):
[audioPlayer initWithContentsOfURL:url error:nil];
然后下一次循环出现,即使你使用行
释放它[player release];
...存在问题,因为它仍在内存中,占用硬件编解码器或浪费资源。尝试删除第二行initWithContents…
,因为这是不必要的。
答案 1 :(得分:0)
1.只需保持阵列
2.一旦你创建了audioPlayer的实例 - 添加到数组并调用play并释放audioPlayer的实例(因为它会在你添加到数组后保留)。
3.在audioPlayerDidFinishPlaying中从该数组中删除audioPlayer。
因此,您可以一次播放多个文件