Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 播放/暂停/停止本地存储的多个音频文件_Ios_Objective C_Avqueueplayer - Fatal编程技术网

Ios 播放/暂停/停止本地存储的多个音频文件

Ios 播放/暂停/停止本地存储的多个音频文件,ios,objective-c,avqueueplayer,Ios,Objective C,Avqueueplayer,我有20首音频曲目,它们存储在我的项目中 我想按顺序播放所有这些文件。为此,我使用了AVQueuePlayer。请检查以下代码以供参考 声明:- @interface ViewController () { AVAudioPlayer *player; NSMutableArray *arrPlayData; AVPlayerItem *item; } @property (nonatomic, retain) AVQueuePlayer *queuePlayer; 按

我有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];
}
一切正常,我面临的问题是暂停按钮。当我点击暂停按钮时,它停止播放。然后,当我再次点击播放按钮时,它会在我暂停播放的同一个地方播放。直到这里一切看起来都很好。但在暂停后播放音频队列时,它会播放音频队列的剩余部分,然后再次播放整个音频队列。不知道如何解决它。为什么它再次播放整个音频队列

有人知道吗?
提前谢谢

整个音频队列将再次播放,因为每次单击
单击\u Play
时,您都从
arrPlayData
插入项目

因此,在
中单击\u Play
检查项目计数,并仅当项目计数
\u 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];
}
@界面视图控制器()
{
暂停时的布尔;
}
-(iAction)单击\u停止:(id)发件人{
[_queueplayerremoveallitems];
}
-(iAction)单击\u暂停:(id)发件人{
[暂停];
frompaise=YES;
}
-(iAction)单击播放:(id)发件人{
对于(int j=0;j
因为您要在
中再次初始化
AVPlayerItem
,请单击\u Play
。 如果
AVPlayerItem
未分配,请获取一个
bool
值并插入
arrPlayData