我正在尝试通过Fez Panda 2从麦克风中获取声音样本。我正在使用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;
}问题是我需要浮点值,而不是无符号字符,因为我正在对这些声音样本执行fft。所以我需要修改,为我提供浮点值。有什么想法吗?
发布于 2013-02-22 03:48:45
你有使用C的经验吗?特别是在*和&的意义上,*的意思是:获取地址指向的值。所以void ** args表示类似于‘获取从address获取的值所指向的值’之类的东西。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)。
编辑:我在文档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:中忽略了这一点。只需将缓冲区字节转换为float by 4 byte边界,我认为您会做得很好。
https://stackoverflow.com/questions/9400250
复制相似问题