1.安装vcpkg
首先是编译器。我的编译器是VS2015/2017,如果使用2017的话需要先把英文语言包装上(Visual Studio Installer-->修改-->语言包)。另外,在我用vcpkg安装第三方库的时候他还提示需要安装git和cmake(提示里需要的版本比较新,可以直接去下载最新的先安装,免得他自动下载时由于网络问题导致失败)。
接下来就是vcpkg的安装,vcpkg是一个开源的库集成器,能让我们更轻松的集成开源第三方库。
vcpkg的使用教程:Visual Studio开源库集成器Vcpkg全教程--利用Vcpkg轻松集成开源第三方库_visual studio vcpkg_Achilles的博客-CSDN博客
vcpkg的github链接:GitHub - microsoft/vcpkg: C++ Library Manager for Windows, Linux, and MacOS
具体的使用方式参见上面的教程。不过安装也很简单,git clone之后,在PowerShell里执行vcpkg目录下的bootstrap-vcpkg.bat,会自动进行编译,之后我们使用生成的vcpkg.exe来执行命令即可。
2.安装libsndfile及其依赖库
libsndfile是一个C语言库,用于读取和写入包含采样音频数据的文件。
libsndfile的github链接:GitHub - libsndfile/libsndfile: A C library for reading and writing sound files containing sampled audio data.
其github主页上有构建方法(windows下也是推荐vcpkg),不过他推荐的只是依赖库install静态库,我把libsndfile也install的静态库(为了看源码和示例,也clone了代码)。命令列表如下(先把三个依赖库装了):
.\vcpkg.exe install libogg:x86-windows-static
.\vcpkg.exe install libvorbis:x86-windows-static
.\vcpkg.exe install libflac:x86-windows-static
.\vcpkg.exe install libsndfile:x86-windows-static
安装成功一个库的提示类似这样的:
3.在VS2017中引入libsndfile库
先配置第三方库,参照在VS中添加lib库的三种方法_vs添加lib_hercs的博客-CSDN博客,我用的链接中的第一种方式。
然后直接把示例的代码copy过来,测试下能不能正常使用(示例里除了C的,还有cs后缀(C#)和cc后缀(C++)的,因为我用C++,就copy的C++那个)。毫无意外,完美运行,接下来就可以准备进一步学习这个库了。
#include <cstdio>
#include <cstring>
#include <sndfile.hh>
#define BUFFER_LEN 1024
static void create_file(const char * fname, int format)
{
static short buffer[BUFFER_LEN];
SndfileHandle file;
int channels = 2;
int srate = 48000;
printf("Creating file named '%s'\n", fname);
file = SndfileHandle(fname, SFM_WRITE, format, channels, srate);
memset(buffer, 0, sizeof(buffer));
file.write(buffer, BUFFER_LEN);
puts("");
}
static void read_file(const char * fname)
{
static short buffer[BUFFER_LEN];
SndfileHandle file;
file = SndfileHandle(fname);
printf("Opened file '%s'\n", fname);
printf(" Sample rate : %d\n", file.samplerate());
printf(" Channels : %d\n", file.channels());
file.read(buffer, BUFFER_LEN);
puts("");
}
int main(void)
{
const char * fname = "test.wav";
puts("\nSimple example showing usage of the C++ SndfileHandle object.\n");
create_file(fname, SF_FORMAT_WAV | SF_FORMAT_PCM_16);
read_file(fname);
puts("Done.\n");
system("pause");
return 0;
}
完结。