Tag: wav

从文件中提取快速傅立叶变换数据

我正在构建一个应该在服务器上运行并分析声音文件的工具。 我想在Ruby中执行此操作,因为我的所有其他工具也都是用Ruby编写的。 但我找不到一个完成这个的好方法。 我发现的很多例子都是可视化器和图形化的东西。 我只需要FFT数据,仅此而已。 我需要获取音频数据,并对其进行FFT。 我的最终目标是计算一些东西,如平均值/中位数/模式,第25百分位数和第75百分位数在所有频率(加权幅度),BPM,以及可能还有一些其他好的特性,以便以后能够将类似的声音聚集在一起。 首先我尝试使用ruby-audio和fftw3,但我从来没有让两者真正合作。 文档也不好,所以我真的不知道什么数据被洗牌。 接下来我尝试使用bplay / brec并限制我的Ruby脚本只使用STDIN并对其执行FFT(仍然使用fftw3)。 但我无法让bplay / brec工作,因为服务器没有声卡,我没有设法直接将音频直接发送到STDOUT,而无需先进入音频设备。 这是我得到的最接近的: # extracting audio from wav with ruby-audio buf = RubyAudio::Buffer.float(1024) RubyAudio::Sound.open(fname) do |snd| while snd.read(buf) != 0 # ??? end end # performing FFT on audio def get_fft(input, window_size) data = input.read(window_size).unpack(“s*”) na = NArray.to_na(data) fft = FFTW3.fft(na).to_a[0, window_size/2] […]