Проблема с чтением .WAV файла в C - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь прочитать 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 канал, 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-й график Журнал, сгенерированный моим кодом.

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, тем меньше библиотек использует, тем лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...