首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在读取音频rlp

正在读取音频rlp
EN

Stack Overflow用户
提问于 2012-02-23 01:53:38
回答 1查看 100关注 0票数 0

我正在尝试通过Fez Panda 2从麦克风中获取声音样本。我正在使用rlp来完成这项工作。下面是我的代码:

代码语言:javascript
复制
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。所以我需要修改,为我提供浮点值。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-22 03:48:45

你有使用C的经验吗?特别是在*&的意义上,*的意思是:获取地址指向的值。所以void ** args表示类似于‘获取从address获取的值所指向的值’之类的东西。void用于自由输入您喜欢的任何内容。由于不能将整个结构或对象放入参数中,因此需要提供指向结构或对象的指针(地址)。通过使用*,您可以获得参数地址的值。

在C中,你不会在参数中传递整个数组,而是传递第一个索引的地址。

现在,您可以简单地将您的函数重新分解为如下所示:

代码语言:javascript
复制
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边界,我认为您会做得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9400250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档