很抱歉,如果这是一个新手问题,这是我第一次访问这个网站!
目前,我有一个数组:
float delayTable[];
这适用于音频编程类,因此该数组将用于存储单个音频样本。在一秒钟内,它需要存储44,100个不同的浮动。如何使用malloc为其提供足够的内存来保存10秒以上的数据?干杯!
答案 0 :(得分:3)
我不确定你的意思是10秒以上,这可能是任何高于10的数字...... 如果要为信号分配10秒的数组,则必须将采样率乘以时间,然后乘以样本的大小,这样:
float *delayTable = malloc(44100 * 10 * sizeof(float));
可替换地:
float *delayTable = malloc(44100 * 10 * sizeof(*delayTable));
答案 1 :(得分:1)
问题是“10+”秒的录音时间 - 表明长度不固定。这个答案是“0+”秒录制时间,随着录制的进行扩展阵列。
#include <stdio.h>
#include <stdlib.h>
float getsample(void) { // placeholder function
return (float)rand()-1;
}
int main(void) {
float *delayTable = NULL; // start with no array memory
float sample;
int samplespersec = 44100;
int secs = 0;
int numsamples = 0;
int maxsamples = 0;
while ((sample = getsample()) >= 0) { // imaginary, func returns < 0 when done
if (numsamples == maxsamples) { // array is full
secs++; // memory for one more second
maxsamples = secs * samplespersec; // improve by checking int constraint
delayTable = realloc(delayTable, maxsamples * sizeof(*delayTable)); // expand
if (delayTable == NULL)
exit(1); // improve this error condition
}
delayTable[numsamples++] = sample;
}
printf("Recorded %d samples\n", numsamples);
//free(delayTable);
return 0;
}