Я пытаюсь прочитать 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 канал, 16 бит, 16 кГц и начало даты.(40 ~ 44).
Источник, который я использую для чтения файла .wav: http://soundfile.sapp.org/doc/WaveFormat/
Характеристики файла .wav:
Битрейт: 16 бит PCM;Каналы: 1;SampleRate: 16 кГц.Время: 5с;Генерируется Audacity с функцией генерации молчания.
После сохранения этого журнала в txt я вставляю в matlab и читаю исходный файл на нем, чтобы напечатать сравнительную диаграмму между двумя для проверки моих данных,однако я получаю следующий вывод:
1-й график Обработка matlab с помощью функции readaudio ();
2-й график Журнал, сгенерированный моим кодом.
Сценарий 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, тем меньше библиотек использует, тем лучше.