IOS控件之音频学习之旅

1、参考资料


下载地址:http://pan.baidu.com/s/1gegGLJd

2、我做了修改的

我的布局和参考资料上的不太一样,下面是我的布局

IOS控件之音频学习之旅_第1张图片

  上面的截图中,也显示我在辅助编辑器中关联控件的名字了。

3、效果图

IOS控件之音频学习之旅_第2张图片

4、准备材料

MP3 歌曲一首。

5、注意

 关于用法,pdf里面讲的很详细。

6、完整源码(备份下,以后复习用得着)

/*

    关于声道的属性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.
    }


}

你可能感兴趣的:(swift,IOS音频应用开发基础)