我查看了使用 libsndfile 的示例程序,但无法编译它们中的任何一个。我希望能够将 .wav 文件读入整数(或双精度)数组,而不必担心它是什么类型的 .wav 文件,甚至不必担心标题中的任何内容。我只关心将数据放入数组中,因此我可以对单个样本进行自己的处理。
我已经下载了 libsndfile 的源代码。有这么多文件和文件夹,我不知道从哪里开始。我需要包括什么?我需要使用哪些方法?有人有一个实际有效的简单示例吗?
我查看了使用 libsndfile 的示例程序,但无法编译它们中的任何一个。我希望能够将 .wav 文件读入整数(或双精度)数组,而不必担心它是什么类型的 .wav 文件,甚至不必担心标题中的任何内容。我只关心将数据放入数组中,因此我可以对单个样本进行自己的处理。
我已经下载了 libsndfile 的源代码。有这么多文件和文件夹,我不知道从哪里开始。我需要包括什么?我需要使用哪些方法?有人有一个实际有效的简单示例吗?
我是 libsndfile 的主要作者/维护者。
预编译的二进制包包含 windows DLL、文档、头文件和一些示例 VC7 和 VC9 项目文件。
您需要源代码的唯一原因是查看示例/目录中的示例程序(如果源代码 tarball)。
有点老了,但我想我会为未来的读者插话。
两者都没有回答主要问题:如何使用 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 的编写是为了让你在很大程度上忘记这一点。
至于最初问题的其他部分,其他答案就足够了。
这里似乎是libsndfile,经过预编译和打包以便在 Windows 7 上轻松安装: http ://www.mega-nerd.com/libsndfile/libsndfile-1.0.25-w64-setup.exe 。
(当然,如果您有兴趣,没有什么可以阻止您随时研究源代码;但是,即使您对源代码感兴趣,您使用预编译包的练习也将有助于您了解源代码。它似乎libsndfile 的本机平台是 Debian GNU/Linux,因此在 Windows 下使用源代码可能有点棘手。幸运的是,如果预编译的软件包适合您,那么您不必再担心源代码。)