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

Posted

技术标签:

【中文标题】在 C 中使用 libsndfile 读取 .wav 文件【英文标题】:Reading a .wav file using libsndfile in C 【发布时间】:2016-07-09 15:11:50 【问题描述】:

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

【问题讨论】:

你的环境是什么(编译器和IDE,如果你使用的话)? codeBlocks IDE 上的 MinGW 编译器 【参考方案1】:

首先是安装库(我选择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.dll(C:\Program Files (x86)\Mega-Nerd\libsndfile\bin)

然后你右击你的项目并进入Build options...> Search目录> Compiler并添加sndfile.h目录的地址。

然后,你进入Build options...>Linker settings>Link libraries:并添加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

【讨论】:

以上是关于在 C 中使用 libsndfile 读取 .wav 文件的主要内容,如果未能解决你的问题,请参考以下文章

qt中使用libsndfile实时播放声音c++

使用 libsndfile 读取具有跳跃长度的波形文件,或识别文件中的样本数

Libsndfile - 如何处理额外的块(元数据)

使用 libsndfile 为 MATLAB 编写多声道音频

如何使用 libsndfile 打开加载到内存中的声音文件?

OSX 上的 Libsndfile 损坏数据