c - 读取音频rlp

标签 c audio sampling

我正在尝试通过 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。所以我需要修改来为我提供浮点值。有什么想法吗?

最佳答案

你有使用C语言的经验吗?尤其是*&的含义? *表示:获取地址指向的值。所以 void ** args 表示类似“获取从地址获得的值所指向的值”之类的内容。 void 用于自由输入任何你喜欢的内容。由于您无法将整个结构或对象放入参数中,因此您需要提供指向结构或对象的指针(地址)。通过使用*,您可以获取参数地址上的值。

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

现在您可以简单地将函数重构为:

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

但是由于 void **args 现在指向一个缓冲区,我认为您应该知道要对收集的数据执行什么操作。模拟读取始终会为您提供一个整数,大多数 ADC(模拟 - 数字 - 转换器)都是 10 位左右。

如果 float 在 32 位系统上为 4 字节,您希望在 4 字节边界内破坏数据 (unsigned char *buffer)。

编辑:我在文档中忽略了这一点:注意:RLP 代码文件中所有函数的参数必须具有以下格式:注意:RLP 代码文件中所有函数的参数必须具有以下格式:.只需将缓冲区字节转换为 4 字节边界的 float ,我想你会做得很好。

关于c - 读取音频rlp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9400250/

相关文章:

python - 有效地从 numpy 数组中采样以相同数字结尾的连续整数序列?

c++ - 条件编译的注意事项

python - 如何使用流读取音频文件?

Android SENSOR_DELAY_FASTEST 不够快

python - sklearn 的 ParameterSampler 中的 random_state 参数有什么作用?

audio - 结合cdg和mp3时如何使ffmpeg尊重 "start_time"变量?

使用多个 main() 进行编译

c - 不会从文件读取到结构

无法通过 strcpy 从参数复制到 char 数组

delphi - Winmm.dll无法播放某些WAV声音吗?