【问题标题】:Non-realtime FFT analysis on audio file音频文件的非实时 FFT 分析
【发布时间】:2012-04-08 22:57:26
【问题描述】:

我正在尝试对文件进行频谱分析。由于我要分析的文件可能很长(40 分钟左右),因此实时分析对我来说并不是一个真正的选择。

我目前正在使用 Minin 的 FFT 类,但看起来我只能运行已经播放的歌曲。我也看过ess library,但我知道这也仅限于拥有实时流。

有没有办法只迭代小块的音频文件,然后对该数据运行 fft?

这是我现在所拥有的简化版本:

void setup()
{
  minim = new Minim(this);
  frameRate(30);

  song = minim.loadFile("../shortfile.mp3", 1024);
  song.loop();
  fft = new FFT(song.bufferSize(), song.sampleRate());
  background(#ffffff);  
}

void draw()
{
  fft.forward(song.mix);

  for(int i = 0; i < height/2; i++)
  {     
    intensity = constrain((log(fft.getBand(i)*1.4) / log(1.15)), 0, 40);
    intensity = int(map(intensity, 0 , 40, 0, 255));
    stroke(strokeColour(int(intensity)));

    point(framecount, i);
  }
}

【问题讨论】:

    标签: processing minim


    【解决方案1】:

    来自官方 GitHub 仓库的这个示例可能会对您有所帮助;他们称之为offline analysis

    【讨论】:

    • 酷,这似乎很有用。我现在并没有真正研究这个,但无论如何谢谢:)
    【解决方案2】:

    您想使用标准 io 命令读取文件的一部分,然后使用 FFTW。见http://www.fftw.org/fftw2_doc/fftw_2.html

    或者,您可以在线从 sn-ps 编写自己的 FFT 代码。这将比学习如何使用 FFTW 更快。看看这个页面http://cnx.org/content/m12016/latest/ 它似乎有一个 C FFT 实现。如果去掉虚部,您将得到一个易于理解的一维 FFT 方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-17
      • 2011-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 2013-07-08
      相关资源
      最近更新 更多