录音

     // 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篇&录音的更多相关文章

  1. ios开发——实用技术篇Swift篇&播放MP3

    播放MP3 // MARK: - 播放MP3 /*----- mp3 ------*/ //定时器- func updateTime() { //获取音频播放器播放的进度,单位秒 var cuTime ...

  2. ios开发——实用技术篇Swift篇&地址薄、短信、邮件

    //返回按钮事件 @IBAction func backButtonClick() { self.navigationController?.popViewControllerAnimated(tru ...

  3. ios开发——实用技术篇Swift篇&拍照

    拍照 // MARK: - 拍照 func fromPhotograph() { if UIImagePickerController.isSourceTypeAvailable(.Camera) { ...

  4. ios开发——实用技术篇Swift篇&照片选择

    照片选择 // MARK: - 选择照片 /*----- 选择照片 ------*/ @IBAction func addImageButtonClick() { let actionSheet = ...

  5. ios开发——实用技术篇Swift篇&系统声音

    系统声音 // MARK: - 系统声音 /*----- 系统声音 ------*/ @IBAction func systemSound() { //建立的SystemSoundID对象 var s ...

  6. ios开发——实用技术篇Swift篇&视频

    视频 // MARK: - 播放视频 /*----- 播放视频 ------*/ func moviePlayerPreloadFinish(notification:NSNotification) ...

  7. ios开发——实用技术篇Swift篇&加速计和陀螺仪

    加速计和陀螺仪 //返回按钮事件 @IBAction func backButtonClick() { self.navigationController?.popViewControllerAnim ...

  8. ios开发——实用技术篇Swift篇&多点触摸与手势识别

    多点触摸与手势识别 //点击事件 var atap = UITapGestureRecognizer(target: self, action: "tapDo:") self.vi ...

  9. ios开发——实用技术篇OC篇&iOS的主要框架

    iOS的主要框架         阅读目录 Foundation框架为所有的应用程序提供基本系统服务 UIKit框架提供创建基于触摸用户界面的类 Core Data框架管着理应用程序数据模型 Core ...

随机推荐

  1. 开学了!这些Linux认证你要知道。

    导读 大家好,今天我们将认识一些非常有价值的全球认可的Linux认证.Linux认证是不同的Linux专业机构在全球范围内进行的认证程序.Linux认证可以让Linux专业人才可以在服务器领域或相关公 ...

  2. 【LeetCode 201】Bitwise AND of Numbers Range

    Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers ...

  3. windows各种程序中文显示乱码又找不到原因时

    我电脑上的各种程序,如xshell,Navicat for MySQL都不正常显示中文,该软件的编码,utf-8,gbk,gb2312来回切换好几回,没一次正常,最好解决办法如下       进入控制 ...

  4. node.js study: cluster

    从v0.6.x开始,Node.js提供了多进程模块cluster,允许创建一组进程来共享同一个socket,并且分担负载压力.官方文档是这样说的:A single instance of Node.j ...

  5. memcpy、memmove、memset及strcpy函数实现和理解

    memcpy.memmove.memset及strcpy函数实现和理解 关于memcpy memcpy是C和C++ 中的内存拷贝函数,在C中所需的头文件是#include<string.h> ...

  6. 通过实验分析system_call中断处理过程

    作者:吴乐 山东师范大学 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 本实验目的:通过以一个简单的m ...

  7. MVC3.0在各个版本IIS中的部署

    概述: 最近在做一个MVC 3的项目,在部署服务器时破费了一番功夫,特将过程整理下来,希望可以帮到大家! 本文主要介绍在IIS5.1.IIS6.0.IIS7.5中安装配置MVC 3的具体办法! 正文: ...

  8. 常用的CSS Hack技术集锦

    来源:http://www.ido321.com/938.html 一.什么是CSS Hack? 不同的浏览器对CSS的解析结果是不同的,因此会导致相同的CSS输出的页面效果不同,这就需要CSS Ha ...

  9. oc_转_类的数组的实现和操作

    OC的数组对象的基本方法的使用:因为OC的数组中存储的为对象类型,所以我们可以新建一个Person类,通过Person生成对象进行操作. 其中Person.h中的代码为:   01.#import&l ...

  10. jira部署,主机迁移,数据库迁移,jira

    1,linux环境下快速部署; wget http://wpc.29c4.edgecastcdn.net/8029C4/downloads/software/jira/downloads/atlass ...