录音的基本使用

原创 2015年11月21日 14:48:42
//
//  ViewController.m

#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>

@interface ViewController ()
- (IBAction)startRecord;
- (IBAction)stopRecord;


/**
 *  录音器
 */
@property (nonatomic, strong) AVAudioRecorder *recorder;
/**
 *  定时器
 */
@property (nonatomic, strong) CADisplayLink *link;
/**
 *  声音沉默时间
 */
@property (nonatomic, assign) double slientDuration;
@end

@implementation ViewController

- (CADisplayLink *)link
{
    if (!_link) {
        self.link = [CADisplayLink displayLinkWithTarget:self selector:@selector(update)];
    }
    return _link;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    
}

- (void)update
{
    // 1.更新录音器的测量值
    [self.recorder updateMeters];
    
    // 2.获得平均分贝
    float power = [self.recorder averagePowerForChannel:0];
    
    // 3.如果小于-30, 开始静音
    if (power < - 30) {
        //        [self.recorder pause];
        
        self.slientDuration += self.link.duration;
        
        if (self.slientDuration >= 2) { // 沉默至少2秒钟
            [self.recorder stop];
            
            // 停止定时器
            [self.link invalidate];
            self.link = nil;
            NSLog(@"--------停止录音");
        }
    } else {
        //        [self.recorder record];
        self.slientDuration = 0;
        NSLog(@"**********持续说话");
    }
}


/**
 *  开始录音
 */
- (IBAction)startRecord {
    
    NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"test.caf"];
    NSURL *url = [NSURL fileURLWithPath:path];
    
    // 1.创建录音器
    NSMutableDictionary *setting = [NSMutableDictionary dictionary];
    // 音频格式
    setting[AVFormatIDKey] = @(kAudioFormatAppleIMA4);
    // 音频采样率
    setting[AVSampleRateKey] = @(8000.0);
    // 音频通道数
    setting[AVNumberOfChannelsKey] = @(1);
    // 线性音频的位深度
    setting[AVLinearPCMBitDepthKey] = @(8);
    AVAudioRecorder *recorder = [[AVAudioRecorder alloc] initWithURL:url settings:setting error:nil];
    
    // 允许测量分贝
    recorder.meteringEnabled = YES;
    
    // 2.缓冲
    [recorder prepareToRecord];
    
    // 3.录音
    [recorder record];
    
    self.recorder = recorder;
    
    // 4.开启定时器
    self.slientDuration = 0;
    [self.link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

}

/**
 *  停止录音
 */
- (IBAction)stopRecord {
     [self.recorder stop];
}


@end

结合Praat进行语音实验的步骤

近期更新了几篇Praat脚本从标注的TextGrid里提取数据一些脚本,发现有一些朋友会问到更细节的问题,于是有一个想法把结合Praat进行一个语音学上常用的实验研究的步骤都整理出来,希望对需要的朋友...
  • shaopengfei
  • shaopengfei
  • 2016年05月10日 15:39
  • 9736

STM32入门实例——语音存储回放系统软件实现

STM32入门——语音存储回放系统软件实现       通常学习一款新的开发板首要任务毋庸置疑的是点亮LED灯,以熟悉其相关操作。但是如果想要进一步学习了解开发板其它功能,还得通过项目实践。想起刚开始...
  • Edroid1530
  • Edroid1530
  • 2016年11月05日 15:21
  • 1778

音频(一) - 音频基础知识

版权声明:本文为原创文章,未经允许不得转载 博客地址:http://blog.csdn.net/kevindgk GitHub地址:https://github.com/Ke...
  • KevinDGK
  • KevinDGK
  • 2016年10月25日 17:24
  • 3702

这篇文章给大家介绍Android开发四大组件之实现电话拦截和电话录音,涉及到android四大基本组件在程序中的应用,对android四大基本组件感兴趣的朋友可以参考下本篇文章

这篇文章给大家介绍Android开发四大组件之实现电话拦截和电话录音,涉及到android四大基本组件在程序中的应用,对android四大基本组件感兴趣的朋友可以参考下本篇文章 http...
  • dong_cc
  • dong_cc
  • 2016年03月07日 14:58
  • 437

使用树莓派录音——USB声卡

使用树莓派录音——USB声卡 我们都知道树莓派只有音频输出口,而没有音频输入的接口,怎么办呢?其实只要一个USB声卡就可以了。 USB声卡淘宝上随便能找得到,我...
  • excallent
  • excallent
  • 2017年01月04日 10:57
  • 1787

Android照相和录音功能的使用

本文主要分为两大部分,首先介绍了Camera API和SurfaceView,然后介绍了在Android中使用照相功能和录像功能的方法。...
  • vanpersie_9987
  • vanpersie_9987
  • 2016年02月22日 17:23
  • 1165

C#中使用DirectSound录音

原文地址:http://blog.donews.com/uplook/archive/2005/12/14/657145.aspx 注:1.原文有程序终止后仍有线程在运行的情况,这里修正了下;  ...
  • woaixiaozhe
  • woaixiaozhe
  • 2012年08月10日 18:27
  • 16265

C#中使用DirectSound录音

原文地址:http://blog.donews.com/uplook/archive/2005/12/14/657145.aspx 注:1.原文有程序终止后仍有线程在运行的情况,这里修正了下;    ...
  • cuoban
  • cuoban
  • 2016年02月29日 17:11
  • 494

iOS 使用AVAudioPlayer开发录音功能

iOS 使用AVAudioPlayer开发录音功能
  • u011619283
  • u011619283
  • 2014年08月18日 17:03
  • 2273

Android 使用MediaRecorder录音调用stop()方法的时候报错

这个问题在网上看到了太多的答案,一直提示说按照官网的api的顺序来,其实解决问题的方法不是这样的,那样没法解决问题,照着那个顺序来也米有用 我们得知道为什么它停止不了,为什么停止闪退了, ...
  • u014737138
  • u014737138
  • 2015年11月09日 15:49
  • 2851
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:录音的基本使用
举报原因:
原因补充:

(最多只允许输入30个字)