音頻 (一) : 音頻基礎(chǔ)知識

音頻基礎(chǔ)知識

組成
音頻文件的組成:文件格式(或者音頻容器) + 數(shù)據(jù)格式(或者音頻編碼)秉沼。

文件格式(或音頻容器)是用于形容文件本身的格式臀突。

我們可以通過多種不同的方法為真正的音頻數(shù)據(jù)編碼冕香。例如CAF文件便是一種文件格式纷捞,它能夠包含MP3格式松靡,線性PCM以及其它數(shù)據(jù)格式的音頻狐榔。

數(shù)據(jù)格式(或音頻編碼)

我們將從音頻編碼開始闡述(而不是文件格式)坛增,因為編碼是最重要的環(huán)節(jié)。

線性PCM:

這是表示線性脈沖編碼調(diào)制薄腻,主要是描寫用于將模擬聲音數(shù)據(jù)轉(zhuǎn)換成數(shù)字格式的技術(shù)收捣。簡單地說也就是未壓縮的數(shù)據(jù)。因為數(shù)據(jù)是未壓縮的庵楷,所以我們便可以最快速地播放出音頻罢艾,而如果空間不是問題的話這便是iPhone音頻的優(yōu)先代碼選擇。

音頻文件計算大小

聲卡對聲音的處理質(zhì)量可以用三個基本參數(shù)來衡量尽纽,即采樣頻率咐蚯、采樣位數(shù)和聲道數(shù)。

采樣頻率:

是指單位時間內(nèi)的采樣次數(shù)弄贿。采樣頻率越大春锋,采樣點之間的間隔就越小,數(shù)字化后得到的聲音就越逼真差凹,但相應(yīng)的數(shù)據(jù)量就越大期奔。聲卡一般提供11.025kHz、22.05kHz和44.1kHz等不同的采樣頻率危尿。

采樣位數(shù):
是記錄每次采樣值數(shù)值大小的位數(shù)呐萌。采樣位數(shù)通常有8bits或16bits兩種,采樣位數(shù)越大谊娇,所能記錄聲音的變化度就越細膩肺孤,相應(yīng)的數(shù)據(jù)量就越大。

聲道數(shù)
是指處理的聲音是單聲道還是立體聲济欢。單聲道在聲音處理過程中只有單數(shù)據(jù)流赠堵,而立體聲則需要左、右聲道的兩個數(shù)據(jù)流法褥。顯然顾腊,立體聲的效果要好,但相應(yīng)的數(shù)據(jù)量要比單聲道的數(shù)據(jù)量加倍挖胃。

聲音數(shù)據(jù)量的計算公式為:
數(shù)據(jù)量(字節(jié)/秒)= (采樣頻率(Hz)× 采樣位數(shù)(bit)× 聲道數(shù))/ 8
單聲道的聲道數(shù)為1,立體聲的聲道數(shù)為2。

【例1】請計算對于5分鐘雙聲道酱鸭、16位采樣位數(shù)吗垮、44.1kHz采樣頻率聲音的不壓縮數(shù)據(jù)量是多少?

根據(jù)公式:數(shù)據(jù)量=(采樣頻率×采樣位數(shù)×聲道數(shù)×時間)/8

得凹髓,數(shù)據(jù)量(MB)=[44.1×1000×16×2×(5×60)] /(8×1024×1024)=50.47MB

計算時要注意幾個單位的換算細節(jié):

時間單位換算:1分=60秒

采樣頻率單位換算:1kHz=1000Hz

數(shù)據(jù)量單位換算:1MB=1024×1024=1048576B

【例2】請計算對于雙聲道立體聲烁登、采樣頻率為44.1kHz、采樣位數(shù)為16位的激光唱盤(CD-A)蔚舀,用一個650MB的CD-ROM可存放多長時間的音樂饵沧?

已知音頻文件大小的計算公式如下:

文件的字節(jié)數(shù)/每秒=采樣頻率(Hz)X采樣位數(shù)(位)X聲道數(shù)/8

根據(jù)上面的公式計算一秒鐘時間內(nèi)的不壓縮數(shù)據(jù)量:(44.1×1000×16×2)/8=0.168MB/s

那么,一個650MB的CD-ROM可存放的時間為:(650/0.168)/(60×60)=1.07小時赌躺。

學習之前必須了解一些音頻框架之類的東西狼牺,比如文件格式與數(shù)據(jù)格式(編碼格式),比特率礼患,采樣率是钥,軌道,聲道缅叠,F(xiàn)FT(傅里葉快速變化)悄泥,頻譜等。查了網(wǎng)上很多資料肤粱,到現(xiàn)在還是一知半解啊弹囚。。领曼。擦擦擦鸥鹉。。悯森。宋舷。接著要整體了解下ios為我們提供處理音頻的基礎(chǔ)技術(shù):核心音頻(core Audio)

有5個框架:

1.Core Audio.framework

2.AudioToolbox.framework

3.AudioUnit.framework

4.AVFoundation.framework

5.OpenAL.framework

由于核心音頻本身是一個很大的話題,涉及到很多領(lǐng)域的不同服務(wù)瓢姻。因此祝蝠,我們又將核心音頻分割成較小的模塊,方便我們?nèi)ダ斫釧PI以及框架

1.AudioToolbox.framework:

(1)音頻隊列服務(wù)(Audio
Queue service)(2)音頻會話服務(wù)(Audio session service)

(3)音頻文件服務(wù)
(4)音頻文件流式服務(wù)
(5)音頻轉(zhuǎn)化服務(wù)

(6)系統(tǒng)聲音服務(wù) (7)擴展的音頻文件服務(wù)

2.AudioUnit.framework:音頻單元服務(wù)

3.OpenAL.framework:
OpenAL

4.AVFoundation.framework:
(1)AVAudioPlayer(2)AVAudioRecorder(3)AVAudioSession

5.CoreAudio:這個框架并不提供服務(wù)幻碱,僅提供其他框架可以使用的頭文件和數(shù)據(jù)類型

一绎狭、音頻播放

1.AVAudioPlayer

(1)在AVFoundation.framework框架中

(2)屬性

(3)方法

(4)如何使用

2.音頻服務(wù)(System
Sound Services)

3.音頻隊列(Audio
Queue Services)

4.OpenAL

5.MPMusciPlayController

6.音頻單元服務(wù)

7.系統(tǒng)聲音播放等

二、音頻錄制

1.AVAuidoRecorder

2.Audio
Queue Services等

三褥傍、音頻剪切(截壤芩弧)

NSString*path = [[NSBundle mainBundle] pathForResource:@"陳奕迅 - 想哭" ofType:@"mp3"];

NSURL *songURL =[NSURL fileURLWithPath:path];

AVURLAsset *songAsset = [AVURLAsset URLAssetWithURL:songURL options:nil];

2.創(chuàng)建音頻文件

NSArray *dirs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);

NSString *documentsDirectoryPath = [dirs objectAtIndex:0];

NSString *exportPath = [[documentsDirectoryPath
stringByAppendingPathComponent:EXPORT_NAME] retain];EXPORT_NAME為導出音頻文件名

if ([[NSFileManager defaultManager] fileExistsAtPath:exportPath]) {

[[NSFileManager defaultManager] removeItemAtPath:exportPath error:nil];

}

NSURL *exportURL = [NSURL fileURLWithPath:exportPath];

AVAssetWriter *assetWriter = [[AVAssetWriter assetWriterWithURL:exportURL
      
      fileType:AVFileTypeCoreAudioFormat
                     
        error:&assetError]
                     
  retain];

if (assetError) {

    NSLog (@"error: %@", assetError);

    return;

}

3.創(chuàng)建音頻輸出會話

AVAssetExportSession *exportSession = [AVAssetExportSession exportSessionWithAsset:songAsset                                                           presetName:AVAssetExportPresetAppleM4A];

4.設(shè)置音頻截取時間區(qū)域 (CMTime在Core Medio框架中,所以要事先導入框架)

CMTime startTime = CMTimeMake([_startTime.text floatValue], 1);
CMTime stopTime = CMTimeMake([_endTime.text floatValue], 1);
CMTimeRange exportTimeRange = CMTimeRangeFromTimeToTime(startTime, stopTime);

5.設(shè)置音頻輸出會話并執(zhí)行

exportSession.outputURL = [NSURL fileURLWithPath:filePath]; // output path

exportSession.outputFileType = AVFileTypeAppleM4A; // output file type

exportSession.timeRange = exportTimeRange; // trim time range

[exportSession exportAsynchronouslyWithCompletionHandler:^{

   if (AVAssetExportSessionStatusCompleted == exportSession.status) {

        NSLog(@"AVAssetExportSessionStatusCompleted");

    }else if (AVAssetExportSessionStatusFailed == exportSession.status) {

         a failure may happen because of an event out
of your control

         for example, an interruption like a phone call
comming in

         make sure and handle this case appropriately

        NSLog(@"AVAssetExportSessionStatusFailed");

    }else {

  NSLog(@"Export Session Status: %d",exportSession.status);

    }

}];

總得來說:我們再APP的目錄下創(chuàng)建了音頻文件恍风,然后創(chuàng)建了一個音頻的AVAsset對象(AVAsset代表一個抽象的媒體蹦狂,包含標題誓篱,文件大小等等),接著創(chuàng)建一個AVAsset的輸出會話AVAssetExportSession,最后就是設(shè)置我們要剪切(截瓤ā)的時間區(qū)域CMTimeRange窜骄,然后執(zhí)行AVAssetExportSeesion的回調(diào)函數(shù)exportAsynchronouslyWithCompletionHandler。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末摆屯,一起剝皮案震驚了整個濱河市邻遏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌虐骑,老刑警劉巖准验,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異廷没,居然都是意外死亡糊饱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門腕柜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來济似,“玉大人,你說我怎么就攤上這事盏缤∨榇溃” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵唉铜,是天一觀的道長罚屋。 經(jīng)常有香客問我浙巫,道長块差,這世上最難降的妖魔是什么试溯? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮灰嫉,結(jié)果婚禮上拆宛,老公的妹妹穿的比我還像新娘。我一直安慰自己讼撒,他們只是感情好浑厚,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著根盒,像睡著了一般钳幅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上炎滞,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天敢艰,我揣著相機與錄音,去河邊找鬼册赛。 笑死钠导,一個胖子當著我的面吹牛震嫉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播辈双,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼责掏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了湃望?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤痰驱,失蹤者是張志新(化名)和其女友劉穎证芭,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體担映,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡废士,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蝇完。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片官硝。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖短蜕,靈堂內(nèi)的尸體忽然破棺而出氢架,到底是詐尸還是另有隱情,我是刑警寧澤朋魔,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布岖研,位于F島的核電站,受9級特大地震影響警检,放射性物質(zhì)發(fā)生泄漏孙援。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一扇雕、第九天 我趴在偏房一處隱蔽的房頂上張望拓售。 院中可真熱鬧,春花似錦镶奉、人聲如沸础淤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽值骇。三九已至,卻和暖如春移国,著一層夾襖步出監(jiān)牢的瞬間吱瘩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工迹缀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留使碾,地道東北人蜜徽。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像票摇,于是被迫代替她去往敵國和親拘鞋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容