我尝试使用c:
来管道arecord的输出shouldComponentUpdate()
我选择了#34; long"因为"签名32位" arecord命令中的规范。然而,gnuplot让我觉得无稽之谈。程序也会在几毫秒后完成,尽管我想录制4秒钟。我究竟做错了什么?
答案 0 :(得分:3)
似乎fscanf()用于不用于二进制的文本。感谢巴勃罗。修正后的版本如下:
int main(int argc,char *argv[]){
FILE* file = popen("arecord -q -t raw -r 8000 --format S32_LE -D plughw:0,0 -d 4", "r");
int32_t buffer[100];
FILE *fp;
fp=fopen("./record.dat", "w+");
int i,k,s;
for (i=0; i<100; i++){
fread(&buffer, sizeof(int32_t), 100, file);
for (k=0; k<100; k++){
s = k + 100 * i;
fprintf(fp,"%d\t%d\n", s , buffer[k] ) ;
}
}
pclose(file);
fclose(fp) ;
FILE *p = popen(GNUPLOT,"w");
fprintf(p, "set xrange [3000:3400]\n");
fprintf(p,"plot 'record.dat' lt rgb 'red' title 'raw' \n");
fclose(p);
return 0;
}
返回一个漂亮的情节: waves