音訊_錄音
錄音
參考:AVAudioRecorder Class Reference
使用
- 包含框架AVFoundation.framework
- 使用AVAudioRecorder錄音機控制類
屬性
@property(readonly, getter=isRecording) BOOL recording; 是否正在錄音
@property(readonly) NSURL *url 錄音要存放的地址
@property(readonly) NSDictionary *settings 錄音檔案設定
@property(readonly) NSTimeInterval currentTime 錄音時長,僅在錄音狀態可用
@property(readonly) NSTimeInterval deviceCurrentTime 輸入設定的時間長度,此屬性一直可訪問
@property(getter=isMeteringEnabled) BOOL meteringEnabled; 是否啟用錄音測量,啟用錄音測量可以獲得錄音分貝等資料資訊
@property(nonatomic, copy) NSArray *channelAssignments 當前錄音的通道
物件方法
- (instancetype)initWithURL:(NSURL *)url settings:(NSDictionary *)settings error:(NSError **)outError
錄音機物件初始化,url必須是本地,settings是錄音格式、編碼等設定
- (BOOL)prepareToRecord
準備錄音,用於建立緩衝區,如果不手動呼叫,在呼叫record錄音時也會自動呼叫
- (BOOL)record
開始錄音
- (BOOL)recordAtTime:(NSTimeInterval)time
在指定的時間開始錄音,一般用於錄音暫停再恢復錄音
- (BOOL)recordForDuration:(NSTimeInterval) duration
按指定的時長開始錄音
- (BOOL)recordAtTime:(NSTimeInterval)time forDuration:(NSTimeInterval) duration
在指定的時間開始錄音,並指定錄音時長
- (void)pause;
暫停錄音
- (void)stop;
停止錄音
- (BOOL)deleteRecording;
刪除錄音,刪除錄音時錄音機必須處於停止狀態
- (void)updateMeters;
更新測量資料,只有meteringEnabled為YES此方法才可用
- (float)peakPowerForChannel:(NSUInteger)channelNumber;
指定通道的測量峰值,只有呼叫完updateMeters才有值
- (float)averagePowerForChannel:(NSUInteger)channelNumber
指定通道的測量平均值,注意只有呼叫完updateMeters才有值
代理方法
- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag 完成錄音
- (void)audioRecorderEncodeErrorDidOccur:(AVAudioRecorder *)recorder error:(NSError *)error 錄音編碼發生錯誤
示例
-
下面實現一個基本的的錄音,包括開始錄音、停止、播放。
- 設定音訊會話型別為AVAudioSessionCategoryPlayAndRecord,因為程式中牽扯到錄音和播放操作。
- 建立錄音機AVAudioRecorder,指定錄音儲存的路徑並且設定錄音屬性,注意對於一般的錄音檔案要求的取樣率、位數並不高,需要適當設定以保證錄音檔案的大小和效果。
- 建立音訊播放器AVAudioPlayer,用於在錄音完成之後播放錄音。
程式碼:
//
// ViewController.m
// LTYAudioRecord
//
// Created by Rachel on 16/4/10.
// Copyright © 2016年 AYuan. All rights reserved.
//
#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
@interface ViewController (){
NSString *filePath;
}
@property (nonatomic, strong) AVAudioSession *session;
@property (nonatomic, strong) AVAudioRecorder *recorder;//錄音器
@property (nonatomic, strong) AVAudioPlayer *player; //播放器
@property (nonatomic, strong) NSURL *recordFileUrl; //檔案地址
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (IBAction)startRecord:(id)sender {
NSLog(@"開始錄音");
AVAudioSession *session =[AVAudioSession sharedInstance];
NSError *sessionError;
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError];
if (session == nil) {
NSLog(@"Error creating session: %@",[sessionError description]);
}else{
[session setActive:YES error:nil];
}
self.session = session;
//1.獲取沙盒地址
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
filePath = [path stringByAppendingString:@"/test.wav"];
//2.獲取檔案路徑(這個url只能在錄音之前就確定好)
self.recordFileUrl = [NSURL fileURLWithPath:filePath];
//設定引數
NSDictionary *recordSetting = [[NSDictionary alloc] initWithObjectsAndKeys:
//取樣率 8000/11025/22050/44100/96000(影響音訊的質量)
[NSNumber numberWithFloat: 8000.0],AVSampleRateKey,
// 音訊格式
[NSNumber numberWithInt: kAudioFormatLinearPCM],AVFormatIDKey,
//取樣位數 8、16、24、32 預設為16
[NSNumber numberWithInt:16],AVLinearPCMBitDepthKey,
// 音訊通道數 1 或 2
[NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
//錄音質量
[NSNumber numberWithInt:AVAudioQualityHigh],AVEncoderAudioQualityKey,
nil];
_recorder = [[AVAudioRecorder alloc] initWithURL:self.recordFileUrl settings:recordSetting error:nil];
if (_recorder) {
_recorder.meteringEnabled = YES;
[_recorder prepareToRecord];
[_recorder record];
}else{
NSLog(@"音訊格式和檔案儲存格式不匹配,無法初始化Recorder");
}
}
- (IBAction)stopRecord:(id)sender {
NSLog(@"停止錄音");
if ([self.recorder isRecording]) {
[self.recorder stop];
}
}
- (IBAction)PlayRecord:(id)sender {
if ([self.player isPlaying]) return;
self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:self.recordFileUrl error:nil];
[self.session setCategory:AVAudioSessionCategoryPlayback error:nil];
[self.player play];
}
@end
相關文章
- 音訊錄製:三星電腦如何錄製音訊?音訊
- iOS開發:音訊播放、錄音、視訊播放、拍照、視訊錄製iOS音訊
- 音訊轉錄文字音訊
- Android音視訊之MediaRecorder音視訊錄製Android
- 【秒懂音視訊開發】08_音訊錄製音訊
- iOS開發系列--音訊播放、錄音、視訊播放、拍照、視訊錄製(轉)iOS音訊
- AVFoundation 文字轉語音和音訊錄製 播放音訊
- MacBook 如何錄屏和錄音訊Mac音訊
- Android音訊處理知識(一)MediaRecorder錄製音訊Android音訊
- Recordia for Mac快速錄製音訊Mac音訊
- Mac快速錄製音訊:RecordiaMac音訊
- 音視訊--音訊入門音訊
- 音視訊–音訊入門音訊
- 電腦錄音工具有什麼,怎麼錄製電視音訊?音訊
- ffmpeg命令錄製windows音視訊Windows
- mac無損音訊錄音機:AudFree Audio Capture for MacMac音訊APT
- Android音訊開發之AudioRecord錄音實現Android音訊
- 【秒懂音視訊開發】09_音訊錄製02_程式設計音訊程式設計
- 音訊 (一) : 音訊基礎知識音訊
- 微信下載錄音檔案(音軌分離 ffmpeg視訊合成)
- 短視訊“音訊化”,音樂“視訊化”音訊
- NCH RecordPad for mac音訊錄製工具Mac音訊
- 螢幕音訊錄製Aiseesoft Screen Recorder音訊AI
- MP3格式音訊如何線上錄製,錄音軟體哪個好?音訊
- Mac 使用音訊工具分析音訊資料Mac音訊
- HTML 音訊HTML音訊
- AAC 音訊音訊
- Win7如何錄製內部聲音 電腦錄音軟體線上錄音Win7
- Tuneskit Audio Capture for Mac 音訊錄製工具APTMac音訊
- Audio Hijack for Mac音訊錄製工具Mac音訊
- Mac音訊轉錄軟體——ExpressScribe for MacMac音訊Express
- iOS ARKit錄製視訊(AVAssetWriter & 有聲音)iOS
- 音訊錄製及視覺化處理音訊視覺化
- android音視訊指南-管理音訊焦點Android音訊
- Android音視訊之MediaPlayer音視訊播放Android
- 基於react的錄音及音訊曲線繪製的元件開發React音訊元件
- 使用Windows自帶“錄音機”錄製音樂(轉)Windows
- 音訊訊號表徵音訊