2012-02-22 60 views
0

我特林通過非斯熊貓2.獲得聲音從麥克風採樣,我使用RLP來實現這一目標。這裏是我的代碼:閱讀音頻RLP

int GHAL_AnalogIn_Read(unsigned char channel) 
{ 
     return ((*((int*)(ADC_DATA_BASE_ADDRESS) + channel)) >>8) & 0x3FF; 
} 
int ReadAudio(unsigned int *generalArray, void **args, unsigned int argsCount ,unsigned int *argSize) 
{ 
     unsigned char *buffer = (unsigned char*)args[0]; 
     int buffer_lengh = argSize[0]; 
     unsigned char channel = *(unsigned char*)args[1]; 
     int i=0; 
     while(i<buffer_lengh) 
     { 
      buffer[i] = GHAL_AnalogIn_Read(channel); 
      i++; 
      RLPext->Delay(100); 
     } 
     return 0; 
} 

問題是,我需要浮動值不unsigned字符因爲我在這些聲音樣本上執行fft。所以我需要修改,將提供我浮動值。有任何想法嗎?

+0

我正在嘗試自己實現RLP。任何幫助?該文檔說明它在默認情況下禁用並鎖定在USBizi上。 RLP.Enable()將啓用它。但我如何解鎖它? – 2013-02-21 19:41:32

回答

0

你有C的經驗嗎?特別是與*&的含義? *表示:獲取地址指向的值。所以void ** args表示有點像'獲取從地址獲得的值所指向的值'。 void用於自由輸入任何你喜歡的東西。由於不能將整個結構或對象放入參數中,因此可以將指針(地址)提供給結構或對象。通過使用*您可以獲得參數地址的值。

在C你沒有通過整個陣列中的說法,你通過第一指標的地址。

現在,你可以簡單地重新因子的功能是這樣的:

int ReadAudio(unsigned int *generalArray, float arg, unsigned int argsCount ,unsigned int *argSize) 

但作爲void **args現在指向一個緩衝區,我想你應該知道你要對收集的數據進行何種操作。模擬讀取將始終爲您提供整數,大多數ADC(模擬 - 數字轉換器)均爲10位左右。

如果浮子是32位系統上的4個字節,要在4字節邊界裂傷您的數據(unsigned char *buffer)。

編輯:我已經在documentatio忽略了這個:Note: Parameter of all function in RLP code file must have format follow this:Note: Parameter of all function in RLP code file must have format follow this:。只需將緩衝區字節按4字節的邊界轉換爲浮點數,我認爲你會很好。