在C

时间:2019-02-25 01:53:56

标签: c matlab audio

我正在尝试读取一个充满“沉默”的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标头阅读图像:

.Wav Header Reading Image

我们可以看到程序通过引入相关信息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的第一个图形处理

由我的代码生成的第二个图形日志。

Chart from matlab with comparative betwen 2 files, mycode and 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中制作一个嵌入式系统,库使用的越少越好。

0 个答案:

没有答案