AudioToolbox.framework框架

在開發(fā)直播APP的時候,用到了AudioToolbox.framework框架。。 在這里做一個總結,分享給大家

AudioFileStream類,提供了一個接口,用來解析一個流音頻文件

創(chuàng)建一個 new stream parse

//aquire some data

AudioFileStreamParseBytes(<#AudioFileStreamID inAudioFileStream#>, <#UInt32 inDataByteSize#>, <#const void *inData#>, <#UInt32 inFlags#>);

//設置從流文件中讀取data時的offset

AudioFileStreamSeek(<#AudioFileStreamID inAudioFileStream#>, <#SInt64 inPacketOffset#>, <#SInt64 *outDataByteOffset#>, <#UInt32 *ioFlags#>);

//獲取完數(shù)據(jù)后,關閉該流對象

AudioFileClose(<#AudioFileID inAudioFile#>)

AudioServices

AudioQueue

使用一個緩沖隊列來存儲data,用來播放或錄音。播放或錄音的時候,數(shù)據(jù)以流的形式操作,可以邊獲取數(shù)據(jù)變播放,或者邊錄音,邊存儲。

-------------------------------------------------------------------------

NSFileHandle 用來從文件、socket中讀取數(shù)據(jù)

CFReadStream 用來讀取一個字節(jié)流byte stream,該字節(jié)流可以來自于內存、一個文件、一個socket。在讀bytes之前,流stream需要被打開。

CFWriteStream用來寫一個字節(jié)流

AudioQueueRef? 定義的一個不透明的數(shù)據(jù)類型,專門用來代表一個audio queue

AudioQueueBufferRef 是AudioQueueBuffer的別名,表明該參數(shù)為一個AudioQueueBuffer對象

AudioFileID 定義一個不透明的數(shù)據(jù)類型,代表一個audiofile的對象

反思:以ref結尾的對象名稱,一般是在參數(shù)中使用,表明這個參數(shù)的數(shù)據(jù)類型

//===============

AudioStreamBasicDescription

音頻數(shù)據(jù)流格式的描述.Callback Method 回調函數(shù),系統(tǒng)規(guī)定好了回調函數(shù)的參數(shù),以及調用的地方,你只需要保證參數(shù)的格式正確,向函數(shù)里添加代碼即可,函數(shù)的方法名稱可以隨便寫,沒有強制的規(guī)定。

AudioQueueNewOutput的第三個參數(shù):inUserData 這是由用戶來自定義的,數(shù)據(jù)的來源。只需要傳遞一個對象進去即可。使用,當系統(tǒng)自動調用回調函數(shù)MyAudioQueueOutputCallback或者MyAudioQueueInputCallback時候,返回的第一個參數(shù)inUserData就是你在AudioQueueNewOutput中設置的第三個參數(shù)。然后,你需要在回調函數(shù)中使用這個對象填充buffer(播放音頻,當一個buffer為空時自動調用)或者讀取buffer的數(shù)據(jù)(錄音,當一個buffer滿時自動調用)。

AudioFileStream_PropertyListenerProc

當在audio stream中找到一個property value后,回調該方法。

AudioFileStream_PacketsProc當在stream中找到audio data后回調該方法。

在參數(shù)中的in和out個代表的意思:in代表的是這個參數(shù)需要你在外面得到然后傳遞進去,在這個方法中要使用;out開頭的參數(shù)表示這個參數(shù)是這個方法返回的值,你一般只需要定義一個引用,然后傳遞進去,執(zhí)行完這個方法后,這個參數(shù)就實例化了。oh,my god!坑爹的蘋果。

AudioFile類

一個c編程接口,使用AudioFile可以從內存或硬盤中讀取或寫入多種格式的音頻數(shù)據(jù)。

AudioFileStream類

提供了一個借口,用來解析流音頻文件。功能:從網(wǎng)絡中讀取數(shù)據(jù)流,把數(shù)據(jù)流解析成音頻文件。

音頻文件流是不容易獲取的。當需要從stream中讀取data時,以前的data可能已無法使用,而新的data還沒有到達,而從網(wǎng)絡中獲取的data可能還包含packets數(shù)據(jù)。為了解析audio stream,parser必須記著已經獲取的數(shù)據(jù),等待剩余的數(shù)據(jù)。

緩沖區(qū)是在哪設置的?

AudioQueue類

一個c編程接口,是Core Audio的一部分。功能:錄音、播放音頻。

AudioQueue類播放音頻時,在內存中維護著一個buffer queue。只要buffer中有數(shù)據(jù)就可以播放,因此,一般使用AudioQueue對象來播放音頻流,這樣可以“邊下載邊播放”。

播放音頻的方法:

AudioQueueNewOutput

1、用來創(chuàng)建一個播放音頻隊列的對象AudioQueueRef,然后就是對該audioqueue對象進行操作。

2、用來添加一個回調方法AudioQueueOutputCallback,調用該方法時會返回一個audioqueue的buffer,該buffer中的數(shù)據(jù)已經被使用,需要在這個方法中填充新數(shù)據(jù)。

3、

AudioQueueEnqueueBuffer

想緩沖區(qū)中添加新的數(shù)據(jù)(數(shù)據(jù)一般從file或網(wǎng)絡中獲?。?/p>

//====下載=====

CFReadStream

CFReadStreamClientCallBack回調函數(shù)在CFReadStreamSetClient中調用,是第三個參數(shù)。CFReadStreamClientCallBack只有在滿足CFReadStreamSetClient中添加的streamEvents發(fā)生時才會別回調。

CFReadStreamScheduleWithRunLoop方法把stream加到一個線程中。然后,CFReadStreamSetClient在設置的東西就起作用了。當各種streamEvent發(fā)生時,client都會得到通知,client判斷是否執(zhí)行回調方法CFReadStreamClientCallBack。

AudioSession類

一個c接口,用來管理應用中audio的行為。

線程的操作,暫停后可能是縣城就停止了。

對線程的操作? 讓某一個線程停下來。

AudioQueue

一個c編程接口,是Core Audio的一部分。功能:錄音、播放音頻。

AudioQueue類播放音頻時,在內存中維護著一個buffer queue。只要buffer中有數(shù)據(jù)就可以播放,因此,一般使用AudioQueue對象來播放音頻流,這樣可以“邊下載邊播放”。

audioqueue中的方法都是靜態(tài)方法,使用時傳遞進去的參數(shù)前綴是in,傳遞出來的參數(shù)前綴是out播放音頻的方法:

AudioQueueNewOutput

1、用來創(chuàng)建一個播放音頻隊列的對象AudioQueueRef,然后就是對該audioqueue對象進行操作。

2、用來添加一個回調方法AudioQueueOutputCallback,調用該方法時會返回一個audioqueue的buffer,該buffer中的數(shù)據(jù)已經被使用,需要在這個方法中填充新數(shù)據(jù)。

3、

AudioQueueEnqueueBuffer

想緩沖區(qū)中添加新的數(shù)據(jù)(數(shù)據(jù)一般從file或網(wǎng)絡中獲?。?/p>

AudioQueueAllocateBuffer

為一個audioqueue分配一個queueBuffer,每調用一次創(chuàng)建一個緩沖區(qū),最后所有的緩沖區(qū)組成一個緩沖隊列。

AudioQueueCreateTimeline

創(chuàng)建一個與audioqueue相關的時間軸。如果想要顯示audio的時間,需要熟悉uyutimeLine相關的方法。

audioqueue的屬性操作:

具體屬性類型見官方文檔:https://developer.apple.com/library/ios/#documentation/MusicAudio/Reference/AudioQueueReference/Reference/reference.html#//apple_ref/c/func/AudioQueueAddPropertyListener

AudioQueueSetProperty

用來設置某一個audioqueue對象的屬性,具體屬性以 kAudioQueueProperty_*開頭

AudioQueueGetProperty

獲取audioqueue對象的某一個屬性值。首先應該先調用AudioQueueGetPropertySize方法獲取value的大小(byte形式)

AudioQueueAddPropertyListener

添加一個屬性監(jiān)聽器。當一個audioqueue的對應屬性值改變時,會回調這個監(jiān)聽器。

audioqueue的參數(shù)操作:

AudioQueueSetParameter

AudioQueueGetParameter

對參數(shù)的修改和獲取,具體參數(shù)parameter包括:音量的調節(jié)、聲道的調節(jié)、以及音量的漸變設置

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容