你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS_37_錄音

iOS_37_錄音

編輯:IOS開發綜合


\

錄音機參數 \

強耦合的控制器
//
//  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






  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved