1. #import "HMViewController.h"
  2. #import <AVFoundation/AVFoundation.h>
  3.  
  4. @interface HMViewController ()
  5. - (IBAction)startRecord;
  6. - (IBAction)stopRecord;
  7. @property (nonatomic, strong) AVAudioRecorder *recorder;
  8. @property (nonatomic, strong) CADisplayLink *timer;
  9. @property (nonatomic, strong) NSTimer *stopRecordTimer;
  10. /** 静音的持续时间 */
  11. @property (nonatomic, assign) CGFloat slientDuration;
  12. @end
  13.  
  14. @implementation HMViewController
  15.  
  16. - (void)viewDidLoad
  17. {
  18. [super viewDidLoad];
  19.  
  20. }
  21.  
  22. - (void)addTimer
  23. {
  24. self.timer = [CADisplayLink displayLinkWithTarget:self selector:@selector(update)];
  25. [self.timer addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
  26. }
  27.  
  28. - (void)removeTimer
  29. {
  30. [self.timer invalidate];
  31. self.timer = nil;
  32. }
  33.  
  34. - (void)update
  35. {
  36. // 更新测试值
  37. [self.recorder updateMeters];
  38.  
  39. // 如果分贝不超过-20
  40. float power = [self.recorder averagePowerForChannel:];
  41. if (power <= -) { // 几乎为静音
  42. self.slientDuration += self.timer.duration;
  43.  
  44. if (self.slientDuration >= ) {
  45. // 停止录音
  46. [self.recorder stop];
  47. }
  48. } else { // 有说话
  49. self.slientDuration = ;
  50.  
  51. }
  52. }
  53.  
  54. //- (void)update
  55. //{
  56. // // 更新测试值
  57. // [self.recorder updateMeters];
  58. //
  59. // // 如果分贝不超过-20
  60. // float power = [self.recorder averagePowerForChannel:0];
  61. // if (power <= -20) { // 几乎为静音
  62. // if (!self.stopRecordTimer) {
  63. // self.stopRecordTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self.recorder selector:@selector(stopRecord) userInfo:nil repeats:NO];
  64. // }
  65. // } else { // 有说话
  66. //// [self.stopRecordTimer invalidate];
  67. //// self.stopRecordTimer = nil;
  68. // NSDate *time = [NSDate dateWithTimeIntervalSinceNow:2.0];
  69. // [self.stopRecordTimer setFireDate:time];
  70. // }
  71. //}
  72.  
  73. - (IBAction)startRecord {
  74. NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
  75. NSString *path = [doc stringByAppendingPathComponent:@"test.caf"];
  76. NSURL *url = [NSURL fileURLWithPath:path];
  77.  
  78. AVAudioRecorder *recorder = [[AVAudioRecorder alloc] initWithURL:url settings:nil error:nil];
  79. // 缓冲
  80. [recorder prepareToRecord];
  81. // 开启分贝测量功能
  82. recorder.meteringEnabled = YES;
  83. // 开始录音
  84. [recorder record];
  85. self.recorder = recorder;
  86.  
  87. // 开启定时器
  88. [self addTimer];
  89. }
  90.  
  91. - (IBAction)stopRecord {
  92. // [self.recorder stop];
  93. }
  94. @end

IOS 录音(AVAudioRecorder)的更多相关文章

  1. Domain=NSOSStatusErrorDomain Code=1937337955 关于iOS录音AVAudioRecorder与音频播放AVAudioPlayer真机调试录音不能播放的问题

    error:Domain=NSOSStatusErrorDomain Code=1937337955 ,这个错误很常见, 原因是因为我们需要调用另外一个AVAudioPlayer 的初始化方法,来确定 ...

  2. 【iOS 录音转码MP3及转码BASE64上传】

    iOS 录音转码MP3及转码BASE64上传 一,开始录音 NSLog(@"开始录音"); [self startRecord]; - (void)startRecord { // ...

  3. Swift实现iOS录音与播放音频功能

    作用AVPLayer:可以用来播放在线及本地音视频AVAudioSession:音频会话,主要用来管理音频设置与硬件交互使用时需要导入 #import <AVFoundation/AVFound ...

  4. ios录音Demo

    <AudioToolbox/AudioToolbox.h> :这个库是C的接口,偏向于底层,主要用于在线流媒体的播放 <AVFoundation/AVFoundation.h> ...

  5. iOS开发简记(4):录音AVAudioRecorder

    录音,声音的采集,一般有两种实现办法,一是使用AVAudioRecorder,一是使用AudioUnit.如果只是简单的录音,使用AVAudioRecorder就可以了,如果想更灵活地处理刚录到的声音 ...

  6. iOS开发(4):录音AVAudioRecorder

    录音,声音的采集,一般有两种实现办法,一是使用AVAudioRecorder,一是使用AudioUnit.如果只是简单的录音,使用AVAudioRecorder就可以了,如果想更灵活地处理刚录到的声音 ...

  7. 【iOS录音与播放】实现利用音频队列,通过缓存进行对声音的采集与播放

    都说iOS最恶心的部分是流媒体,其中恶心的恶心之处更在即时语音. 所以我们先不谈即时语音,研究一下,iOS中声音采集与播放的实现. 要在iOS设备上实现录音和播放功能,苹果提供了简单的做法,那就是利用 ...

  8. ios录音、音频播放功能

    #import <AVFoundation/AVFoundation.h> { NSInteger   _timeCount;    NSTimer     *_timer; } @pro ...

  9. ios录音

    #import "ViewController.h" #import <AVFoundation/AVFoundation.h> @interface ViewCont ...

随机推荐

  1. pyspider的基本操作

    一.安装 pip install pyspider 1.修改 pyspider/webui/webdav.py 第209行:否则启动会报错 把: 'domaincontroller': NeedAut ...

  2. drf的安装和配置

    一.安装 1.安装 pip install djangorestframework 2.配置 注:以上两部就OK了 二.最简单的drf版本 1.创建应用 在项目中新建一个应用: python mana ...

  3. 【网络】访问控制列表(ACL)

    目的:172.16.12.1可以telnet到172.16.12.254,但是无法ping通172.16.12.254 Router0配置: 配置enable密码(必须,否则无法进入特权模式): r1 ...

  4. 搭建Redis报错

    2018-10-26 报错信息 You need tcl 8.5 or newer in order to run the Redis test 原因 缺少 tcl 插件 解决方式 wget http ...

  5. 关于i18n

    现在工作主要负责小程序端,很少负责backend.最近的一个任务是配置多语言.因为一开始都是写死的中文,现在需要把那些变成英文. 狂搜了一波,其实网上的方法都不怎好.(可能就是一开始看的时候觉得好.) ...

  6. svn server配置与TortoiseSVN、Ankhsvn+VS使用

    Svn服务器与客户端安装 1.      下载安装VisualSvn-Server服务端.(过程略)http://subversion.apache.org/packages.html 2.      ...

  7. Java Swing笔记

    想到了解一下GUI主要是想用来做点小工具,记录一些笔记. 文本框自动换行和滚动条 private static JTextArea addJTextArea(JPanel panel, int x, ...

  8. 022-pinyin4j工具类模板

    模板一 package ${enclosing_package}; import java.util.Arrays; import net.sourceforge.pinyin4j.PinyinHel ...

  9. GridView, ListView 区别

    ListView, GridView部分的类层次结构 AbsListView的xml属性 android:listSelector 当前item高亮时,显示的drawable android:draw ...

  10. 给python解释器本身添加注册表

    import sys from _winreg import * # tweak as necessary version = sys.version[:3] installpath = sys.pr ...