小编Tho*_*num的帖子

WAV文件分析C(libsndfile,fftw3)

我正在尝试开发一个简单的C应用程序,它可以在WAV文件中的给定时间戳下在特定频率范围内给出0-100的值.

示例:我的频率范围为44.1kHz(典型的MP3文件),我想将该范围分成n个范围(从0开始).然后我需要得到每个范围的幅度,从0到100.

到目前为止我管理的内容:

使用libsndfile我现在能够读取WAV文件的数据.

infile = sf_open(argv [1], SFM_READ, &sfinfo);

float samples[sfinfo.frames];

sf_read_float(infile, samples, 1);
Run Code Online (Sandbox Code Playgroud)

但是,我对FFT的理解相当有限.但我知道为了使振幅达到我需要的范围是必需的.但是我该如何继续前进呢?我找到了FFTW-3库,它似乎适用于此目的.

我在这里找到了一些帮助:https://stackoverflow.com/a/4371627/1141483

并在这里查看了FFTW教程:http://www.fftw.org/fftw2_doc/fftw_2.html

但由于我不确定FFTW的行为,我不知道从这里开始.

另一个问题,假设您使用libsndfile:如果强制读取单引导(使用立体声文件)然后读取样本.那么你真的只会阅读总文件的一半样本吗?其中一半来自频道1,还是自动过滤出来?

非常感谢您的帮助.

编辑:我的代码可以在这里看到:

double blackman_harris(int n, int N){
double a0, a1, a2, a3, seg1, seg2, seg3, w_n;
a0 = 0.35875;
a1 = 0.48829;
a2 = 0.14128;
a3 = 0.01168;

seg1 = a1 * (double) cos( ((double) 2 * (double) M_PI * (double) n) / ((double) N - (double) 1) );
seg2 = a2 * (double) cos( …
Run Code Online (Sandbox Code Playgroud)

c fft wav libsndfile fftw

10
推荐指数
1
解决办法
7970
查看次数

标签 统计

c ×1

fft ×1

fftw ×1

libsndfile ×1

wav ×1