0
안녕하세요 보드에서 녹화하려고하는데 4 초가 성공적으로 녹화되었습니다. 문제는 내가 더 많은 시간을 기록하려고 할 때 메모리가 충분하지 않다는 오류가 발생했습니다. 제 목표는 5 분짜리 파일을 녹음하는 것입니다. 지금까지는 샘플 인 snIn [256]이라는 버퍼를 만들었습니다. [16K * 4sec]의 큰 버퍼로 보내면 꽉 차면 wav 파일을 만듭니다. RAM이 부족한 상태에서 wav 파일을 생성하십시오.
#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);
}
가 다시 다시 직접 (대신 my_buffer를 사용)를 snIn [256] 버퍼와 wavefile의 "데이터 영역"을 채우기 위해, 가능한 해결책을 생각하고 끝에 wavfile를 닫는다. 저와 다른 해결책에 대해 어떻게 생각하는지 알려주세요.
에 오신 것을 환영합니다 :
이 여기에 전체 코드입니다 (내 컴퓨터에서 실행하는 임베디드 특정 코드를 제거). [The Tour] (http://stackoverflow.com/tour)를 읽으신 후 [Help Center] (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