首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用libsndfile库中的函数替换fscanf?

如何用libsndfile库中的函数替换fscanf?
EN

Stack Overflow用户
提问于 2011-04-13 21:21:25
回答 2查看 374关注 0票数 0

我用libsndfile库打开了wav文件,想要读完这个文件,得到FFT中的N个点,然后得到时域样本并计算FFT。

你知道如何用libsndfile库中的函数替换fscanf吗?下面是几行代码:

代码语言:javascript
复制
for(i=0; i < N; i++) fscanf(fs, "%lg%lg", &x[i][0], &x[i][1]);

所以,问题是我不知道如何使用wav。没有libsndfile,以及如何使用libsndfile实现一些东西。

谢谢,a。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-14 09:33:25

你说你想读N个样本,然后你就做了:

代码语言:javascript
复制
for(i=0; i < N; i++) fscanf(fs, "%lg%lg", &x[i][0], &x[i][1]);

所以你在读2*N个样本,我不知道为什么。

如果您抓取libsndfile源代码tarball,那么examples/目录中有示例程序。基本上是这样做的:

代码语言:javascript
复制
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) ;

这段代码假设你的文件是单声道(只有一个声道)。

票数 1
EN

Stack Overflow用户

发布于 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以获取具体的示例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5649960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档