播放/暂停/停止本地存储的多个audio文件

我有20个音轨,存储在我的项目本地。

我想按顺序播放所有文件。 为此,我使用了AVQueuePlayer。 请检查下面的代码以供参考。

宣言 :-

@interface ViewController () { AVAudioPlayer *player; NSMutableArray *arrPlayData; AVPlayerItem *item; } @property (nonatomic, retain) AVQueuePlayer *queuePlayer; 

button点击如下,

 -(IBAction)click_Play:(id)sender { for (int j = 0; j < arrPlayData.count; j++) { path =[[NSBundle mainBundle] pathForResource:[[arrPlayData objectAtIndex:j] valueForKey:@"AudioName"] ofType:@"wav"]; item = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:path]]; if (_queuePlayer == nil) { _queuePlayer = [[AVQueuePlayer alloc] initWithPlayerItem:item]; } else{ [_queuePlayer insertItem:item afterItem:nil]; } } [_queuePlayer setVolume:1.0]; [_queuePlayer play]; } 

然后暂停button我写下面的代码,

 -(IBAction)click_Pause:(id)sender { [_queuePlayer pause]; } 

并在停止button,我写下面的代码,

 -(IBAction)click_Stop:(id)sender { [_queuePlayer removeAllItems]; } 

一切正常,我面临的问题是与PAUSEbutton。 当我点击暂停button停止播放。 然后当我点击播放button时,它再次从我暂停它的地方播放。 直到这里一切看起来不错。 但在暂停后播放audio队列时,播放audio队列的剩余部分,再次播放整个audio队列。 不知道如何解决它。 为什么它再次播放整个audio队列?

任何人有想法? 提前致谢!

整个audio队列正在再次播放,因为每次单击arrPlayData都要从arrPlayData中插入项目。

因此,在click_Play检查项目的计数,并且仅当项目_queuePlayer计数为零时相应地处理插入项目。

 @interface ViewController () { BOOL FromPause; } -(IBAction)click_Stop:(id)sender { [_queuePlayer removeAllItems]; } -(IBAction)click_Pause:(id)sender { [_queuePlayer pause]; FromPause=YES; } -(IBAction)click_Play:(id)sender { for (int j = 0; j < arrPlayData.count; j++) { path =[[NSBundle mainBundle] pathForResource:[[arrPlayData objectAtIndex:j] valueForKey:@"AudioName"] ofType:@"wav"]; item = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:path]]; if (_queuePlayer == nil) { _queuePlayer = [[AVQueuePlayer alloc] initWithPlayerItem:item]; } else{ if(FromPause){ //don't add again FromPause=NO; } else{ [_queuePlayer insertItem:item afterItem:nil]; } } } [_queuePlayer setVolume:1.0]; [_queuePlayer play]; } 

由于您是在click_Play再次初始化AVPlayerItem 。 如果AVPlayerItem未分配,请取一个bool值并插入arrPlayData