ruby – 从文件中提取快速傅里叶变换数据
发布时间:2020-12-16 22:28:18 所属栏目:百科 来源:网络整理
导读:我正在构建一个应该在服务器上运行并分析声音文件的工具.我想在 Ruby中这样做,因为我所有的其他工具都是用Ruby编写的.但是,我找不到一个完成这个的好方法. 很多我发现的例子一直在做可视化和图形化的东西.我只需要FFT数据,没有了.我需要获得音频数据,并对其
我正在构建一个应该在服务器上运行并分析声音文件的工具.我想在
Ruby中这样做,因为我所有的其他工具都是用Ruby编写的.但是,我找不到一个完成这个的好方法.
很多我发现的例子一直在做可视化和图形化的东西.我只需要FFT数据,没有了.我需要获得音频数据,并对其进行FFT.我的最终目标是计算一些东西,比如所有频率(加权幅度),BPM的平均值/中值/模式,第25个百分位数和第75个百分位数,还有一些其他好的特性,以便以后可以将类似的声音聚集在一起. 首先我试图使用ruby-audio和fftw3,但是我从来没有去过这两个人真正的合作.文档不是很好,所以我真的不知道什么数据被洗牌. 这是我最接近的: # 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] return fft end 所以现在我被卡住了,在Google上找不到更好的结果.那么也许你们可以帮助我吗? 谢谢! 解决方法
这是我正在尝试实现的最终解决方案,非常感谢Randall Cook的有用建议.在Ruby中提取wav文件的声波和FFT的代码:
require "ruby-audio" require "fftw3" fname = ARGV[0] window_size = 1024 wave = Array.new fft = Array.new(window_size/2,[]) begin buf = RubyAudio::Buffer.float(window_size) RubyAudio::Sound.open(fname) do |snd| while snd.read(buf) != 0 wave.concat(buf.to_a) na = NArray.to_na(buf.to_a) fft_slice = FFTW3.fft(na).to_a[0,window_size/2] j=0 fft_slice.each { |x| fft[j] << x; j+=1 } end end rescue => err log.error "error reading audio file: " + err exit end # now I can work on analyzing the "fft" and "wave" arrays... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |