播放MP3
// MARK: - 播放MP3 /*----- mp3 ------*/ //定时器- func updateTime() { //获取音频播放器播放的进度,单位秒 var cuTime:Float = Float(audioPlayer.currentTime) //更新进度条 jinDuSlider.value = cuTime //获取总时间 var duTime:Float = Float(audioPlayer.duration) //播放时间秒数,换算成:时、分、秒 var hour1:Int = Int(cuTime/(*)) var minute1:Int = Int(cuTime/) var second1:Int = Int(cuTime%) //总时间秒数,换算成:时、分、秒 var hour2:Int = Int(duTime/(*)) var minute2:Int = Int(duTime/) var second2:Int = Int(duTime%) //label显示 // timeLabel.text = NSString(format: "%.2d:%.2d:%.2d / %.2d:%.2d:%.2d",hour1,minute1,second1,hour2,minute2,second2) //2015年5月2后修改 timeLabel.text = NSString(format: "%.2d:%.2d:%.2d / %.2d:%.2d:%.2d",hour1,minute1,second1,hour2,minute2,second2) as String } //播放按钮事件 @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) } //暂停 @IBAction func audioPauseButton(sender:UIButton) { var 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=; timeLabel.text = ""; } } //调 进度 @IBAction func jinDuChange(sender:UISlider) { //获取jinDuSlider的值来设置音频播放器进度 audioPlayer.currentTime = NSTimeInterval(jinDuSlider.value) //播放器播放 audioPlayer.play() } //控制声音 @IBAction func audioSoundChange(sender:UISlider) { //获取UISlider对象的值,并设置audioPlayer.volume audioPlayer.volume = sender.value aLabel.text = "\(sender.value)" } //播放代理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) { //音频播放结束中断 } /*-----mp3 end------*/
ios开发——实用技术篇Swift篇&播放MP3的更多相关文章
-
ios开发——实用技术篇Swift篇&;视频
视频 // MARK: - 播放视频 /*----- 播放视频 ------*/ func moviePlayerPreloadFinish(notification:NSNotification) ...
-
ios开发——实用技术篇Swift篇&;录音
录音 // MARK: - 录音 /*----- 录音 ------*/ var recorder:AVAudioRecorder? //录音器 var player:AVAudioPlayer? / ...
-
ios开发——实用技术篇Swift篇&;系统声音
系统声音 // MARK: - 系统声音 /*----- 系统声音 ------*/ @IBAction func systemSound() { //建立的SystemSoundID对象 var s ...
-
ios开发——实用技术篇Swift篇&;地址薄、短信、邮件
//返回按钮事件 @IBAction func backButtonClick() { self.navigationController?.popViewControllerAnimated(tru ...
-
ios开发——实用技术篇Swift篇&;拍照
拍照 // MARK: - 拍照 func fromPhotograph() { if UIImagePickerController.isSourceTypeAvailable(.Camera) { ...
-
ios开发——实用技术篇Swift篇&;照片选择
照片选择 // MARK: - 选择照片 /*----- 选择照片 ------*/ @IBAction func addImageButtonClick() { let actionSheet = ...
-
ios开发——实用技术篇Swift篇&;加速计和陀螺仪
加速计和陀螺仪 //返回按钮事件 @IBAction func backButtonClick() { self.navigationController?.popViewControllerAnim ...
-
ios开发——实用技术篇Swift篇&;多点触摸与手势识别
多点触摸与手势识别 //点击事件 var atap = UITapGestureRecognizer(target: self, action: "tapDo:") self.vi ...
-
ios开发——实用技术篇OC篇&;iOS的主要框架
iOS的主要框架 阅读目录 Foundation框架为所有的应用程序提供基本系统服务 UIKit框架提供创建基于触摸用户界面的类 Core Data框架管着理应用程序数据模型 Core ...
随机推荐
-
display用法:
用法: 1.display:fixed: 存在于position定位top,left,right,bottom,fixed:脱离文档流的针对于浏览器窗口大小定位,可以更好的解决"缩小浏览器窗 ...
-
纯css3实现旋转的太极图
效果图: 代码如下: <!DOCTYPE html> <html> <head lang="zh"> <meta charset=&quo ...
-
c与c++中的extern const的区别和联系
最近复习c++,发现了这个东西. c语言里面,我们在一个.c文件中用const定义了一个全局变量后,可以在另一个.c文件中用extern const来引用,但在c++中在链接的时候会报undefine ...
-
禁止掉非法IP登陆服务器
今天查看线上服务器日志/var/log/secure发现有很多国外的ip尝试登陆服务器,以前一直没太注意这方面,作为系统管理员真是失职啊,虽然服务器已经设置了强密码,但是看到有人想搞你还是很不爽的.一 ...
-
建模算法(八)&mdash;&mdash;插值
插值:求过已知有限个数据点的近似函数 拟合:已知有限个数据点,求近似函数,不要求过已知数据点,只要求在某种意义下在这些点的误差最小 (一)插值方法 一.拉格朗日多项式插值 1.插值多项式 就是做出一个 ...
-
HDU 4819 Mosaic(13年长春现场 二维线段树)
HDU 4819 Mosaic 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4819 题意:给定一个n*n的矩阵,每次给定一个子矩阵区域(x,y,l) ...
-
自定义视图(继承View)
前言 Android提供了丰富的控件,但是有时候还是不能满足自己的需求,这时候就需要自定义视图了,自定义视图分为几种,一种为继承为View的,一种为继承于ViewGroup的.继承于View的需要我们 ...
-
HTTP - 内容编码
HTTP 应用程序有时在发送之前需要对内容进行编码.例如,在把很大的 HTML 文档发送给通过慢速连接上来的客户端之前,服务器可能就会对它进行压缩,这样有助于减少传输实体的时间. 内容编码过程 内容编 ...
-
html背景为灰色 不能操作,中间div可以操作
<container style="position: absolute; top: 0px; left: 0px; width: 0px; height: 0px; z-index: ...
-
《C++ Primer》之面向对象编程(三)
继承情况下的类作用域 在继承情况下,派生类的作用域嵌套在基类作用域中.如果不能在派生类作用域中确定名字,就在外围基类作用域中查找该名字的定义.正是这种类作用域的层次嵌套使我们能够直接访问基类的成员,就 ...