1.新建single view工程,导入AVFoundation库
2.ViewController.xib如图
3.ViewController.h文件
- #import <UIKit/UIKit.h>
- #import <AVFoundation/AVFoundation.h>
- @interface ViewController : UIViewController {
- //进度
- IBOutlet UISlider *_proSlider;
- //声道
- IBOutlet UISlider *_panSlider;
- //速度
- IBOutlet UISlider *_speedSlider;
- //音量
- IBOutlet UISlider *_volSlider;
- IBOutlet UIProgressView *_proV;
- IBOutlet UIProgressView *_proV2;
- AVAudioPlayer *_player;
- NSTimer *_timer;
- }
- - (IBAction)proSlider:(id)sender;
- - (IBAction)panSlider:(id)sender;
- - (IBAction)speedSlider:(id)sender;
- - (IBAction)volSlider:(id)sender;
- - (IBAction)play:(id)sender;
- - (IBAction)pause:(id)sender;
- @end
4.ViewController.m文件
- #import "ViewController.h"
- @implementation ViewController
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- NSString *path = [[NSBundle mainBundle] pathForResource:@"Beat It" ofType:@"mp3"];
- // NSURL *url = [NSURL URLWithString:path];//不能这样写,因为是本地路径
- NSURL *url = [NSURL fileURLWithPath:path];//本地路径应该这样写
- _player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
- //触发play事件的时候会将mp3文件加载到内存中,然后再播放,所以开始的时候可能按按钮的时候会卡,所以需要prepare
- [_player prepareToPlay];
- //设置支持变速
- _player.enableRate = YES;
- //峰值和平均值
- _player.meteringEnabled = YES;
- }
- - (void)play:(id)sender
- {
- //按播放,开始定时器
- _timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(refresh) userInfo:nil repeats:YES];
- [_player play];
- }
- - (void)pause:(id)sender
- {
- [_player pause];
- //定时器失效
- [_timer invalidate];
- }
- - (void)refresh
- {
- //每隔0.1秒刷新一次进度,当前时间/总时间
- float pro = _player.currentTime/_player.duration;
- [_proSlider setValue:pro animated:YES];
- //averagePowerForChannel和peakPowerForChannel的属性分别为声音的最高振幅和平均振幅
- [_player updateMeters];//不刷新就永远是0
- float pead = ([_player peakPowerForChannel:0]+50)/50;//0左声道,1右声道
- float ave = ([_player averagePowerForChannel:0]+50)/50;//同上
- [_proV setProgress:pead animated:YES];
- [_proV2 setProgress:ave animated:YES];
- }
- //进度
- - (IBAction)proSlider:(id)sender
- {
- //当前时间=总时间*slider.value;
- float curTime = _player.duration*_proSlider.value;
- [_player setCurrentTime:curTime];
- }
- //声道
- - (IBAction)panSlider:(id)sender
- {
- _player.pan = _panSlider.value;
- }
- //速度
- - (IBAction)speedSlider:(id)sender
- {
- _player.rate = _speedSlider.value;
- }
- //音量
- - (IBAction)volSlider:(id)sender
- {
- _player.volume = _volSlider.value;
- }
- @end