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 ...
随机推荐
- 开学了!这些Linux认证你要知道。
导读 大家好,今天我们将认识一些非常有价值的全球认可的Linux认证.Linux认证是不同的Linux专业机构在全球范围内进行的认证程序.Linux认证可以让Linux专业人才可以在服务器领域或相关公 ...
- 【LeetCode 201】Bitwise AND of Numbers Range
Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers ...
- windows各种程序中文显示乱码又找不到原因时
我电脑上的各种程序,如xshell,Navicat for MySQL都不正常显示中文,该软件的编码,utf-8,gbk,gb2312来回切换好几回,没一次正常,最好解决办法如下 进入控制 ...
- node.js study: cluster
从v0.6.x开始,Node.js提供了多进程模块cluster,允许创建一组进程来共享同一个socket,并且分担负载压力.官方文档是这样说的:A single instance of Node.j ...
- memcpy、memmove、memset及strcpy函数实现和理解
memcpy.memmove.memset及strcpy函数实现和理解 关于memcpy memcpy是C和C++ 中的内存拷贝函数,在C中所需的头文件是#include<string.h> ...
- 通过实验分析system_call中断处理过程
作者:吴乐 山东师范大学 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 本实验目的:通过以一个简单的m ...
- MVC3.0在各个版本IIS中的部署
概述: 最近在做一个MVC 3的项目,在部署服务器时破费了一番功夫,特将过程整理下来,希望可以帮到大家! 本文主要介绍在IIS5.1.IIS6.0.IIS7.5中安装配置MVC 3的具体办法! 正文: ...
- 常用的CSS Hack技术集锦
来源:http://www.ido321.com/938.html 一.什么是CSS Hack? 不同的浏览器对CSS的解析结果是不同的,因此会导致相同的CSS输出的页面效果不同,这就需要CSS Ha ...
- oc_转_类的数组的实现和操作
OC的数组对象的基本方法的使用:因为OC的数组中存储的为对象类型,所以我们可以新建一个Person类,通过Person生成对象进行操作. 其中Person.h中的代码为: 01.#import&l ...
- jira部署,主机迁移,数据库迁移,jira
1,linux环境下快速部署; wget http://wpc.29c4.edgecastcdn.net/8029C4/downloads/software/jira/downloads/atlass ...