录音

  1. // MARK: - 录音
  2. /*----- 录音 ------*/
  3.  
  4. var recorder:AVAudioRecorder? //录音器
  5. var player:AVAudioPlayer? //播放器
  6. var recorderSettingsDic:[NSObject : AnyObject]? //录音器设置参数数组
  7. var volumeTimer:NSTimer!//定时器线程, 刷新音量
  8. var aacPath:String? //录音存储路径
  9.  
  10. @IBOutlet var soundLodingImageView:UIImageView!//录音音量显示视图
  11.  
  12. //按下录音
  13. @IBAction func downAction()
  14. {
  15. var error:NSError?
  16.  
  17. //初始化录音器
  18. recorder = AVAudioRecorder(URL: NSURL(string: aacPath!), settings: recorderSettingsDic, error: &error)
  19.  
  20. if ((recorder) != nil) {
  21.  
  22. //开启仪表计数功能
  23. recorder!.meteringEnabled = true;
  24.  
  25. //准备录音
  26. recorder!.prepareToRecord()
  27.  
  28. //开始录音
  29. recorder!.record()
  30.  
  31. //启动定时器 定时更新录音音量
  32. volumeTimer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "levelTimer", userInfo: nil, repeats: true)
  33. }
  34.  
  35. }
  36.  
  37. //松开 结束录音
  38. @IBAction func upAction()
  39. {
  40. //停止录音
  41. recorder?.stop()
  42.  
  43. //录制器释放
  44. recorder = nil
  45.  
  46. //暂停定时器
  47. volumeTimer.invalidate()
  48. volumeTimer = nil
  49.  
  50. //界面音量归0现实
  51. soundLodingImageView.image = UIImage(named: "RecordingSignal001")
  52. }
  53.  
  54. //播放录制的声音
  55. @IBAction func playAction()
  56. {
  57. var playerError:NSError?
  58.  
  59. //播放
  60. player = nil;
  61. player = AVAudioPlayer(contentsOfURL: NSURL(string: aacPath!), error: &playerError)
  62.  
  63. if (player == nil)
  64. {
  65. println("ERror creating player: \(playerError?.description)")
  66. }else{
  67. player?.play()
  68. }
  69. }
  70.  
  71. //定时器方法--检测录音音量
  72. func levelTimer()
  73. {
  74. recorder!.updateMeters()//刷新音量数据
  75.  
  76. let averageV:Float = recorder!.averagePowerForChannel()//获取音量的平均值
  77.  
  78. let maxV:Float = recorder!.peakPowerForChannel()//获取音量的最大值
  79.  
  80. let lowPassResults:Double = pow(Double(), Double(0.05 * maxV))
  81. println("\(lowPassResults)")
  82.  
  83. if (lowPassResults>=0.8) {
  84. soundLodingImageView.image = UIImage(named: "RecordingSignal8.png")
  85. }else if(lowPassResults>=0.7){
  86. soundLodingImageView.image = UIImage(named: "RecordingSignal7.png")
  87. }else if(lowPassResults>=0.6){
  88. soundLodingImageView.image = UIImage(named: "RecordingSignal6.png")
  89. }else if(lowPassResults>=0.5){
  90. soundLodingImageView.image = UIImage(named: "RecordingSignal5.png")
  91. }else if(lowPassResults>=0.4){
  92. soundLodingImageView.image = UIImage(named: "RecordingSignal4.png")
  93. }else if(lowPassResults>=0.3){
  94. soundLodingImageView.image = UIImage(named: "RecordingSignal3.png")
  95. }else if(lowPassResults>=0.2){
  96. soundLodingImageView.image = UIImage(named: "RecordingSignal2.png")
  97. }else if(lowPassResults>=0.1){
  98. soundLodingImageView.image = UIImage(named: "RecordingSignal1.png")
  99. }else{
  100. soundLodingImageView.image = UIImage(named: "RecordingSignal1.png")
  101. }
  102.  
  103. }

实现:

  1. titleLabel.text = titleString
  2.  
  3. let mp3Path = NSBundle.mainBundle().pathForResource("xiaoPingGuo", ofType: "mp3")
  4. let fileUrl = NSURL.fileURLWithPath(mp3Path!)
  5.  
  6. audioPlayer = AVAudioPlayer(contentsOfURL: fileUrl, error: nil)
  7. audioPlayer.prepareToPlay()
  8.  
  9. //以下录音使用
  10.  
  11. //初始化录音器
  12. let session:AVAudioSession = AVAudioSession.sharedInstance()
  13.  
  14. //初始化一个NSError对象,失败的时候可以获取失败原因
  15. var error:NSError?
  16.  
  17. //设置录音类型
  18. session.setCategory(AVAudioSessionCategoryPlayAndRecord, error: &error)
  19.  
  20. //设置支持后台
  21. session.setActive(true, error: &error)
  22.  
  23. //获取Document目录
  24. // let docDir = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
  25.  
  26. //2015年5月2后修改
  27. let docDir = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, ] as! String
  28.  
  29. //组合录音文件路径
  30. aacPath = docDir + "/play.aac"
  31.  
  32. //初始化字典
  33. recorderSettingsDic = Dictionary()
  34.  
  35. //字典添加设置参数
  36. recorderSettingsDic!.updateValue(NSNumber(long: kAudioFormatMPEG4AAC), forKey: AVFormatIDKey)
  37. recorderSettingsDic!.updateValue(NSNumber(), forKey: AVSampleRateKey)
  38. recorderSettingsDic!.updateValue(NSNumber(), forKey: AVNumberOfChannelsKey)
  39. recorderSettingsDic!.updateValue(NSNumber(), forKey: AVLinearPCMBitDepthKey)
  40. recorderSettingsDic!.updateValue(NSNumber(bool: false), forKey: AVLinearPCMIsBigEndianKey)
  41. 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. Java SE 6 新特性: Java DB 和 JDBC 4.0

    http://www.ibm.com/developerworks/cn/java/j-lo-jse65/index.html 长久以来,由于大量(甚至几乎所有)的 Java 应用都依赖于数据库,如何 ...

  2. C++ STL算法系列1---count函数

    一.count函数 algorithm头文件定义了一个count的函数,其功能类似于find.这个函数使用一对迭代器和一个值做参数,返回这个值出现次数的统计结果. 编写程序读取一系列int型数据,并将 ...

  3. [持续更新]android stduio的一些小技巧

    1.导入第三方jar 无法和eclipse一样可以直接刷新就可以导入libs里的jar,要到jar文件上右键按add jar. 2.其他依赖项目里有support-v4包的时候 在Libs里还是要有s ...

  4. HDU 3584-Cube(三维BIT)

    题意: 给你三维空间两种操作,给出两顶点坐标,把它们确定范围(长方体)内的数全部取反.查询给定点的值.初始全部为零 分析: 有了前面的知识,用BIT实现区间更新单点查询,再用多维实现即可 #inclu ...

  5. KVO KVC

    @interface FoodData : NSObject { NSString * foodName; float foodPrice; } @end ////////////////////// ...

  6. TestNG传参的几种方式

    1. 通过parameter传参 java代码部分: import org.testng.annotations.Parameters; import org.testng.annotations.T ...

  7. Rust 中的继承与代码复用

    在学习Rust过程中突然想到怎么实现继承,特别是用于代码复用的继承,于是在网上查了查,发现不是那么简单的. C++的继承 首先看看c++中是如何做的. 例如要做一个场景结点的Node类和一个Sprit ...

  8. ASM中的别名

    在ASM中的别名,是为了方便管理. 在ASM中创建别名,一种是在RDBMS中创建,另外一种是在ASM中创建,区别就是在ASM中创建的别名,在RDBMS中是不可见的. 在RDBMS中创建别名: SQL& ...

  9. Tkinter教程之Message篇

    本文转载自:http://blog.csdn.net/jcodeer/article/details/1811326 '''Tkinter教程之Message篇'''#Message也是用来显示文本的 ...

  10. 使用Ant发布hadoop代码到服务器

    首先,搭建Ant环境: 1.1.下载antzip包,可以直接从官网下,也可以从我的csdn账号下载,这里我使用的Ant版本是:apache-ant-1.8.4-bin CSDN Ant 所需jar包下 ...