音频播放AVFoundation框架
一、系统声音
ios应用中的提醒声音、游戏背景音乐等。可以播放的格式有CAF、AIF、WAV。
系统声音服务提供了一个API,但是没有操作声音和控制音量的功能,因此如果为多媒体或者游戏创建专门的声音,就不要使用系统声音服务。
其中支持三种类型:声音、提醒、震动。
1、首先导入AudioToolbox.framework框架。
2、系统声音服务不是通过类实现的,而是通过传统的C语言函数调用来触发播放操作。要播放音频需要使用两个函数AudioServicesCreateSystemSoundID和AudioServicePlaySystemSound。
- // MARK: - 系统声音
- /*----- 系统声音 ------*/
- @IBAction func systemSound()
- {
- //建立的SystemSoundID对象
- var soundID: SystemSoundID = 0
- //获取声音文件地址
- let path = NSBundle.mainBundle().pathForResource("SaoMa", ofType: "wav")
- //地址转换
- let baseURL = NSURL(fileURLWithPath: path!)
- //赋值
- AudioServicesCreateSystemSoundID(baseURL , &soundID)
- //使用AudioServicesPlaySystemSound播放
- AudioServicesPlaySystemSound(soundID)
- }
- /*----- 系统提醒 ------*/
- @IBAction func systemAlert()
- {
- //建立的SystemSoundID对象
- var soundID: SystemSoundID = 0
- //获取声音文件地址
- let path = NSBundle.mainBundle().pathForResource("SaoMa", ofType: "wav")
- //地址转换
- let baseURL = NSURL(fileURLWithPath: path!)
- //赋值
- AudioServicesCreateSystemSoundID(baseURL , &soundID)
- //使用AudioServicesPlayAlertSound播放
- AudioServicesPlayAlertSound(soundID)
- }
- /*----- 系统震动 ------*/
- @IBAction func systemVibration()
- {
- //建立的SystemSoundID对象
- let soundID = SystemSoundID(kSystemSoundID_Vibrate)
- //使用AudioServicesPlaySystemSound播放
- AudioServicesPlaySystemSound(soundID)
- }
二、AV音频播放器
1、导入AVFoundation.framework。
2、声明一个AVAudioPlayer对象。
- @IBOutlet var timeLabel:UILabel!//播放的时间/总时间
- @IBOutlet var jinDuSlider:UISlider!//进度条
- var _timer:NSTimer!//定时器线程, 刷新进度条
- let mp3Path = NSBundle.mainBundle().pathForResource("xiaoPingGuo", ofType: "mp3")
- let fileUrl = NSURL.fileURLWithPath(mp3Path!)
- do
- {
- audioPlayer = try AVAudioPlayer(contentsOfURL: fileUrl)
- }
- catch let error as NSError {
- print("初始化播放器失败:\(error)")//如果失败,error 会返回错误信息
- }
- audioPlayer.prepareToPlay()
- //播放按钮事件
- @IBAction func audioPlayButton()
- {
- if audioPlayer.playing
- {
- return;//如果已在播放,跳出
- }
- //开始播放音频文件
- audioPlayer.play()
- //设置进图条最小是=0
- jinDuSlider.minimumValue = 0.0;
- //设置进度条最大值等于声音的描述
- jinDuSlider.maximumValue = Float(audioPlayer.duration)
- //启动定时器 定时更新进度条和时间label 在updateTime方法中实现
- _timer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: "updateTime", userInfo: nil, repeats: true)
- }
- //定时器-
- func updateTime()
- {
- //获取音频播放器播放的进度,单位秒
- let cuTime:Float = Float(audioPlayer.currentTime)
- //更新进度条
- jinDuSlider.value = cuTime
- //获取总时间
- let duTime:Float = Float(audioPlayer.duration)
- //播放时间秒数,换算成:时、分、秒
- let hour1:Int = Int(cuTime/(60*60))
- let minute1:Int = Int(cuTime/60)
- let second1:Int = Int(cuTime%60)
- //总时间秒数,换算成:时、分、秒
- let hour2:Int = Int(duTime/(60*60))
- let minute2:Int = Int(duTime/60)
- let second2:Int = Int(duTime%60)
- //label显示
- timeLabel.text = NSString(format: "%.2d:%.2d:%.2d / %.2d:%.2d:%.2d",hour1,minute1,second1,hour2,minute2,second2) as String
- }
//播放代理 AVAudioPlayerDelegate- func audioPlayerDidFinishPlaying(player: AVAudioPlayer, successfully flag: Bool)
- {
- //成功播放完毕结束
- }
- func audioPlayerDecodeErrorDidOccur(player: AVAudioPlayer, error: NSError?)
- {
- //音频播放器的解码错误
- }
- //@availability(iOS, introduced=2.2, deprecated=8.0)
- func audioPlayerBeginInterruption(player: AVAudioPlayer)
- {
- //音频播放器开始中断
- }
- //@availability(iOS, introduced=6.0, deprecated=8.0)
- func audioPlayerEndInterruption(player: AVAudioPlayer, withOptions flags: Int)
- {
- //音频播放结束中断
- }
- //暂停
- @IBAction func audioPauseButton(sender:UIButton)
- {
- let title = sender.titleForState(UIControlState.Normal)
- if title == "Pause" && audioPlayer.playing
- {
- audioPlayer.pause()
- sender.setTitle("Continue", forState: UIControlState.Normal)
- }
- else if title == "Continue"
- {
- sender.setTitle("Pause", forState: UIControlState.Normal)
- audioPlayer.play()
- }
- }
- //停止
- @IBAction func audioStopButton(sender:UIButton)
- {
- if(audioPlayer.playing)
- {
- audioPlayer.stop()
- audioPlayer.currentTime=0;
- timeLabel.text = "";
- }
- }
- //调 进度
- @IBAction func jinDuChange(sender:UISlider)
- {
- //获取jinDuSlider的值来设置音频播放器进度
- print("当前进度:\(jinDuSlider.value)")
- audioPlayer.currentTime = NSTimeInterval(jinDuSlider.value)
- //播放器播放
- audioPlayer.play()
- }
- //控制声音
- @IBAction func audioSoundChange(sender:UISlider)
- {
- //获取UISlider对象的值,并设置audioPlayer.volume
- audioPlayer.volume = sender.value
- aLabel.text = "\(sender.value)"
- }