如何解决如何用libsndfile库中的函数替换fscanf?
| 我使用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实现某些功能。
谢谢,
一种。
解决方法
您说要阅读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,sizeof (info));
if ((sf = sf_open (filename,SFM_READ,&info)) == NULL)
handle_error () ;
sf_read_double (sf,array,N) ;
sf_close (sf) ;
此代码假定您的文件是单声道的(仅一个通道)。
,您需要使用sf_open
打开文件,然后使用sf_read_float
读取文件以取回样本。
您可以在for循环中执行N次此操作,然后写入数组,然后将其发送到fft。
资料来源:libsndfile api
http://www.mega-nerd.com/libsndfile/api.html
另外,您可能想查看Audacity的ImportPCM.cpp作为具体示例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。