0
嗨,我正在尝试从电路板进行记录,并且我已成功记录4秒。 问题是当我尝试记录更多时间时,我得到一个错误,告诉我没有足够的内存。我的目标是记录一个5分钟的文件。 直到现在我已经创建了一个名为snIn [256]的缓冲区,其中是样本。 我把它发送到[16K * 4sec]的大缓冲区,当它已满时,我创建wav文件。创建wav文件,而不会用完ram
#define WAVFILE_SAMPLES_PER_SECOND 16000
#define REC_TIME 4
const int NUM_SAMPLES = WAVFILE_SAMPLES_PER_SECOND * REC_TIME;
Array<int16_t> my_buffer(NUM_SAMPLES);
int rec(const char *filename, Array<int16_t> my_buffer) {
WavFileResult result;
wavfile_info_t info;
wavfile_data_t data;
// code for filling the info of the wav file: sample rate, byte rate , channels etc..
WAVFILE *wf = wavfile_open(filename, WavFileModeWrite, &result);
WAVFILE_DATA_NUM_CHANNELS(&data) = 1; rp = 0;
wavfile_write_info(wf, &info);
while (rp < NUM_SAMPLES) {
WAVFILE_DATA_CHANNEL_DATA(&data, 0) = my_buffer[rp];//fill the data of the wav file
wavfile_write_data(wf, &data);
rp += 1;
}
wavfile_close(wf);
return 0;
}
void fill_buffer (Array<int16_t> snIn , int &j) {
for (int i=0 ; i < SEG_SIZE ; i++) {
my_buffer[j] = snIn[i]; //puts all the 256 values in my_buffer
j++; }
if (sent_array == ((int)NUM_SAMPLES/SEG_SIZE)){ // if my_buffer is full, go to rec and make a wav file
rec (target_filename , my_buffer); }
}
int main()
{
Array<int16_t> snIn(256);
for (int n=0; n<256 ; n++)
{ //snIn gets new 256 values }
sent_array ++;
fill_buffer (snIn , j);
}
我连连想过一个可能的解决方案,以直接填写与SnIn系[256]缓冲液(而不是使用my_buffer)的wavefile的“数据区”,并在端部关闭wavfile。 请让我知道您对此和其他解决方案的看法。
欢迎堆栈溢出。请花些时间阅读[The Tour](http://stackoverflow.com/tour),并参阅[帮助中心](http://stackoverflow.com/help/asking)中的资料,了解您可以在这里问。 –
解决这些问题的正确工具是您的调试器。在*堆栈溢出问题之前,您应该逐行执行您的代码。如需更多帮助,请阅读[如何调试小程序(由Eric Lippert撰写)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您应该\编辑您的问题,以包含一个[最小,完整和可验证](http://stackoverflow.com/help/mcve)示例,该示例再现了您的问题,以及您在调试器。 –
问题是,我无法找到我使用的编译器中的任何调试器。就像我写的,我编程mbed.org在线编译器,这是非常简单的... – gab55