大佬教程收集整理的这篇文章主要介绍了ruby – 从文件中提取快速傅里叶变换数据,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
很多我发现的例子一直在做可视化和图形化的东西.我只需要FFT数据,没有了.我需要获得音频数据,并对其进行FFT.我的最终目标是计算一些东西,比如所有频率(加权幅度),BPM的平均值/中值/模式,第25个百分位数和第75个百分位数,还有一些其他好的特性,以便以后可以将类似的声音聚集在一起.
首先我试图使用ruby-audio和fftw3,但是我从来没有去过这两个人真正的合作.文档不是很好,所以我真的不知道什么数据被洗牌.
接下来,我试图使用bplay / brec并限制我的Ruby脚本,只需使用STDIN并执行FFT(仍在使用fftw3).但是,由于服务器没有声卡,我无法获得播放/播放,因此我无法直接将音频直接发送到STDOUT,而无需先访问音频设备.
这是我最接近的:
# extracTing audio from wav with ruby-audio buf = RubyAudio::Buffer.float(1024) RubyAudio::Sound.open(f@R_696_8313@ 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上找不到更好的结果.那么也许你们可以帮助我吗?
谢谢!
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(f@R_696_8313@ 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...
以上是大佬教程为你收集整理的ruby – 从文件中提取快速傅里叶变换数据全部内容,希望文章能够帮你解决ruby – 从文件中提取快速傅里叶变换数据所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。