相关疑难解决方法(0)

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

我正在构建一个应该在服务器上运行并分析声音文件的工具.我想在Ruby中这样做,因为我的所有其他工具也都是用Ruby编写的.但我找不到一个完成这个的好方法.

我发现的很多例子都是可视化器和图形化的东西.我只需要FFT数据,仅此而已.我需要获取音频数据,并对其进行FFT.我的最终目标是计算一些东西,如平均值/中位数/模式,第25百分位数和第75百分位数,所有频率(加权幅度),BPM,以及可能还有一些其他好的特性,以便以后能够将类似的声音聚集在一起.

首先我尝试使用ruby-audiofftw3,但我从来没有让两者真正合作.文档也不好,所以我真的不知道什么数据被洗牌.接下来,我试图用bplay/BREC和限制我的Ruby脚本只使用STDIN和对(仍然使用fftw3)执行FFT.但我无法让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]
    return fft
end
Run Code Online (Sandbox Code Playgroud)

所以现在我陷入困境,无法在Google上找到更好的结果.那么也许你们这些家伙可以帮助我吗?

谢谢!

ruby audio mp3 fft wav

10
推荐指数
2
解决办法
4344
查看次数

如何使用FFT绘制wav文件的频谱?

注意:这不是重复,我有相关问题以外的具体要求.

首先,我想绘制一个音频文件(.wav)的光谱,就像大胆一样(类似:如何从傅立叶变换中绘制频谱).

到目前为止,我能够读取和写入wav文件.但我的问题是我不知道我需要传递给FFT函数的确切值.顺便说一下,我在C#中使用Exocortex进行FFT.FFT函数要求我传递一个具有正确大小的复数数组(512,1024,...我假设),长度的可选整数参数和傅里叶方向(前向/后向).

具体问题:

  1. Exocortex库中的Complex(类)有两个值,即Real和Imaginary.我有一系列样本,所以应该是真实的,哪些应该是虚构的?
  2. 我有wav文件,所以长度应该假定为变量.如何将其传递给FFT函数?我应该选择一个大小(512/1024 /等),将整个样本分成大小,然后将所有样本传递给FFT吗?
  3. 我怎么知道应该在x轴上列出哪些频率?
  4. 如何绘制FFT数据?(我希望x轴是频率,y轴是分贝)

如果你不理解我的意思,那么尝试使用Audacity,导入音频文件,然后单击Analyze> Plot Spectrum.那些是想要重新创造的东西.请详细回答我的问题,因为我真的想学习这个.我只有一点背景知识.我只是数字信号处理的新手.另外请尽量不要将我引导到其他FFT站点,因为他们没有具体回答我的问题.


编辑:

我已经完成了一些阅读,并且发现了如何对音频数据进行FFT,但只有2的幂.那么我如何在长度不是2的音频文件中做同样的事情呢?根据一些我需要使用"窗口".我也做了一些搜索,发现它只需要稍后处理一部分波形.请记住,我想让音频文件的FFT不是它的一部分.那我现在该怎么办?请帮忙 :(

c# audio signal-processing fft

6
推荐指数
1
解决办法
1万
查看次数

标签 统计

audio ×2

fft ×2

c# ×1

mp3 ×1

ruby ×1

signal-processing ×1

wav ×1