// 准备歌曲数据
NSString *path = [[NSBundle mainBundle] pathForResource:@"Alan Walker - Fade.mp3" ofType:nil];
NSData *musicData = [NSData dataWithContentsOfFile:path];
// 初始化音频播放器(依据 NSData 初始化)
NSError *errorMsg = nil;
self.player = [[AVAudioPlayer alloc] initWithData:musicData error:&errorMsg];
errorMsg == nil ?: NSLog(@"%@", errorMsg);
self.player.meteringEnabled = YES; // 启用电平
self.player.enableRate = YES; // 启用播放变速
self.player.numberOfLoops = -1; // 0只播放一次, -1无限循环, 正数是几播放几次
// NSLog(@"%@", self.player.settings); // 显示音频文件最基础信息
// Timer 更新播放进度条
[NSTimer scheduledTimerWithTimeInterval:.1
target:self
selector:@selector(updateProgressView)
userInfo:nil
;
self.slid.minimumValu repeats:YES];
// 重新设置 Slider 的初值
self.slid.value = 0e = 0;
self.slid.maximumValue = self.player.duration;
}
- (void)updateProgressView {
// progress 的进度范围是 0~1
// 当前播放进度 = 当前播-放时间 ÷ 总时间
// duration 音频总时间
// currentTime 当前的播放时间
self.jindu.progress = self.player.currentTime / self.player.duration;
// 电平
[self.player updateMeters];
[self.pv0 setProgress:([self.player averagePowerForChannel:0] + 160) / 160 animated:YES];
[self.pv1 setProgress:([self.player averagePowerForChannel:1] + 160) / 160 animated:YES];
}
- (IBAction)bofang:(UIButton *)sender {
// 延时播放 (当前设备播放时间 + 延时时间)
// [self.player playAtTime:[self.player currentTime] + 10];
// 一个按钮实现暂停、播放功能
if (self.player.playing) {
[self.player pause];
[sender setImage:[UIImage imageNamed:@"1"] forState:UIControlStateNormal];
} else {
[self.player play];
[sender setImage:[UIImage imageNamed:@"2"] forState:UIControlStateNormal];
}
}
- (IBAction)sli:(UISlider *)sender {
// // self.player.volume = sender.value; // 0~1, 1以后等效于增益, 音质下降
// // self.player.rate = sender.value; // 0.5~2, 播放速度系数, 1是默认值(原速度)
// self.player.currentTime = sender.value;
// self.player.rate = 50;
// ---------------------- 功能分区 -----------------------------
// self.player.volume = sender.value; // 音量控制[0,1], 1以后等效于增益, 音质下降, 负的会变最大
// self.player.rate = sender.value; // 播放速度系数(0,+∞], 需要大于0, 0~1是降速、1~+∞是加速.对应着要把slidert的初始化最大值gaiyixia
self.player.currentTime = sender.value; // 当前播放时间 (通过 Slider 来修改播放进度)
}