播放/暂停/停止本地存储的多个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
。