Я хочу прочитать файл .wav на C, аналогичный тому, что делает команда Matlab wavread. Я наткнулся на эту библиотеку http://www.mega-nerd.com/libsndfile/, которая кажется решением. Но может ли кто-нибудь объяснить, как установить эту библиотеку, чтобы я мог использовать ее функции? (Я никогда не делал этого раньше, поэтому, пожалуйста, помогите). Я попытался включить sndfile.h, но появляются ошибки типа cannot find -lsndfile-1.lib
. Я считаю, что это потому, что я неправильно интегрирую библиотеку.
Чтение файла .wav с помощью libsndfile в C
Ответы (1)
Первым делом нужно установить библиотеку (я выбрал libsndfile-1.0.28-w32-setup.exe
, потому что я запускаю code::blocks с предустановленным MinGW codeblocks-17.12mingw-setup.exe
и думаю, что по умолчанию у него 32-битный компилятор) и найдите эти три файла:
sndfile.h
(у меня он находится по адресуC:\Program Files (x86)\Mega-Nerd\libsndfile\include
)
libsndfile-1.lib
(для меняC:\Program Files (x86)\Mega-Nerd\libsndfile\lib
)
libsndfile-1.dll
(C:\Program Files (x86)\Mega-Nerd\libsndfile\bin
)
Затем щелкните правой кнопкой мыши свой проект и выберите Параметры сборки... › Поиск в каталогах › Компилятор и добавьте адрес каталога sndfile.h
.
Затем вы переходите к Параметры сборки... ›Настройки компоновщика › Связать библиотеки: и добавляете адрес libsndfile-1.lib
.
Наконец, вы копируете libsndfile-1.dll
рядом с местом, где будет создан файл .exe
(у меня это MyProject\bin\Debug
).
Вот простой пример кода:
#include <stdio.h>
#include <stdlib.h>
#include "sndfile.h"
int main(void)
{
char *inFileName;
SNDFILE *inFile;
SF_INFO inFileInfo;
int fs;
inFileName = "noise.wav";
inFile = sf_open(inFileName, SFM_READ, &inFileInfo);
sf_close(inFile);
fs = inFileInfo.samplerate;
printf("Sample Rate = %d Hz\n", fs);
return 0;
}
Выход:
Sample Rate = 44100 Hz