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 ...
随机推荐
- C# 替换文本文件中的某一行
C# 替换文本文件中的某一行 (要求此文件存在) /// <summary> /// LineIndex 表示新的内容所在的行位置 /// </summary> /// < ...
- rman的conver方法拷贝ASM文件
rman中的conver命令主要用户跨平台传输表空间,也可以完成从ASM何本地文件系统中拷贝文件,比用dbms_file_transfer方法要简单 从ASM拷贝到文件系统: 拷贝表空间 在拷贝表空间 ...
- 解决PHP5.3.x下ffmpeg安装配置问题
本人的环境: OS : windows 7 64位 WAMP:2.1a PHP:5.3.3(之前是5.3.13) 项目需要用ffmpeg-php实现上传视频转码截图等功能,但是找了很多资料都没有把ff ...
- [Java基础]Java通配符
转自:http://peiquan.blog.51cto.com/7518552/1303768 本以为这会是一篇比较基础的博客,可一旦深究的时候,才发现很多有意思的东西,也发现了很多令人迷惑的地方. ...
- 《Java数据结构与算法》笔记-CH2无序数组
/** * 本章目标: * 1.自制数组类 * 2.有序数组:按关键字升降序排列:二分法查找 * 3.分析有序数组.大O表示法 */ /** * 自制数组类 书中有的地方有错误,本程序以修改 */ c ...
- SRM 502 DIV1 500pt(DP)
题目简述 给定比赛时间T和n个题目,你可以在任意时间提交题目,每个题目有一个初始分数maxPoints[i],每个单位时间题目的分数将会减少pointsPerMinute[i],即如果在时间t解决了第 ...
- 安卓app开发方式之webApp
1.phonegap: 专注于webapp调用native的功能.2.ionic: 专注于webapp的前端ui技术,需要与phonegap(准确的说是和Cordova配合使用).ionic是一个专注 ...
- 纯CSS基于窗口垂直居中
都是IE8+的 <!DOCTYPE html> <html> <head> <title>基于窗口垂直居中 by 司徒正美</title> ...
- JNI调用测试
有需求使用JNI调用,籍着这个机会按照<Linux下测试Java的JNI(Java Native Interface)>上进行了下测试. 这篇文章记录得很清楚了,对原理未做深入的分析,希望 ...
- HDU 4893 Wow! Such Sequence! (线段树)
Wow! Such Sequence! 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4893 Description Recently, Doge ...