在 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 文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 libsndfile 读取具有跳跃长度的波形文件,或识别文件中的样本数
使用 libsndfile 为 MATLAB 编写多声道音频