前言:本篇介紹錄音。 關於錄音,這裡提供更為詳細的講解網址:http://www.cnblogs.com/kenshincui/p/4186022.html#audioRecord ,並且該博客有更完整的詳述和代碼實現哦。 內容大綱: 1、錄音應用場景。 2、錄音功能實現。 3、概念補充。 4、開發 ...
前言:本篇介紹錄音。
關於錄音,這裡提供更為詳細的講解網址:http://www.cnblogs.com/kenshincui/p/4186022.html#audioRecord ,並且該博客有更完整的詳述和代碼實現哦。
內容大綱:
1、錄音應用場景。
2、錄音功能實現。
3、概念補充。
4、開發經驗。
正文:
1、錄音應用場景
① 語言聊天:在即時通訊APP中,例如即時通訊APP中,例如微信、QQ等等,都有語音發送功能。
②語音備忘錄:錄一段音頻,來記錄某件事情。
2、錄音功能實現
①導入AVFoundation框架
一些多媒體的處理,基本都使用這個框架。
②使用AVAudioRecorder進行錄音
<1>創建錄音文件存放路徑
<2>設置錄音附件設置項(#import <AVFoundation/AVAudioSettings.h>)
2-1、 NSMutableDictionary *recordSettings = [[NSMutableDictionary alloc] init];
2-2、設置編碼格式:
[recordSettings setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey: AVFormatIDKey];
2-3、採樣率:
[recordSettings setValue :[NSNumber numberWithFloat:11025.0] forKey: AVSampleRateKey];
2-4、通道數:
[recordSettings setValue :[NSNumber numberWithInt:2] forKey: AVNumberOfChannelsKey];
2-5、音頻質量,採樣質量:
[recordSettings setValue:[NSNumber numberWithInt:AVAudioQualityMin] forKey:AVEncoderAudioQualityKey];
<3>根據路徑以及設置項,創建錄音對象
_audioRecorder = [[AVAudioRecorder alloc] initWithURL:url settings:recordSettings error:nil];
<4>準備錄音
[self.audioRecorder prepareToRecord];
<5>開始錄音
[self.audioRecorder record];
<6>暫停錄音
[self.audioRecorder pause];
<7>停止錄音
[self.audioRecorder stop];
③代碼實現:
<1>首先在storyboard上簡單實現三個按鈕監聽:
<2>實現的代碼:
1 #import "ViewController.h" 2 #import <AVFoundation/AVFoundation.h> 3 4 @interface ViewController () 5 6 /** 錄音對象*/ 7 @property(nonatomic ,strong) AVAudioRecorder *recorder; 8 9 @end 10 11 @implementation ViewController 12 13 -(void)viewDidLoad{ 14 [self createRecord]; 15 } 16 17 - (void)createRecord{ 18 // 0.1 創建錄音文件存放路徑 19 NSString *path = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"test.caf"]; 20 NSLog(@"%@", path); 21 NSURL *url = [NSURL URLWithString:path]; 22 23 // 0.2 創建錄音設置 24 NSMutableDictionary *recordSettings = [[NSMutableDictionary alloc] init]; 25 // 設置編碼格式 26 [recordSettings setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey: AVFormatIDKey]; 27 // 採樣率 28 [recordSettings setValue :[NSNumber numberWithFloat:11025.0] forKey: AVSampleRateKey]; 29 // 通道數 30 [recordSettings setValue :[NSNumber numberWithInt:2] forKey: AVNumberOfChannelsKey]; 31 //音頻質量,採樣質量 32 [recordSettings setValue:[NSNumber numberWithInt:AVAudioQualityMin] forKey:AVEncoderAudioQualityKey]; 33 34 35 // 1. 創建錄音對象 36 self.recorder = [[AVAudioRecorder alloc] initWithURL:url settings:recordSettings error:nil]; 37 38 39 // 2. 準備錄音(系統會分配一些錄音資源) 40 [self.recorder prepareToRecord]; 41 } 42 43 - (IBAction)beginRecord 44 { 45 NSLog(@"開始錄音"); 46 [self.recorder record]; // 直接錄音, 需要手動停止 47 // [self.recorder recordForDuration:3]; // 從當前執行這行代碼開始錄音, 錄音5秒 48 // [recorder recordAtTime:recorder.deviceCurrentTime + 2]; // 2s, 需要手動停止 49 // [self.recorder recordAtTime:self.recorder.deviceCurrentTime + 2 forDuration:3]; // 2s 3s 50 } 51 52 - (IBAction)pauseRecord:(id)sender { 53 NSLog(@"暫停錄音"); 54 [self.recorder pause]; 55 } 56 57 - (IBAction)stopRecord { 58 NSLog(@"停止錄音"); 59 [self.recorder stop]; 60 } 61 62 @end
在23~32行的代碼,這個是對一個屬性添加很多值,是可以抽離出來聲明一個屬性,然後加值的部分寫在懶載入中。
<3>通知錄音之後,可以通過列印出來的路徑,然後找到對應的錄音文件,可以自己試聽測試一下。
3、概念補充
①編碼
概念: 編碼是信息從一種形式轉換為另一種形式的過程。
編碼格式:
> PCM : 脈衝編碼調製,是一種非壓縮音頻數字化技術,是一種未壓縮的原音重現, 數字模式下, 音頻的初始信號是PCM
> MP3
> AAC: AAC其實是“高級音頻編碼(advanced audio coding)”的縮寫,它是被設計用來取代MP3格式的。
> HE-AAC: HE-AAC是AAC的一個超集,這個“HE”代表的是“High efficiency”。 HE-AAC是專門為低比特率所優化的一種音頻編碼格式
> AMR: AMR全稱是“Adaptive Multi-Rate”,它也是另一個專門為“說話(speech)”所優化的編碼格式,也是適合低比特率環境下採用
> ALAC: 它全稱是“Apple Lossless”,這是一種沒有任何質量損失的音頻編碼方式,也就是我們說的無損壓縮
> IMA4: 這是一個在16-bit音頻文件下按照4:1的壓縮比來進行壓縮的格式。
②文件格式(不同的文件格式,可保存不同的編碼格式編碼的文件)
>WAV
特點: 音質最好的格式, 對應PCM編碼。
適用: 多媒體開發、保存音樂和音效素材。
>MP3
特點: 音質好,壓縮比比較高,被大量軟體和硬體支持。
適用: 適合用於比較高要求的音樂欣賞。
>caf
特點: 適用於幾乎iOS中所有的編碼格式。
③參考資料地址:
4、開發經驗
caf 文件格式, 因為某些編碼設置, 文件有可能會很大, 而且caf, 格式並不是很通用, 所以在開發過程中, 一般會進行壓縮轉碼, MP3。
相關學習資料:http://blog.csdn.net/ysy441088327/article/details/7392842
轉載註明出處:http://www.cnblogs.com/goodboy-heyang/p/5374322.html ,尊重勞動成功。