我用libsndfile库打开了wav文件,想要读完这个文件,得到FFT中的N个点,然后得到时域样本并计算FFT。
你知道如何用libsndfile库中的函数替换fscanf吗?下面是几行代码:
for(i=0; i < N; i++) fscanf(fs, "%lg%lg", &x[i][0], &x[i][1]);所以,问题是我不知道如何使用wav。没有libsndfile,以及如何使用libsndfile实现一些东西。
谢谢,a。
发布于 2011-04-14 09:33:25
你说你想读N个样本,然后你就做了:
for(i=0; i < N; i++) fscanf(fs, "%lg%lg", &x[i][0], &x[i][1]);所以你在读2*N个样本,我不知道为什么。
如果您抓取libsndfile源代码tarball,那么examples/目录中有示例程序。基本上是这样做的:
SNDFILE * sf ;
SF_INFO info ;
double array [N] ;
memset (&info, 0, sizeof (info));
if ((sf = sf_open (filename, SFM_READ, &info)) == NULL)
handle_error () ;
sf_read_double (sf, array, N) ;
sf_close (sf) ;这段代码假设你的文件是单声道(只有一个声道)。
发布于 2011-04-14 05:42:55
您需要使用sf_open打开该文件,然后使用sf_read_float读取该文件以获取示例。
你可以在for循环中这样做N次,然后写一个数组,然后把它发送给你的fft。
来源: libsndfile接口http://www.mega-nerd.com/libsndfile/api.html
此外,您可能想要查看Audacity的ImportPCM.cpp以获取具体的示例。
https://stackoverflow.com/questions/5649960
复制相似问题