C++ 如何从wav文件中获取时域频率?

C++ 如何从wav文件中获取时域频率?,c++,audio,signal-processing,fft,wav,C++,Audio,Signal Processing,Fft,Wav,换句话说,我正在尝试播放一个.wav文件,为此,我需要知道它的频率和持续时间;我使用的API有一个方法,需要一个带有两个字段(频率和时间)的向量作为参数 我尝试使用快速傅里叶变换,但它给了我频率和幅度 mag /\ | | -|------>频率 但我需要这样的东西: 频率 /\ | | -|------>时间 我想知道是否有可能从wav文件中获得这些信息 数字音频信号是成对的序列(振幅、时间)。 或者你可以说它是时间的函数。 如果您获取一个音频信号序列并对该序列执行傅里叶变换(DFT/FFT)

换句话说,我正在尝试播放一个.wav文件,为此,我需要知道它的频率和持续时间;我使用的API有一个方法,需要一个带有两个字段(频率和时间)的向量作为参数

我尝试使用快速傅里叶变换,但它给了我频率和幅度

mag
/\ | | -|------>频率

但我需要这样的东西: 频率 /\ | | -|------>时间


我想知道是否有可能从wav文件中获得这些信息

数字音频信号是成对的序列(振幅、时间)。 或者你可以说它是时间的函数。 如果您获取一个音频信号序列并对该序列执行傅里叶变换(DFT/FFT),您将得到一个新序列,该序列包含(振幅、频率)对。 或者你可以说是频率的函数

此序列描述频域中信号的特性。 它根本不包含任何时间信息

我想,你想要的是一个函数,它描述了音频信号的频率成分随时间的变化。这不能通过简单的FFT实现

您可以做的是:

  • 获取音频数据流的N个样本,样本(0,…,N-1)
  • 执行FFT

  • 再对音频数据流进行N个采样,(m,…,m+N-1)和m,除非WAV文件仅包含一个恒定频率的正弦波,否则不只是要测量一个频率-对于语音、音乐等,将有复杂的时变成分分类。你真正想要实现的是什么?基音检测?你说的“频率”是指采样率吗?无论您使用什么方法打开
    wav
    文件,都应该能为您提供这些信息。@PaulR我想知道是否有可能通过声音的频率和时间来描述声音。例如:132赫兹…1毫秒、350赫兹…1毫秒、300赫兹…5毫秒等等。我不知道这是否可能,这就是为什么我要问你,一般来说,没有单一的“频率”(除非你处理的是纯正弦音调)。在任何一个给定的瞬间,声音都有一个频谱,这是一个幅度与频率的关系图。因此,对于一个完整的声音文件,你最终会得到一个频谱图,它是一个3D图形:通常时间在X轴上,频率在Y轴上,幅度作为强度值(通常使用调色板)。如果你真的在寻找音高而不是频率,那就完全不同了。