iPhone 音訊總結

2021-06-17 20:06:27 字數 3066 閱讀 1495

[

-(id

)initsession

void interruptionlistenercallback (

void

*inuserdata, uint32 interruptionstate)

else

if(interruptionstate == kaudiosessionendinterruption )

[ad resume];

}}

error = audiofilestreamopen(

(void

*)self,

&audiofilestreampropertylistenerproc, //監聽設定變化

&audiofilestreampacketsproc, //資料解析後的接收函式

0,

&audio_file_stream);//**流的id

void audiofilestreampropertylistenerproc(

void

*inclientdata,

audiofilestreamid inaudiofilestream,

audiofilestreampropertyid inpropertyid,

uint32 *ioflags)

void audiofilestreampacketsproc(

void

*inclientdata,

uint32 innumberbytes,

uint32 innumberpackets,

const

void

*ininputdata,

audiostreampacketdescription *inpacketdescriptions)

然後再把nsdata傳給解碼器解析:

error = audiofilestreamparsebytes(

audio_file_stream,//在這時,**流檔案id被生成

datalen,

[data bytes],

kaudiofilestreamproperty_fileformat);

這樣解碼後的資料自動會被傳送到audiofilestreampacketsproc介面裡。。

第三步;準備buffer資料(maudiodata(所有的data),maudiodatabytesize資料的大小,num_packets多少包,packet_descriptions包的描述)

-(id

)initwithdata:

(nsdata

*)_data packets:

(uint32)_num_packets packetdescriptions:

(const audiostreampacketdescription*

)_packet_descriptions

uint32 formatlistsize;

boolean b;//拿**流檔案id申請它的**格式結構資訊

audiofilestreamgetpropertyinfo(audio_file_stream,

kaudiofilestreamproperty_formatlist,

&formatlistsize,

&b);

// now get the format data得到**格式資訊

nsmutabledata

*listdata =

[nsmutabledata datawithlength:formatlistsize];

osstatus status = audiofilestreamgetproperty(audio_file_stream,

kaudiofilestreamproperty_formatlist,

&formatlistsize,

[listdata mutablebytes]

); audioformatlistitem *formatlist =

[listdata mutablebytes];

// the formatlist property isn't always supported, so an error isn't unexpected here.

// therefore, we won't call verify_status on this status code.

if(status == noerr)

else

}else} 

float32 outvalue ;

audioqueuegetparameter(audio_queue,kaudioqueuedeviceproperty_numberchannels,&outvalue) ;

if(!

[self createaudioqueue])}

-(bool

)createaudioqueue

[buffer enqueueonqueue:audio_queue]; -

(void

)enqueueonqueue:

(audioqueueref)queue

buffer->maudiodatabytesize =

[data length];

memcpy((

char

*)buffer->maudiodata, [data bytes], [data length]

); error = audioqueueenqueuebuffer(queue, buffer, num_packets, packet_descriptions);

if(error)

}

音訊的總結

音訊編解碼器 codec 錄音 麥克風 模擬訊號 數碼訊號 1.對pcm等訊號進行d a轉換,把數字的音訊訊號轉換為模擬訊號 2.對mic linein或者其他輸入源的模擬訊號進行a d轉換,把模擬的聲音頻號轉變cpu能夠處理的數碼訊號 4.對音訊訊號做出相應的處理,例如音量控制,功率放大,eq控制...

webrtc音訊引擎總結

該篇文章將基於voice engine模組對webrt音訊做個總結,但是不包括網路傳輸部分的細節介紹。關於webrtc的網路模組,將會在接下來的時間以單獨的網路模組介紹與大家分享。voice engine 引擎模組的 結構 include資料夾下的所有.h檔案,都是在呼叫webrtc音訊引擎的時候必...

音訊變調演算法總結

一段聲音可以理解為多種頻率正弦波的疊加 1 而音調就是一段聲音的主要頻率。改變了主要頻率,就是改變了音調 提高了主要頻率,就是公升調,反之亦然。同步交疊相加方法 synchronized overlap add method,sola 是一種常見的時域法。在 sox 中的 pitch 音效使用的就是...