播放/暂停/停止本地存储的多个音频文件
Posted
技术标签:
【中文标题】播放/暂停/停止本地存储的多个音频文件【英文标题】:Play/Pause/Stop multiple audio file which are stored locally 【发布时间】:2016-03-08 10:20:15 【问题描述】:我有 20 条音轨,它们本地存储在我的项目中。
我想按顺序播放所有这些文件。为此,我使用了 AVQueuePlayer。请检查以下代码以供参考。
声明:-
@interface ViewController ()
AVAudioPlayer *player;
NSMutableArray *arrPlayData;
AVPlayerItem *item;
@property (nonatomic, retain) AVQueuePlayer *queuePlayer;
按钮点击如下,
-(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];
然后在暂停按钮上我写了下面的代码,
-(IBAction)click_Pause:(id)sender
[_queuePlayer pause];
在停止按钮上我写了下面的代码,
-(IBAction)click_Stop:(id)sender
[_queuePlayer removeAllItems];
一切正常,我面临的问题是暂停按钮。当我单击暂停按钮时,它会停止播放。然后当我再次点击播放按钮时,它会从我暂停它的同一个地方播放。直到这里一切看起来都很好。但是在暂停后播放音频队列时,它会播放音频队列的剩余部分,然后再播放一次整个音频队列。不知道怎么解决。为什么它又在播放整个音频队列?
有人知道吗? 提前致谢!
【问题讨论】:
【参考方案1】:整个音频队列再次播放,因为每次点击 click_Play
时,您都在插入来自 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];
【讨论】:
【参考方案2】:因为你在click_Play
中再次初始化AVPlayerItem
。
如果AVPlayerItem
未分配,请取一个bool
值并插入arrPlayData
。
【讨论】:
以上是关于播放/暂停/停止本地存储的多个音频文件的主要内容,如果未能解决你的问题,请参考以下文章