使用C中的libsndfile读取.wav文件

时间:2016-07-09 15:11:51

标签: c mingw codeblocks libsndfile

我想在C中读取一个类似于Matlab的wavread命令的.wav文件。我遇到了这个似乎是解决方案的库http://www.mega-nerd.com/libsndfile/。但是有人可以解释如何安装这个库,以便我可以使用它的功能吗? (我以前从未这样做过,所以请帮忙)。我尝试包含sndfile.h但是出现了像Singletons这样的错误。我相信这是因为我没有正确地整合图书馆。

1 个答案:

答案 0 :(得分:0)

第一件事是安装库(我选择libsndfile-1.0.28-w32-setup.exe是因为我使用预先安装的MinGW codeblocks-17.12mingw-setup.exe运行code :: blocks,并且我认为默认情况下它具有32位编译器)并找到这些库三个文件:

  

sndfile.h(对我来说位于C:\Program Files (x86)\Mega-Nerd\libsndfile\include中)

     

libsndfile-1.lib(对我来说C:\Program Files (x86)\Mega-Nerd\libsndfile\lib

     

libsndfile-1.dllC:\Program Files (x86)\Mega-Nerd\libsndfile\bin

然后右键单击项目,然后转到构建选项...>搜索目录>编译器,然后添加sndfile.h目录的地址。

compiler directory

然后,转到构建选项...>链接器设置>链接库:并添加地址libsndfile-1.lib

link 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