iOS录音功能
【音頻】
指人耳可以聽到的聲音頻率在20HZ~20kHz之間的聲波,稱為音頻。
【采樣頻率】
即取樣頻率, 指每秒鐘取得聲音樣本的次數。采樣頻率越高,聲音的質量也就越好,聲音的還原也就越真實,但同時它占的資源比較多。由于人耳的分辨率很有限,太高的頻率并不能分辨出來。
22050 的采樣頻率是常用的, 44100已是CD音質, 超過48000或96000的采樣對人耳已經沒有意義。這和電影的每秒 24 幀圖片的道理差不多。
如果是雙聲道(stereo), 采樣就是雙份的, 文件也差不多要大一倍.
【采樣位數】
即采樣值或取樣值(就是將采樣樣本幅度量化)。它是用來衡量聲音波動變化的一個參數,也可以說是聲卡的分辨率。它的數值越大,分辨率也就越高,所發出聲音的能力越強。
每個采樣數據記錄的是振幅, 采樣精度取決于采樣位數的大小:
?? ???? ?1 字節(也就是8bit) 只能記錄 256 個數, 也就是只能將振幅劃分成 256 個等級;
?? ???? ?2 字節(也就是16bit) 可以細到 65536 個數, 這已是 CD 標準了;
?? ???? ?4 字節(也就是32bit) 能把振幅細分到 4294967296 個等級, 實在是沒必要了.
【通道數】
即聲音的通道的數目。常有單聲道和立體聲之分,單聲道的聲音只能使用一個喇叭發聲(有的也處理成兩個喇叭輸出同一個聲道的聲音),立體聲可以使兩個喇叭都發聲(一般左右聲道有分工) ,更能感受到空間效果,當然還有更多的通道數。
【幀】
幀記錄了一個聲音單元,其長度為樣本長度(采樣位數)和通道數的乘積。
【周期】
音頻設備一次處理所需要的幀數,對于音頻設備的數據訪問以及音頻數據的存儲,都是以此為單位。
【交錯模式】
數字音頻信號存儲的方式。數據以連續幀的方式存放,即首先記錄幀1的左聲道樣本和右聲道樣本,再開始幀2的記錄...
【非交錯模式】
首先記錄的是一個周期內所有幀的左聲道樣本,再記錄所有右聲道樣本。
【比特率】
每秒的傳輸速率(位速, 也叫比特率)。如705.6kbps 或 705600bps, 其中的 b 是 bit, ps 是每秒的意思,表示每秒705600bit的容量。
選擇一個Category
AVAudioSessionCategoryAmbient?或?kAudioSessionCategory_AmbientSound
——用于非以語音為主的應用,使用這個category的應用會隨著靜音鍵和屏幕關閉而靜音。并且不會中止其它應用播放聲音,可以和其它自帶應用如iPod,safari等同時播放聲音。注意:該Category無法在后臺播放聲音
AVAudioSessionCategorySoloAmbient?或?kAudioSessionCategory_SoloAmbientSound
——類似于AVAudioSessionCategoryAmbient?不同之處在于它會中止其它應用播放聲音。 這個category為默認category。該Category無法在后臺播放聲音
AVAudioSessionCategoryPlayback 或?kAudioSessionCategory_MediaPlayback
——用于以語音為主的應用,使用這個category的應用不會隨著靜音鍵和屏幕關閉而靜音。可在后臺播放聲音
AVAudioSessionCategoryRecord?或?kAudioSessionCategory_RecordAudio
———用于需要錄音的應用,設置該category后,除了來電鈴聲,鬧鐘或日歷提醒之外的其它系統聲音都不會被播放。該Category只提供單純錄音功能。
AVAudioSessionCategoryPlayAndRecord?或?kAudioSessionCategory_PlayAndRecord
——用于既需要播放聲音又需要錄音的應用,語音聊天應用(如微信)應該使用這個category。該Category提供錄音和播放功能。如果你的應用需要用到iPhone上的聽筒,該category是你唯一的選擇,在該Category下聲音的默認出口為聽筒(在沒有外接設備的情況下)。
注意:并不是一個應用只能使用一個category,程序應該根據實際需要來切換設置不同的category,舉個例子,錄音的時候,需要設置為AVAudioSessionCategoryRecord,當錄音結束時,應根據程序需要更改category為AVAudioSessionCategoryAmbient,AVAudioSessionCategorySoloAmbient或AVAudioSessionCategoryPlayback中的一種。
錄音相關設置
NSMutableDictionary *dict = [[NSMutableDictionary alloc]init];
//1.設置錄音格式:AVFormatIDKey
[dict setObject:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];
//2.設置錄音采樣速率:AVSampleRateKey 8000/44100/96000
[dict setObject:[NSNumber numberWithInt:44100] forKey:AVSampleRateKey];
//3.設置錄音質量:AVEncoderAudioQualityKey
[dict setObject:[NSNumber numberWithInt:AVAudioQualityHigh] forKey:AVEncoderAudioQualityKey];
//4.設置線性采樣位數:AVLinearPCMBitDepthKey 8/16/24
[dict setObject:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];
//5.錄音通道:AVNumberOfChannelsKey 1/2
[dict setObject:[NSNumber numberWithInt:2] forKey:AVNumberOfChannelsKey];
指人耳可以聽到的聲音頻率在20HZ~20kHz之間的聲波,稱為音頻。
【采樣頻率】
即取樣頻率, 指每秒鐘取得聲音樣本的次數。采樣頻率越高,聲音的質量也就越好,聲音的還原也就越真實,但同時它占的資源比較多。由于人耳的分辨率很有限,太高的頻率并不能分辨出來。
22050 的采樣頻率是常用的, 44100已是CD音質, 超過48000或96000的采樣對人耳已經沒有意義。這和電影的每秒 24 幀圖片的道理差不多。
如果是雙聲道(stereo), 采樣就是雙份的, 文件也差不多要大一倍.
【采樣位數】
即采樣值或取樣值(就是將采樣樣本幅度量化)。它是用來衡量聲音波動變化的一個參數,也可以說是聲卡的分辨率。它的數值越大,分辨率也就越高,所發出聲音的能力越強。
每個采樣數據記錄的是振幅, 采樣精度取決于采樣位數的大小:
?? ???? ?1 字節(也就是8bit) 只能記錄 256 個數, 也就是只能將振幅劃分成 256 個等級;
?? ???? ?2 字節(也就是16bit) 可以細到 65536 個數, 這已是 CD 標準了;
?? ???? ?4 字節(也就是32bit) 能把振幅細分到 4294967296 個等級, 實在是沒必要了.
【通道數】
即聲音的通道的數目。常有單聲道和立體聲之分,單聲道的聲音只能使用一個喇叭發聲(有的也處理成兩個喇叭輸出同一個聲道的聲音),立體聲可以使兩個喇叭都發聲(一般左右聲道有分工) ,更能感受到空間效果,當然還有更多的通道數。
【幀】
幀記錄了一個聲音單元,其長度為樣本長度(采樣位數)和通道數的乘積。
【周期】
音頻設備一次處理所需要的幀數,對于音頻設備的數據訪問以及音頻數據的存儲,都是以此為單位。
【交錯模式】
數字音頻信號存儲的方式。數據以連續幀的方式存放,即首先記錄幀1的左聲道樣本和右聲道樣本,再開始幀2的記錄...
【非交錯模式】
首先記錄的是一個周期內所有幀的左聲道樣本,再記錄所有右聲道樣本。
【比特率】
每秒的傳輸速率(位速, 也叫比特率)。如705.6kbps 或 705600bps, 其中的 b 是 bit, ps 是每秒的意思,表示每秒705600bit的容量。
選擇一個Category
AVAudioSessionCategoryAmbient?或?kAudioSessionCategory_AmbientSound
——用于非以語音為主的應用,使用這個category的應用會隨著靜音鍵和屏幕關閉而靜音。并且不會中止其它應用播放聲音,可以和其它自帶應用如iPod,safari等同時播放聲音。注意:該Category無法在后臺播放聲音
AVAudioSessionCategorySoloAmbient?或?kAudioSessionCategory_SoloAmbientSound
——類似于AVAudioSessionCategoryAmbient?不同之處在于它會中止其它應用播放聲音。 這個category為默認category。該Category無法在后臺播放聲音
AVAudioSessionCategoryPlayback 或?kAudioSessionCategory_MediaPlayback
——用于以語音為主的應用,使用這個category的應用不會隨著靜音鍵和屏幕關閉而靜音。可在后臺播放聲音
AVAudioSessionCategoryRecord?或?kAudioSessionCategory_RecordAudio
———用于需要錄音的應用,設置該category后,除了來電鈴聲,鬧鐘或日歷提醒之外的其它系統聲音都不會被播放。該Category只提供單純錄音功能。
AVAudioSessionCategoryPlayAndRecord?或?kAudioSessionCategory_PlayAndRecord
——用于既需要播放聲音又需要錄音的應用,語音聊天應用(如微信)應該使用這個category。該Category提供錄音和播放功能。如果你的應用需要用到iPhone上的聽筒,該category是你唯一的選擇,在該Category下聲音的默認出口為聽筒(在沒有外接設備的情況下)。
注意:并不是一個應用只能使用一個category,程序應該根據實際需要來切換設置不同的category,舉個例子,錄音的時候,需要設置為AVAudioSessionCategoryRecord,當錄音結束時,應根據程序需要更改category為AVAudioSessionCategoryAmbient,AVAudioSessionCategorySoloAmbient或AVAudioSessionCategoryPlayback中的一種。
錄音相關設置
NSMutableDictionary *dict = [[NSMutableDictionary alloc]init];
//1.設置錄音格式:AVFormatIDKey
[dict setObject:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];
//2.設置錄音采樣速率:AVSampleRateKey 8000/44100/96000
[dict setObject:[NSNumber numberWithInt:44100] forKey:AVSampleRateKey];
//3.設置錄音質量:AVEncoderAudioQualityKey
[dict setObject:[NSNumber numberWithInt:AVAudioQualityHigh] forKey:AVEncoderAudioQualityKey];
//4.設置線性采樣位數:AVLinearPCMBitDepthKey 8/16/24
[dict setObject:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];
//5.錄音通道:AVNumberOfChannelsKey 1/2
[dict setObject:[NSNumber numberWithInt:2] forKey:AVNumberOfChannelsKey];
總結
- 上一篇: 状态空间模型
- 下一篇: 嵌入式开发--Altuim Design