ios开发——实用技术篇Swift篇&录音
录音
- // MARK: - 录音
- /*----- 录音 ------*/
- var recorder:AVAudioRecorder? //录音器
- var player:AVAudioPlayer? //播放器
- var recorderSettingsDic:[NSObject : AnyObject]? //录音器设置参数数组
- var volumeTimer:NSTimer!//定时器线程, 刷新音量
- var aacPath:String? //录音存储路径
- @IBOutlet var soundLodingImageView:UIImageView!//录音音量显示视图
- //按下录音
- @IBAction func downAction()
- {
- var error:NSError?
- //初始化录音器
- recorder = AVAudioRecorder(URL: NSURL(string: aacPath!), settings: recorderSettingsDic, error: &error)
- if ((recorder) != nil) {
- //开启仪表计数功能
- recorder!.meteringEnabled = true;
- //准备录音
- recorder!.prepareToRecord()
- //开始录音
- recorder!.record()
- //启动定时器 定时更新录音音量
- volumeTimer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "levelTimer", userInfo: nil, repeats: true)
- }
- }
- //松开 结束录音
- @IBAction func upAction()
- {
- //停止录音
- recorder?.stop()
- //录制器释放
- recorder = nil
- //暂停定时器
- volumeTimer.invalidate()
- volumeTimer = nil
- //界面音量归0现实
- soundLodingImageView.image = UIImage(named: "RecordingSignal001")
- }
- //播放录制的声音
- @IBAction func playAction()
- {
- var playerError:NSError?
- //播放
- player = nil;
- player = AVAudioPlayer(contentsOfURL: NSURL(string: aacPath!), error: &playerError)
- if (player == nil)
- {
- println("ERror creating player: \(playerError?.description)")
- }else{
- player?.play()
- }
- }
- //定时器方法--检测录音音量
- func levelTimer()
- {
- recorder!.updateMeters()//刷新音量数据
- let averageV:Float = recorder!.averagePowerForChannel()//获取音量的平均值
- let maxV:Float = recorder!.peakPowerForChannel()//获取音量的最大值
- let lowPassResults:Double = pow(Double(), Double(0.05 * maxV))
- println("\(lowPassResults)")
- if (lowPassResults>=0.8) {
- soundLodingImageView.image = UIImage(named: "RecordingSignal8.png")
- }else if(lowPassResults>=0.7){
- soundLodingImageView.image = UIImage(named: "RecordingSignal7.png")
- }else if(lowPassResults>=0.6){
- soundLodingImageView.image = UIImage(named: "RecordingSignal6.png")
- }else if(lowPassResults>=0.5){
- soundLodingImageView.image = UIImage(named: "RecordingSignal5.png")
- }else if(lowPassResults>=0.4){
- soundLodingImageView.image = UIImage(named: "RecordingSignal4.png")
- }else if(lowPassResults>=0.3){
- soundLodingImageView.image = UIImage(named: "RecordingSignal3.png")
- }else if(lowPassResults>=0.2){
- soundLodingImageView.image = UIImage(named: "RecordingSignal2.png")
- }else if(lowPassResults>=0.1){
- soundLodingImageView.image = UIImage(named: "RecordingSignal1.png")
- }else{
- soundLodingImageView.image = UIImage(named: "RecordingSignal1.png")
- }
- }
实现:
- titleLabel.text = titleString
- let mp3Path = NSBundle.mainBundle().pathForResource("xiaoPingGuo", ofType: "mp3")
- let fileUrl = NSURL.fileURLWithPath(mp3Path!)
- audioPlayer = AVAudioPlayer(contentsOfURL: fileUrl, error: nil)
- audioPlayer.prepareToPlay()
- //以下录音使用
- //初始化录音器
- let session:AVAudioSession = AVAudioSession.sharedInstance()
- //初始化一个NSError对象,失败的时候可以获取失败原因
- var error:NSError?
- //设置录音类型
- session.setCategory(AVAudioSessionCategoryPlayAndRecord, error: &error)
- //设置支持后台
- session.setActive(true, error: &error)
- //获取Document目录
- // let docDir = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
- //2015年5月2后修改
- let docDir = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, ] as! String
- //组合录音文件路径
- aacPath = docDir + "/play.aac"
- //初始化字典
- recorderSettingsDic = Dictionary()
- //字典添加设置参数
- recorderSettingsDic!.updateValue(NSNumber(long: kAudioFormatMPEG4AAC), forKey: AVFormatIDKey)
- recorderSettingsDic!.updateValue(NSNumber(), forKey: AVSampleRateKey)
- recorderSettingsDic!.updateValue(NSNumber(), forKey: AVNumberOfChannelsKey)
- recorderSettingsDic!.updateValue(NSNumber(), forKey: AVLinearPCMBitDepthKey)
- recorderSettingsDic!.updateValue(NSNumber(bool: false), forKey: AVLinearPCMIsBigEndianKey)
- recorderSettingsDic!.updateValue(NSNumber(bool: false), forKey: AVLinearPCMIsFloatKey)
ios开发——实用技术篇Swift篇&录音的更多相关文章
- ios开发——实用技术篇Swift篇&播放MP3
播放MP3 // MARK: - 播放MP3 /*----- mp3 ------*/ //定时器- func updateTime() { //获取音频播放器播放的进度,单位秒 var cuTime ...
- 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篇&系统声音
系统声音 // MARK: - 系统声音 /*----- 系统声音 ------*/ @IBAction func systemSound() { //建立的SystemSoundID对象 var s ...
- ios开发——实用技术篇Swift篇&视频
视频 // MARK: - 播放视频 /*----- 播放视频 ------*/ func moviePlayerPreloadFinish(notification:NSNotification) ...
- 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 ...
随机推荐
- Java SE 6 新特性: Java DB 和 JDBC 4.0
http://www.ibm.com/developerworks/cn/java/j-lo-jse65/index.html 长久以来,由于大量(甚至几乎所有)的 Java 应用都依赖于数据库,如何 ...
- C++ STL算法系列1---count函数
一.count函数 algorithm头文件定义了一个count的函数,其功能类似于find.这个函数使用一对迭代器和一个值做参数,返回这个值出现次数的统计结果. 编写程序读取一系列int型数据,并将 ...
- [持续更新]android stduio的一些小技巧
1.导入第三方jar 无法和eclipse一样可以直接刷新就可以导入libs里的jar,要到jar文件上右键按add jar. 2.其他依赖项目里有support-v4包的时候 在Libs里还是要有s ...
- HDU 3584-Cube(三维BIT)
题意: 给你三维空间两种操作,给出两顶点坐标,把它们确定范围(长方体)内的数全部取反.查询给定点的值.初始全部为零 分析: 有了前面的知识,用BIT实现区间更新单点查询,再用多维实现即可 #inclu ...
- KVO KVC
@interface FoodData : NSObject { NSString * foodName; float foodPrice; } @end ////////////////////// ...
- TestNG传参的几种方式
1. 通过parameter传参 java代码部分: import org.testng.annotations.Parameters; import org.testng.annotations.T ...
- Rust 中的继承与代码复用
在学习Rust过程中突然想到怎么实现继承,特别是用于代码复用的继承,于是在网上查了查,发现不是那么简单的. C++的继承 首先看看c++中是如何做的. 例如要做一个场景结点的Node类和一个Sprit ...
- ASM中的别名
在ASM中的别名,是为了方便管理. 在ASM中创建别名,一种是在RDBMS中创建,另外一种是在ASM中创建,区别就是在ASM中创建的别名,在RDBMS中是不可见的. 在RDBMS中创建别名: SQL& ...
- Tkinter教程之Message篇
本文转载自:http://blog.csdn.net/jcodeer/article/details/1811326 '''Tkinter教程之Message篇'''#Message也是用来显示文本的 ...
- 使用Ant发布hadoop代码到服务器
首先,搭建Ant环境: 1.1.下载antzip包,可以直接从官网下,也可以从我的csdn账号下载,这里我使用的Ant版本是:apache-ant-1.8.4-bin CSDN Ant 所需jar包下 ...