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