2011-06-05 122 views
0

我是新來的iOS編程,我在這裏找到了一些代碼玩耍:http://code.google.com/p/ios-coreaudio-example/操縱數據

基本上我從麥克風輸入獲得的路由和它直接到揚聲器/耳機。但是,我想在揚聲器播放之前操作音頻。

我想訪問和操作類型爲void *的mData,我想我必須將它轉換爲其他東西。

現在,這裏是我的代碼:

SInt16* samples = (SInt16*)(tempBuffer.mData); //cast to something usable 

for (int i = 0; i < tempBuffer.mDataByteSize; i++) 
{ 
    NSLog(@"%@", *(samples+i)); 
} 

我甚至不知道什麼是通過指針來訪問數據的最佳方式。我有一些來自學校的C++指針的使用經驗,但我不確定它在Objective-C中是否有任何不同(我只是通過此代碼獲得EXC_BAD_ACCESS)。

謝謝。

回答

1

使用RemoteIO音頻單元時,可以使用帶有kAudioUnitProperty_StreamFormat的AudioUnitSetProperty爲音頻樣本幀設置所需的數據類型和格式。然後,由於您設置了數據類型,因此在從回調緩衝區中讀取樣本時,您將知道使用哪種類型(轉換)。

另請注意,緩衝區中短整數或短浮點數的數量少於字節數(使用Apple的C數據類型)。

+0

好吧,我想我現在有。 'mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;' 所以我使用'int32_t'作爲數據。謝謝:) – Baldur 2011-06-06 08:19:11

+0

我剛剛爲我的項目發佈了另一個問題。也許你也有答案? :) http://stackoverflow.com/questions/6249491/an-algorithm-for-inverting-a-soundwave – Baldur 2011-06-06 08:41:14