錄音機參數
強耦合的控制器
//
// BeyondViewController.m
// 37_錄音
//
// Created by beyond on 14-9-16.
// Copyright (c) 2014年 com.beyond. All rights reserved.
//
#import "BeyondViewController.h"
// 錄音必須導入本框架
#import
@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
// 錄音必須導入本框架
#import
@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