IOS 音訊開發

2021-07-27 01:34:07 字數 2652 閱讀 4052

標籤(空格分隔): 調查 ios音訊

音訊檔案的組成:檔案格式(或者音訊容器) + 資料格式(或者音訊編碼)。

我們可以通過多種不同的方法為真正的音訊資料編碼。例如caf檔案便是一種檔案格式,它能夠包含***格式,線性pcm以及其它資料格式的音訊。

我們將從音訊編碼開始闡述(而不是檔案格式),因為編碼是最重要的環節。

音效卡對聲音的處理質量可以用三個基本引數來衡量,即取樣頻率、取樣位數和聲道數。

取樣頻率:

是指單位時間內的取樣次數。取樣頻率越大,取樣點之間的間隔就越小,數位化後得到的聲音就越逼真,但相應的資料量就越大。音效卡一般提供11.025khz、22.05khz和44.1khz等不同的取樣頻率。

取樣位數:

是記錄每次取樣值數值大小的位數。取樣位數通常有8bits或16bits兩種,取樣位數越大,所能記錄聲音的變化度就越細膩,相應的資料量就越大。

聲道數是指處理的聲音是單聲道還是立體聲。單聲道在聲音處理過程中只有單資料流,而立體聲則需要左、右聲道的兩個資料流。顯然,立體聲的效果要好,但相應的資料量要比單聲道的資料量加倍。

聲音資料量的計算公式為:

資料量(位元組/秒)= (取樣頻率(hz)× 取樣位數(bit) × 聲道數)/ 8

單聲道的聲道數為1,立體聲的聲道數為2。

【例1】請計算對於5分鐘雙聲道、16位取樣位數、44.1khz取樣頻率聲音的不壓縮資料量是多少?

根據公式:資料量=(取樣頻率×取樣位數×聲道數×時間)/8

得,資料量(mb)=[44.1×1000×16×2×(5×60)] /(8×1024×1024)=50.47mb

計算時要注意幾個單位的換算細節:

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

取樣頻率單位換算:1khz=1000hz

資料量單位換算:1mb=1024×1024=1048576b

【例2】請計算對於雙聲道立體聲、取樣頻率為44.1khz、取樣位數為16位的雷射唱盤(cd-a),用乙個650mb的cd-rom可存放多長時間的**?

已知音訊檔案大小的計算公式如下:

檔案的位元組數/每秒=取樣頻率(hz)x取樣位數(位)x聲道數/8

根據上面的公式計算一秒鐘時間內的不壓縮資料量:(44.1×1000×16×2)/8=0.168mb/s

那麼,乙個650mb的cd-rom可存放的時間為:(650/0.168)/(60×60)=1.07小時。

音訊轉碼使用的框架為:audiotoolbox

使用函式: audioconverterfillcomplexbuffer
- (void)handleaudiopackets:(const void *)inputdata

numberofbytes:(uint32)numberofbytes

numberofpackets:(uint32)numberofpackets

packetdescriptions:(audiostreampacketdescription *)packetdescriptions

};audiobufferlist decodeddata;

decodeddata.mnumberbuffers = 1;

decodeddata.mbuffers[0].mnumberchannels = _canonicalasbd.mchannelsperframe;

decodeddata.mbuffers[0].mdatabytesize = _decodebuffersize;

decodeddata.mbuffers[0].mdata = _decodebuffer;

uint32 iooutputdatapackets1, iooutputdatapackets2;

osstatus decodingstatus, encodingstatus;

while (1)

};audiobufferlist encodeddata;

encodeddata.mnumberbuffers = 1;

encodeddata.mbuffers[0].mnumberchannels = _destinationasbd.mchannelsperframe;

encodeddata.mbuffers[0].mdatabytesize = _encodebuffersize;

encodeddata.mbuffers[0].mdata = _encodebuffer;

while (1)

else

if (encodingstatus == os_status_done)

}// end encoding}}

else

if (decodingstatus == os_status_done)

}}

使用函式 extaudiofileread
void

startconvert

(extaudioconvertersettings* settings)

checkerror(extaudiofilewrite(settings->outputfile,

framescount,

&outputbufferlist),

"extaudiofilewrite failed");

}}

iOS音訊 使用System Sound API

可以用來製作遊戲音效和操作音,以及提醒使用者要做某件事,還可以發出振動提醒,但是只能在iphone裝置上。主要用於遊戲音效和操作聲音等。import viewcontroller.h import inte ce viewcontroller ibaction playsystemsound id ...

iOS音訊 使用OpenAL API

是為了更好地控制音效。openal構成 由三個實體構成 openal與3d空間中的聲音 採用3d笛卡爾座標系,右手座標系。openal api openal應用開發流程 其中初始化快取是最為麻煩的,其詳細過程是 開始 開啟檔案 獲得實際音訊檔案大小 開闢音訊記憶體資料空間 讀取檔案到記憶體中 關閉檔...

PHP開發之上傳音訊

今天給大家分享乙個比較簡單易懂的技術,就是音訊上傳,原理和檔案上傳一樣,不要想的太複雜,希望對你有所幫助 在給大家分享之前,這裡推薦下我自己建的php開發 vip資料 平台 638965404,不管你是小白還是大牛,我都挺歡迎,不定期分享乾貨,包括2017最新的php企業案例學習資料和零基礎入門教程...