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 ...
随机推荐
- 《Python 学习手册4th》 第八章 列表与字典
''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书) “重点 ...
- MATLAB常用数据类型的转换
一直以来,在使用MATLAB进行运算的过程中,经常会用到对图像的各种处理,因此需要对图像进行数据转换,因此对经常用到的转换进行整理,方便查看. 1.uint8转化为double用来方便图像的运算: d ...
- spoj 839 Optimal Marks(二进制位,最小割)
[题目链接] http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17875 [题意] 给定一个图,图的权定义为边的两端点相抑或值的 ...
- bzoj 1419 Red is good(期望DP)
[题意] R红B蓝,选红得1选蓝失1,问最优状态下的期望得分. [思路] 设f[i][j]为i个Rj个B时的最优期望得分,则有转移式为: f[i][j]=max{ 0,(f[i-1][j]+1)*(i ...
- mybatis系列-06-输入映射
通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型 6.1 传递pojo的包装对象 6.1.1 需求 完成用户信息的综合查询,需要 ...
- [Hive - LanguageManual] Alter Table/Partition/Column
Alter Table/Partition/Column Alter Table Rename Table Alter Table Properties Alter Table Comment Add ...
- Iaas概述
IAAS :设施即服务,为开发者提供存储,计算,网络等资源,整体架构如下图: 整体分为三个部分: 1.Iaas云的管理部分:对整个云有超级用户管理权限,可以查看监控整个云中的资源,租户信息,并进行管理 ...
- JSP学习笔记(一)
注释: 1.单行注释<!-- -->或者// <%@ page language="java" import="java.util.*" co ...
- HDU-4747 Mex 线段树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4747 题意:求一个数列中,所有mex(L,R)的和. 注意到mex是单调不降的,那么首先预处理出mex ...
- stm32f407 定时器 用的APB1 APB2 及 定时器频率
上午想要用Timer10做相对精确的延时功能,但是用示波器发现实际延时数值总是只有一半,百思不得其解.仔细查阅各处资料结合实际研究后对stm32f407的14个定时器的时钟做一个总结: 下面来源: h ...