我正在尝试读取一个充满“沉默”的5秒.wav文件,以测试C中的代码。但是,当尝试提取内容应位于的日期字段时,我能够读取标头(我认为应该为零),它会生成一些数字。根据下面的图片。
这是我的C代码:
#include <stdio.h>
#include <stdlib.h>
char buff[10000];
int main(){
int i;
FILE * fp;
FILE *flog;
if ((fp = fopen("Silencio2.wav", "rb")) == NULL){
printf("Fail!");
exit(1);
}
fseek(fp, 44, 0); // read from 44 byte to the end.
fread(buff,sizeof(int),1024,fp);
flog = fopen("Silencio2.txt","w"); // make a log file to generate chart
// print in hex to console and decimal to log file.
for(i = 0; i < 5000 ; i++){
printf("%i == %hhx \n",i,buff[i]);
fprintf(flog,"%d\n",buff[i]);
buff[i] = 0;
}
fclose(flog);
return 0;
}
.Wav标头阅读图像:
我们可以看到程序通过引入相关信息RIFF,WAVE,FMT,1通道,16bit,16khz和日期的开头(40〜44)正确读取了标头。
我用来读取.wav文件的来源: http://soundfile.sapp.org/doc/WaveFormat/
.wav文件的特征:
比特率:16位PCM; 频道:1; SampleRate:16khz。 时间:5s; 由Audacity生成,具有静音功能。
将此日志保存为txt后,我将粘贴在matlab中并读取原始文件,以便打印2之间的比较图以验证我的数据,但是我得到以下输出:
带有函数readaudio();的matlab的第一个图形处理
由我的代码生成的第二个图形日志。
脚本Matlab:
[Sile2,Fs] = audioread('Silencio2.wav');
title('Gerado pelo MATLAB');
subplot(2, 1, 2);
plot(CodeSile2);
title('Meu código');
subplot(2, 1, 1);
plot(Sile2);
剩下的问题是:我的结果是否一致?因为除了信号幅度的差异外,还有一个噪声,我不知道如何解释它的原因。由于信号是通过静音发生器产生的。
PS:是的,我知道libsnd,但是我想如何用此代码在stm32 / esp32中制作一个嵌入式系统,库使用的越少越好。