Как я могу использовать libsndfile для загрузки файла .wav в массив?

Я просмотрел примеры программ, использующих libsndfile, но не смог скомпилировать ни одну из них. Я хочу иметь возможность читать файл .wav в массиве целых (или двойных) чисел, не беспокоясь о том, что это за файл .wav или даже о чем-либо в заголовке. Меня интересует только получение данных в массиве, поэтому я могу обрабатывать отдельные образцы самостоятельно.

Я скачал исходный код libsndfile. Так много файлов и папок, что я не знаю, с чего начать. Что мне нужно включить? Какие методы мне нужно использовать? У кого-нибудь есть простой пример, который действительно работает?


person Jackson Dean Goodwin    schedule 04.08.2012    source источник
comment
На какой платформе вы находитесь? Какая у вас операционная система?   -  person thb    schedule 04.08.2012
comment
Я использую Windows 7 (64-бит)   -  person Jackson Dean Goodwin    schedule 04.08.2012


Ответы (3)


Я главный автор / сопровождающий libsndfile.

Предварительно скомпилированные двоичные пакеты содержат DLL Windows, документацию, файлы заголовков и некоторые примеры файлов проектов VC7 и VC9.

Единственная причина, по которой вам может понадобиться исходный код, - это посмотреть на примеры программ в каталоге examples /, если архив с исходным кодом.

person Erik de Castro Lopo    schedule 05.08.2012

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

Ни один из ответов не отвечает на главный вопрос: как я могу использовать libsndfile для загрузки файла .wav в массив?

Ответ с использованием SndFileHandle и C ++ 17 (17 действительно не нужны, но, эй, мне нравится поощрять использование):

#include <sndfile.hh>
std::filesystem::path path = "file/path.wav";
if (std::filesystem::path::is_regular_file(path))
{
  SndfileHandle myf = SndfileHandle(&path.string()[0]);
  std::vector<float> array(myf.frames());
  myf.read(&array[0], int(myf.frames());
}

Немного больше можно найти здесь: http://ofdsp.blogspot.com/2011/07/loading-wav-file-with-sndfilehandle.html (этот пример вдохновлен этим)

Также обратите внимание, что я решил прочитать его в векторе с плавающей запятой. Может быть что угодно, просто запомните, что вы получаете, может зависеть от битрейта файла wav (или другого типа звука), хотя я считаю, что libsndfile написан для того, чтобы вы в значительной степени забыли об этом.

Что касается других частей исходного вопроса, других ответов должно быть достаточно.

person Rasmus Dall    schedule 19.12.2018

Кажется, здесь libsndfile, предварительно скомпилированный и упакованный для легкой установки в Windows 7: http://www.mega-nerd.com/libsndfile/libsndfile-1.0.25-w64-setup.exe.

(Конечно, ничто не мешает вам исследовать исходный код, когда захотите, если это вас заинтересует; но, даже если исходный код действительно вас интересует, ваша практика использования предварительно скомпилированного пакета поможет сориентировать вас к исходному тексту. Похоже, что родной платформой libsndfile является Debian GNU / Linux, поэтому с исходным кодом может быть немного сложнее работать под Windows. К счастью, если предварительно скомпилированный пакет вам подходит, вам не нужно больше беспокоиться о источник.)

person thb    schedule 04.08.2012
comment
Конечно, ответ предполагает, что вы еще не установили предварительно скомпилированный пакет. Ваш вопрос, похоже, не отвечал, так или иначе. Удачи. - person thb; 04.08.2012