下载地址:http://pan.baidu.com/s/1gegGLJd
我的布局和参考资料上的不太一样,下面是我的布局
上面的截图中,也显示我在辅助编辑器中关联控件的名字了。
MP3 歌曲一首。
/* 关于声道的属性pan的说明: -1.0:左声道 0.0 :混合声道 1.0 :右声道 关于播放速率属性rate的说明 1、数值类型为浮点型 2、范围:0.5-2.0 3、1.0表示正常播放 注意,若要自定义播放速率,必须对enableRete属性进行设置: 语法形式入下 var enableRate:Bool true:允许改变播放速率 false:不允许改变播放速率 */ import UIKit import AVFoundation class ViewController: UIViewController { /// 控件关联 /// 播放按钮 @IBOutlet weak var playBtn: UIButton! /// 快进按钮 @IBOutlet weak var forwardAudioBtn: UIButton! /// 快退按钮 @IBOutlet weak var backwardBtn: UIButton! // 音量 @IBOutlet weak var volumeSlider: UISlider! // 声道 @IBOutlet weak var pan: UISegmentedControl! /// 播放速率 @IBOutlet weak var rateText: UITextField! // 显示音乐时长 @IBOutlet weak var durationLabel:UILabel! // 定时器 var timer:NSTimer? = nil; // 当前时长进度 @IBOutlet weak var currentLabel: UILabel! // 进度条进度 @IBOutlet weak var processSlider: UISlider! var audioEffect:AVAudioPlayer? = nil; override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let path = NSBundle.mainBundle().pathForResource("1.mp3", ofType: nil); let pathURL = NSURL(fileURLWithPath:path!); /// 打开音频文件 do { audioEffect = try AVAudioPlayer(contentsOfURL: pathURL); } catch _ { audioEffect = nil; } // 设置进图条的初始值为0 processSlider.value = Float(0); /// 添加音频文件到缓存中 audioEffect?.prepareToPlay(); // 初始化音量大小 audioEffect?.volume = volumeSlider.value; // 初始化声道为混合声道 audioEffect?.pan = 0.0; // 获取分钟数 let durationMinutes:Int = Int(audioEffect!.duration / 60); // 获取秒数 let durationSeconds:Int = Int(audioEffect!.duration - Double(durationMinutes * 60)); // 显示当前进度 durationLabel.text = "\(durationMinutes):\(durationSeconds)"; } /// 播放按钮单击事件 @IBAction func playBtnClicked(sender: AnyObject) { // 播放 audioEffect?.play(); playBtn.addTarget(self, action: "pauseAudio", forControlEvents: .TouchUpInside); // 添加定时器 timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: ("updateProcess"), userInfo: nil, repeats: true); } // 定时器实现 func updateProcess() { // 获取分钟数 let currenTimeMinutes = Int(audioEffect!.currentTime / 60); // 获取秒数 let currentSeconds = Int(audioEffect!.currentTime - Double(currenTimeMinutes * 60)); currentLabel.text = "\(currenTimeMinutes):\(currentSeconds)"; // 设置当前播进度 processSlider.value = Float(audioEffect!.currentTime/audioEffect!.duration); } /** 点击播放按钮,实现暂停 */ func pauseAudio() { audioEffect?.pause(); // 在方法中要获取对象,可以在action中,方法名后面加上 冒号 “:” playBtn.addTarget(self, action: "playBtnClicked:", forControlEvents: .TouchUpInside); // 让定时失效 timer?.invalidate(); } /** 快进按钮单击事件 - parameter sender: UIButton */ @IBAction func forwardAudioBtnClicked(sender: AnyObject) { // 判断音频文件是否正在播放 if (audioEffect!.playing) { // 音频文件正在播放,实现前进 let desiredTime = (self.audioEffect?.currentTime)! + 20.0; // 判断设置的时间是否小于音频文件的总时间 if (desiredTime < self.audioEffect?.duration) { // 设置当前播放的事件 self.audioEffect?.currentTime = desiredTime; } } else { /// 提示框 let alertController = UIAlertController(title: "提示", message: "音乐没有开始播放", preferredStyle: UIAlertControllerStyle.Alert); let action = UIAlertAction(title: "OK", style: .Default, handler: nil); alertController.addAction(action); self.presentViewController(alertController, animated:true, completion:nil); } } /** 快退按钮单击事件 - parameter sender: 快退按钮被单击触发的事件 */ @IBAction func backwardBtnClicked(sender: UIButton) { // 判断当前是否正在播放音频文件 if (audioEffect!.playing) { // 实现后退 let desiredTime = (self.audioEffect?.currentTime)! - 20.0; // 判断指定的时间是不是小于0 if( 0 > desiredTime) { audioEffect?.currentTime = 0.0; } else { audioEffect?.currentTime = desiredTime; } } else { /// 提示框 let alertController = UIAlertController(title: "提示", message: "音乐没有开始播放", preferredStyle: UIAlertControllerStyle.Alert); let action = UIAlertAction(title: "OK", style: .Default, handler: nil); alertController.addAction(action); self.presentViewController(alertController, animated:true, completion:nil); } } /** 设置音量 */ @IBAction func setVolume(sender: UISlider) { audioEffect?.volume = volumeSlider.value; } // 设置声道 @IBAction func SetPan(sender: UISegmentedControl) { let index = pan.selectedSegmentIndex; if (0 == index) { audioEffect?.pan = -1.0; } else if (1 == index) { audioEffect?.pan = 0.0; } else { audioEffect?.pan = 1.0; } } // 设置播放速率 @IBAction func SetPlayRate(sender: UITextField) { // 关闭键盘 rateText.resignFirstResponder(); // 判断音频文件是否播放 if (false == audioEffect!.playing || 0.0 == audioEffect?.currentTime) { // 没有开始播放, 设置允许改变播放速率 audioEffect?.enableRate = true; let rateValue = NSString(string: rateText.text!).floatValue; // 设置播放速率 audioEffect?.rate = rateValue; } else { /// 提示框 let alertController = UIAlertController(title: "提示", message: "音乐已经开始播放,设置无效", preferredStyle: UIAlertControllerStyle.Alert); let action = UIAlertAction(title: "OK", style: .Default, handler: nil); alertController.addAction(action); self.presentViewController(alertController, animated:true, completion:nil); } } /** 设置当前播放进度 */ @IBAction func setCurrentProcess(sender: UISlider) { // 判断当前是否播放 if (audioEffect!.playing) { // 设置播放时间 audioEffect!.currentTime = Double(processSlider.value) * Double(audioEffect!.duration); } else { /// 提示框 let alertController = UIAlertController(title: "提示", message: "音乐没有播放,设置无效", preferredStyle: UIAlertControllerStyle.Alert); let action = UIAlertAction(title: "OK", style: .Default, handler: nil); alertController.addAction(action); self.presentViewController(alertController, animated:true, completion:nil); } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }