2011-02-12 107 views
1

由於來自純C#背景,因此我對某些Objective C語法有點麻煩。我正在玩音頻隊列,我試圖設置InputAudioQueue屬性EnableLevelMetering並獲取CurrentLevelMeterDB屬性。我發現一對夫婦例子目的C.MonoTouch:幫助將目標C的幾行代碼轉換爲C#

設置屬性:

UInt32 enabledLevelMeter = true; 
AudioQueueSetProperty(queue,kAudioQueueProperty_EnableLevelMetering,&enabledLevelMeter,sizeof(UInt32)); 

獲取值:

AudioQueueLevelMeterState levelMeter; 
UInt32 levelMeterSize = sizeof(AudioQueueLevelMeterState); 
AudioQueueGetProperty(queue,kAudioQueueProperty_CurrentLevelMeterDB,&levelMeter,&levelMeterSize); 

Float32 peakDB = levelMeter.mPeakPower; 
Float32 averageDB = levelMeter.mAveragePower; 

API reference爲AudioQueue是很小的。我不確定在C#中爲以下值使用什麼。

public bool SetProperty (AudioQueueProperty property, int dataSize, IntPtr propertyData) 
public IntPtr GetProperty (AudioQueueProperty property, out int size) 

有人能幫我一個嗎?謝謝。

回答

1

一旦你有你AudioQueue創建(輸入或輸出),您可以撥打:

int enabled = queue.GetProperty<int> (AudioQueueProperty.EnableLevelMetering); 

設置是一點點討厭,你必須使用:

queue.SetProperty (AudioQueueProperty.EnableLevelMetering, 4, (IntPtr) &enabled); 
+0

真棒!謝謝米格爾,你統治! – robertweis 2011-02-14 04:25:17