录音
// 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中的移位运算符:<;<;,>;>;,>;>;>;总结
java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >& ...
-
顺序查找SequentialSearch
#include <stdio.h>int SequentialSearch(int *a,int n,int x);int main(void){ //num代表查找的数 int num ...
-
Javascript基础回顾 之(一) 类型
本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...
-
第一个web框架tornado
简介 tornado,是我学到的第一个web框架是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google ...
-
MFC ADO连接Oracle12c数据库 客户端环境搭建
ADO连接方式一:Provider=MSDAORA.1; 环境配置如下: 去官网下载ODAC121024Xcopy_32bit.zip安装 安装方式如下: (1)解压文件 (2)用命令行CD到该文件的 ...
-
Winform中如何实现父窗体传递数据到子窗体并刷新子窗体
原理:利用委托和事件,本文将以图文并茂的例子讲述,告诉我们So Easy --------------------------------------------------------------- ...
-
viewpager中对fragment的操作
XXAdatper xxAdapter = (XXAdatper)viewpager.getAdapter(); XXFragment xxFragment= (XXFragment )adapte ...
-
【Todo】【转载】ES6的学习记录
粗略看了一遍React的内容,然后看了 ES6 的入门文章: http://es6.ruanyifeng.com/#docs/intro 通过这个链接可以查看浏览器对 ES6 的支持程度: http: ...
-
RabbitMQ进程结构分析与性能调优
RabbitMQ是一个流行的开源消息队列系统,是AMQP(高级消息队列协议)标准的实现,由以高性能.健壮.可伸缩性出名的Erlang语言开发,并继承了这些优点.业界有较多项目使用RabbitMQ,包括 ...
-
postman连续添加多个订单&;jmeter快速审核添加订单
预期效果:添加多个订单,并审核(半自动?) 1.postman添加多个订单 post请求(postman基础的操作比较简单,网上有很详细的解说),单个接口保存[save] 单个接口保存[save],点 ...