iOS 音視頻開發(fā),AVAudioRecorder實(shí)現(xiàn)錄音功能!!

<meta charset="utf-8">

AVAudioRecorder、AVAudioPlayer 屬于AVFoundation框架,使用時(shí)需要先導(dǎo)入<AVFoundation/AVFoundation.h>框架頭文件。

AVFoundation

是蘋果的現(xiàn)代媒體框架,它包含了一些不同用途的 API 和不同層級(jí)的抽象。其中有一些是Objective-C 對(duì)于底層 C 語言接口的封裝。除了少數(shù)的例外情況,AVFoundation 可以同時(shí)在 iOS 和 mac OS 中使用。

AVAudioRecorder

錄音機(jī),提供了在應(yīng)用程序中的音頻記錄能力。作為與 AVAudioPlayer 相對(duì)應(yīng)的 API,AVAudioRecorder 是將音頻錄制為文件的最簡(jiǎn)單的方法。除了用一個(gè)音量計(jì)接受音量的峰值和平均值以外,這個(gè) API 簡(jiǎn)單粗暴,如果你的使用場(chǎng)景很簡(jiǎn)單的話,這可能恰恰就是你想要的方法。

AVAudioPlayer

這個(gè)高層級(jí)的 API 為你提供一個(gè)簡(jiǎn)單的接口,用來播放本地或者內(nèi)存中的音頻。這是一個(gè)無界面的音頻播放器 (也就是說沒有提供 UI 元素),使用起來也很直接簡(jiǎn)單。它不適用于網(wǎng)絡(luò)音頻流或者低延遲的實(shí)時(shí)音頻播放。如果這些問題都不需要擔(dān)心,那么 AVAudioPlayer 可能就是正確的選擇。音頻播放器的 API 也為我們帶來了一些額外的功能,比如循環(huán)播放、獲取音頻的音量強(qiáng)度等等。

本文中Demo下載及截圖:

image
image

AVAudioRecorder錄音使用介紹:

1、導(dǎo)入AVFoundation框架

import<AVFoundation/AVFoundation.h>

2、獲取沙盒路徑

  • (NSString*)filePath {

NSString*path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];

NSString*filePath = [path stringByAppendingPathComponent:@"voice.caf"];

returnfilePath;

}

3、錄音會(huì)話設(shè)置(小編試了一下,如果不設(shè)置錄音會(huì)話,播放錄音的聲音會(huì)很?。?/strong>

NSError*errorSession =nil;

AVAudioSession* audioSession = [AVAudioSession sharedInstance];//得到AVAudioSession單例對(duì)象

[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error: &errorSession];//設(shè)置類別,表示該應(yīng)用同時(shí)支持播放和錄音

[audioSession setActive:YES error: &errorSession];//啟動(dòng)音頻會(huì)話管理,此時(shí)會(huì)阻斷后臺(tái)音樂的播放.

//設(shè)置成揚(yáng)聲器播放

UInt32doChangeDefault =1;

AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(doChangeDefault), &doChangeDefault);

4、創(chuàng)建錄音配置信息的字典

NSDictionary*setting =@{

AVFormatIDKey:@(kAudioFormatAppleIMA4),//音頻格式

AVSampleRateKey:@44100.0f,//錄音采樣率(Hz)如:AVSampleRateKey==8000/44100/96000(影響音頻的質(zhì)量)

AVNumberOfChannelsKey:@1,//音頻通道數(shù)1或2

AVEncoderBitDepthHintKey:@16,//線性音頻的位深度8、16、24、32

AVEncoderAudioQualityKey:@(AVAudioQualityHigh)//錄音的質(zhì)量

};

5、創(chuàng)建存放錄音文件的地址(音頻流寫入文件的本地文件URL)

NSURL*url = [NSURL URLWithString:[self filePath]];

6、初始化AVAudioRecorder對(duì)象

NSError*error;

self.audioRecorder= [[AVAudioRecorder alloc] initWithURL:url settings:setting error:&error];

if(self.audioRecorder) {

self.audioRecorder.delegate=self;

self.audioRecorder.meteringEnabled=YES;

//設(shè)置錄音時(shí)長(zhǎng),超過這個(gè)時(shí)間后,會(huì)暫停單位是秒

[self.audioRecorder recordForDuration:30];

//創(chuàng)建一個(gè)音頻文件,并準(zhǔn)備系統(tǒng)進(jìn)行錄制

[self.audioRecorder prepareToRecord];

} else {

NSLog(@"Error: %@", [error localizedDescription]);

}

7、開始錄音

[self.audioRecorder record];//開始錄音(或者暫停后,繼續(xù)錄音)

[self.audioRecorder pause];//暫停錄音

[self.audioRecorder stop];//停止錄制并關(guān)閉音頻文件

8、常用 AVAudioRecorderDelegate

  • (void)audioRecorderDidFinishRecording:(AVAudioRecorder*)recorder successfully:(BOOL)flag;

AVAudioPlayer播放錄音文件:

1、初始化AVAudioPlayer對(duì)象

NSError*error;

self.player= [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURLfile URLWithPath:[self filePath]] error:&error];

//設(shè)置播放循環(huán)次數(shù)

[self.player setNumberOfLoops:0];

[self.player setVolume:1];//音量,0-1之間

//分配播放所需的資源,并將其加入內(nèi)部播放隊(duì)列

[self.player setDelegate:self];

[self.player prepareToPlay];

2、播放錄音

[self.player play];//播放錄音

[self.player pause];//暫停播放錄音

[self.player stop];//停止播放錄音

3、常用AVAudioPlayerDelegate

  • (void)audioPlayerDidFinishPlaying:(AVAudioPlayer*)player successfully:(BOOL)flag;

4、AVAudioPlayer播放本地音頻文件的代碼在Demo中。

原文作者:onefboy
鏈接:http://www.itdecent.cn/p/71d49db93ead

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容