关闭

AVAudioPlayer的简单使用

标签: currentTimemeteringEnabledratefileTypeHintAVAudioPlayer
266人阅读 评论(0) 收藏 举报
分类:
首先要#import <AVFoundation/AVFoundation.h>

你懂得


先做一些准备工作

NSString *path = [[NSBundle mainBundle] pathForResource:@"幸福的歌谣.mp3" ofType:nil];

NSURL *url = [NSURL fileURLWithPath:path];  

NSData *data = [NSData dataWithContentsOfURL:url];

NSError *error;


创建AVAudioPlayer 

     第一种方法创建 用路径创建

  self.player = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:&error];

  第二种创建 data创建

  self.player = [[AVAudioPlayer alloc]initWithData:data error:&error];

  第三种方式创建 我的理解是fileTypeHint是对要播放文件的一个小提示 比如播放的是MP3格式的 MP3

  但是 你随便写其他的字符串 也不会警告报错,但是这个方法就没有意义了 还不如第一种第二种呢

  self.player = [[AVAudioPlayer alloc]initWithContentsOfURL:url fileTypeHint:@"mp11114" error:&error];

  第四种

  self.player = [[AVAudioPlayer alloc]initWithData:data fileTypeHint:@"222222" error:&error];

   

    判断有没有成功创建

  if (self.player) {

    NSLog(@"创建播放器成功");

    

          设置播放器播放时的声音

    范围从0.0~1.0 0.0代表静音 1.0代表最大声音 默认是

    self.player.volume = 0.1;

    

 

         这个属性设置立体音 代表立体声 -1full left1 full right

    戴耳机设置1或者-1  只有一个响 我也不知道那个是左声道和右声道

    self.player.pan = 0;

    

   

          允许设置播放器改变播放器的播放速度

    默认是no 若是no 改变不了播放器的速度

    self.player.enableRate = YES;

    

   

         设置播放器的播放速度 1是正常的速度

    默认是1 范围是从0.5~2

    self.player.rate = 1;


          准备好播放

    [self.player prepareToPlay];

    

   

          默认是0 0代表只播放一次

    设置负值的话 就是无限播放 知道你手动停止

    self.player.numberOfLoops = -1;

    

    设置代理

    self.player.delegate=self;

    

   

    settings 这是一个字典 字典的key 和value值如下

    NSLog(@"settings %@",self.player.settings);

    /*

     AVEncoderBitRateKey = 0;

     AVFormatIDKey = 778924083;

     AVNumberOfChannelsKey = 2;

     AVSampleRateKey = 44100;

     */

    

    numberOfChannels默认是2 属性是只读的 是播放音频的声道

    NSLog(@"channel %lu",(unsigned long)self.player.numberOfChannels);

    

    

   

         默认是nil 当不是空得时候 这个数组元素的个数必须和numberOfChannels的个数一样

    NSLog(@"channelAssignments %@",self.player.channelAssignments);

    

   

          duration 是指这个播放器的播放当前音频的总时间

    只能是get方法 不能set

    NSLog(@"duration %f",self.player.duration);

    

    

    int time1 = (int)self.player.deviceCurrentTime ;

    int day =time1/60/60/24;

    int hour = (time1 -day*60*60*24)/60/60;

    int minite =(time1 - hour*60*60-day*60*60*24)/60;

    int second = time1 - hour*6*60 -minite*60-day*60*60*24;

     时间是19 10:29:17 不知道这个时间是那个时间 貌似是运行在手机上,手机的时间 但是不是,我测试来着

     求大神指导 这个属性

    NSLog(@"时间是%d %d:%d:%d",day,hour,minite,second);

    NSLog(@"deviceCurrentTime %f",self.player.deviceCurrentTime);

    

   

         创建的时候 若用data创建 data不为空 这个data就是创建时候的data

    NSLog(@"self.player.data %@",self.player.data);

    创建的时候 若用url创建 url不为空 这个data就是创建时候的url

    NSLog(@"self.player.url  %@",self.player.url);


    

  }else{

    

    NSLog(@"创建播放器失败 %@",error.localizedDescription);

    

  }


#pragma mark - AVAudioPlayerDelegat

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{

  

  成功播放完毕的时候调用

  若是无限次播放 不停止的话 这个方法不会调用

  NSLog(@"成功播放完毕");

  

}

-(void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)erro{

  

  解码有错误发生时调用

  NSLog(@"解码有错误发生");

  

  

}

还有一些是处理中断的一些方法 但是苹果不建议使用了 就不做介绍了


点击按钮

-(void)clickButton:(UIButton *)button{

  

  int tag =(int)button.tag;


  switch (tag) {

    case 100:播放

              暂时不知道 这个方法  官方有demo 但是貌似懂 貌似又不懂,如图


      [self.player playAtTime:5];

      播放 并调用prepareToPlay(若prepareToPlay没有调用的话)


      [self.player play];

      

             开启仪表计数功能 默认为no

      self.player.meteringEnabled = YES;

      

              更新仪表读数 

      [ self.player updateMeters];

      

              读取每个声道的平均电平和峰值电平,代表每个声道的分贝数,范围在-1000之间。

      for(int i = 0; i<self.player.numberOfChannels;i++){

        float power = [self.player averagePowerForChannel:i];

        float peak = [self.player peakPowerForChannel:i];

      }


      

      break;

    case 101:

      

              暂停 调用这个方法让播放器停止prepareToPlay 而并没有把这个播放器销毁

      [self.player pause];

      

      break;

    case 102:

  

               停止 这个停止方法并没有把currenTime设置为0

      [self.player stop];

      

              设置播放器的播放当前音频的播放时间 当前进度 0 下一次播放时从头开始播放

      这个属性是播放当前音频的时间

      self.player.currentTime=0;

      

      break;

      

    default:

      break;

  }

  

}


本人比较菜  若哪里有不妥 不对的地方求大神多多指出。谢谢啦









0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:19726次
    • 积分:707
    • 等级:
    • 排名:千里之外
    • 原创:52篇
    • 转载:0篇
    • 译文:1篇
    • 评论:0条