录音机参数
强耦合的控制器
//
// BeyondViewController.m
// 37_录音
//
// Created by beyond on 14-9-16.
// Copyright (c) 2014年 com.beyond. All rights reserved.
//
#import "BeyondViewController.h"
// 录音必须导入本框架
#import <AVFoundation/AVFoundation.h>
@interface BeyondViewController ()
#pragma mark - 成员属性
// 录音机
@property (nonatomic, strong) AVAudioRecorder *recorder;
// 时钟(监听???)
@property (nonatomic, strong) CADisplayLink *link;
// flag用于标记 无声的时间长度,用于判断停止录音条件
@property (nonatomic, assign) double slientDuration;
#pragma mark - 界面连线
// 开始录音
- (IBAction)startRecord;
// 停止录音
- (IBAction)stopRecord;
// 播放录音(使用音乐工具类SongTool)
- (IBAction)startPlay;
@end
@implementation BeyondViewController
#pragma mark - 懒加载
- (CADisplayLink *)link
{
if (!_link) {
self.link = [CADisplayLink displayLinkWithTarget:self selector:@selector(update)];
}
return _link;
}
#pragma mark - 连线方法
// 开始录音
- (IBAction)startRecord
{
// 1.创建录音机,必须指定文件保存的fileURL,和录音的初始化参数
[self setupAudioRecord];
// 4.开启定时器
self.slientDuration = 0;
[self.link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
}
// 核心代码~ ~ ~创建录音机,必须指定文件保存的fileURL,和录音的初始化参数
- (void)setupAudioRecord
{
// 1.指定录音文件的保存的FileURL
NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"test.caf"];
NSURL *url = [NSURL fileURLWithPath:path];
// 2.设置录音机的取样参数(字典)
NSMutableDictionary *setting = [NSMutableDictionary dictionary];
// 音频格式
setting[AVFormatIDKey] = @(kAudioFormatAppleIMA4);
// 音频采样率
setting[AVSampleRateKey] = @(8000.0);
// 音频通道数
setting[AVNumberOfChannelsKey] = @(1);
// 线性音频的位深度
setting[AVLinearPCMBitDepthKey] = @(8);
// 3.根据上两个条件参数,可以创建录音机
AVAudioRecorder *recorder = [[AVAudioRecorder alloc] initWithURL:url settings:setting error:nil];
// 4.设置录音机的属性,比如允许测量分贝(必须设置)
recorder.meteringEnabled = YES;
// 5.录音机预备缓冲
[recorder prepareToRecord];
// 6.录音机 录音
[recorder record];
self.recorder = recorder;
}
// 停止录音
- (IBAction)stopRecord
{
[self.recorder stop];
}
// 播放录音
- (IBAction)startPlay
{
}
#pragma mark - 时钟方法
// 自动根据 无声时长,停止录音
- (void)update
{
// 1.必需先更新录音机的测量值,才可以获得分贝值
[self.recorder updateMeters];
// 2.才能够 获得平均分贝值(安静时 -50左右,大声说话是-10左右)
float power = [self.recorder averagePowerForChannel:0];
// 3.如果小于-30, 开始静音
if (power < - 30) {
// 标记,累记无意时长
self.slientDuration += self.link.duration;
// 如果 沉默至少2秒钟,预示着说话结束
if (self.slientDuration >= 2) {
// 停止录音
[self.recorder stop];
// 停止定时器,并置空
[self.link invalidate];
self.link = nil;
NSLog(@"--------停止录音");
}
} else {
// 说明正在大声喧哗,清零标记
self.slientDuration = 0;
NSLog(@"**********正在大声喧哗");
}
}
@end
录音工具类
//
// RecordTool.h
// 37_录音
//
// Created by beyond on 14-9-16.
// Copyright (c) 2014年 com.beyond. All rights reserved.
// 录音工具类
#import <Foundation/Foundation.h>
// 录音必须导入本框架
#import <AVFoundation/AVFoundation.h>
@interface RecordTool : NSObject
// 通过类方法,快速返回一个录音机对象,参数是:目标文件保存名
+(AVAudioRecorder *) record:(NSString *)destFileName;
@end
//
// RecordTool.m
// 37_录音
//
// Created by beyond on 14-9-16.
// Copyright (c) 2014年 com.beyond. All rights reserved.
// 录音工具类
#import "RecordTool.h"
@implementation RecordTool
// 通过类方法,快速返回一个录音机对象,参数是:目标文件保存名
+(AVAudioRecorder *)record:(NSString *)destFileName
{
// 核心代码~ ~ ~创建录音机,必须指定文件保存的fileURL,和录音的初始化参数
// 1.指定录音文件的保存的FileURL
NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:destFileName];
NSURL *url = [NSURL fileURLWithPath:path];
// 2.设置录音机的取样参数(字典)
NSMutableDictionary *setting = [NSMutableDictionary dictionary];
// 音频格式
setting[AVFormatIDKey] = @(kAudioFormatAppleIMA4);
// 音频采样率
setting[AVSampleRateKey] = @(8000.0);
// 音频通道数
setting[AVNumberOfChannelsKey] = @(1);
// 线性音频的位深度
setting[AVLinearPCMBitDepthKey] = @(8);
// 3.根据上两个条件参数,可以创建录音机
AVAudioRecorder *recorder = [[AVAudioRecorder alloc] initWithURL:url settings:setting error:nil];
// 4.设置录音机的属性,比如允许测量分贝(必须设置)
recorder.meteringEnabled = YES;
// 5.录音机预备缓冲
[recorder prepareToRecord];
// 6.录音机 开始录音
// [recorder record];
return recorder;
}
@end