你懂得
先做一些准备工作
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代表最大声音 默认是1
self.player.volume = 0.1;
这个属性设置立体音 0 代表立体声 -1是full left和1 是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];
读取每个声道的平均电平和峰值电平,代表每个声道的分贝数,范围在-100~0之间。
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;
}
}