iOS之基于FreeStreamer的简单音乐播放器示例

2020-01-21 02:24:13于海丽

到此为止,我们一个简单的播放器就差不多实现了,但是这...并没有完,相比QQ音乐而言,它还差一个播放顺序切换的功能和锁屏播放功能

4、切换播放顺序

这个比较简单,只是需要注意在切换的时候,注意数组的越界和不同模式的处理

这里,我定义了如下几种模式


typedef NS_ENUM(NSInteger,GLLoopState){
  GLSingleLoop = 0,//单曲循环
  GLForeverLoop,//重复循环
  GLRandomLoop,//随机播放
  GLOnceLoop//列表一次顺序播放
};

切换代码


//不同状态下 播放歌曲
- (void)playMusicForState
{
  switch (self.loopState) {
    case GLSingleLoop:
    {
      [self playMusicAtIndex:self.currentIndex];
    }
      break;
    case GLForeverLoop:
    {
      if (self.currentIndex == self.musicListArray.count-1) {
        [self playMusicAtIndex:0];
      }else{
        [self playMusicAtIndex:self.currentIndex + 1];
      }
    }
      break;
    case GLRandomLoop:
    {
      //取随机值
      int index = arc4random() % self.musicListArray.count;
      [self playMusicAtIndex:index];
    }
      break;
    case GLOnceLoop:
    {
      if (self.currentIndex == self.musicListArray.count-1) {
        [self stop];
      }else{
        [self playMusicAtIndex:self.currentIndex + 1];
      }
    }
      break;
      
    default:
      break;
  }
}

5、锁屏播放

就如上图2中那样,由于在iOS 11中好像不能支持背景图片和歌词展示,可能是为了界面更加简洁吧,所以我这里也就没有加该功功能,只是简答的有个播放界面和几个控制按钮

首先需要在工程中这样设置,保证在后台播放

iOS,FreeStreamer音乐播放器,音乐播放器,简单音乐播放器

然后就是在appdelegate中添加如下代码


  AVAudioSession *session = [AVAudioSession sharedInstance];
//  [session setActive:YES error:nil];
  [session setActive:YES withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil];
  [session setCategory:AVAudioSessionCategoryPlayback error:nil];
  
  [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

并且添加控制事件


#pragma mark == event response
-(void)remoteControlReceivedWithEvent:(UIEvent *)event{
  
  NSLog(@"%ld",event.subtype);
  
  if (event.type == UIEventTypeRemoteControl) {
    switch (event.subtype) {
      case UIEventSubtypeRemoteControlPlay:
      {
        //点击播放按钮或者耳机线控中间那个按钮
        [[GLMusicPlayer defaultPlayer] pause];
      }
        break;
      case UIEventSubtypeRemoteControlPause:
      {
        //点击暂停按钮
        [[GLMusicPlayer defaultPlayer] pause];
      }
        break;
      case UIEventSubtypeRemoteControlStop :
      {
        //点击停止按钮
        [[GLMusicPlayer defaultPlayer] stop];
      }
        break;
      case UIEventSubtypeRemoteControlTogglePlayPause:
      {
        //点击播放与暂停开关按钮(iphone抽屉中使用这个)
        [[GLMusicPlayer defaultPlayer] pause];
      }
        break;
      case UIEventSubtypeRemoteControlNextTrack:
      {
        //点击下一曲按钮或者耳机中间按钮两下
        [[GLMusicPlayer defaultPlayer] playNext];
      }
        break;
      case UIEventSubtypeRemoteControlPreviousTrack:
      {
        //点击上一曲按钮或者耳机中间按钮三下
        [[GLMusicPlayer defaultPlayer] playFont];
      }
        break;
      case UIEventSubtypeRemoteControlBeginSeekingBackward:
      {
        //快退开始 点击耳机中间按钮三下不放开
      }
        break;
      case UIEventSubtypeRemoteControlEndSeekingBackward:
      {
        //快退结束 耳机快退控制松开后
      }
        break;
      case UIEventSubtypeRemoteControlBeginSeekingForward:
      {
        //开始快进 耳机中间按钮两下不放开
      }
        break;
      case UIEventSubtypeRemoteControlEndSeekingForward:
      {
        //快进结束 耳机快进操作松开后
      }
        break;
        
      default:
        break;
    }
    
  }
}