从波形文件中获取频率和幅度

Posted

技术标签:

【中文标题】从波形文件中获取频率和幅度【英文标题】:get frequency and amplitude from wave file 【发布时间】:2012-05-31 12:22:31 【问题描述】:

我想使用 c# 。 我尝试了 NAudio 和 FFT,但结果一无所获。你能帮帮我吗?

WaveChannel32 wave = new WaveChannel32(new WaveFileReader(open.FileName));
byte[] buffer = new byte[16384];
int read = 0;
double[] _fft;

while (wave.Position < wave.Length)

    read = wave.Read(buffer, 0, 16384); 
    _fft = FourierTransform.FFTDb(ref buffer);

如果哪里有问题,不要责骂。我是新手。

【问题讨论】:

也许这有助于codeproject.com/Articles/19590/WAVE-File-Processor-in-C 用这段没有任何结果的代码修改你的问题。 【参考方案1】:

语音最方便:使用双fft,即倒谱fft(logfft(sample))) 查找音高

但这不是我在这里提交的原因。谷歌似乎仍然在这里参考另一个问题:“如何获得 .WAV 文件的 采样频率”。

这很容易。作为记录,在 NAudio 中,Mark Heath 在 2014 年回答了这个问题。这是我的版本,将字节率除以字节的样本大小以获得采样频率,

using var reader = new WaveFileReader(fileName);
var byterate = reader.WaveFormat.AverageBytesPerSecond;

How to read Bit rate of .wav file in C#

【讨论】:

@unknown6656 感谢您的编辑。很久以前 !顺便说一句,我建议省略使用。或者把大括号放回去;)祝你改装愉快.. grtz 啊,你会吗?由于 C#8 中引入了using declaration-statements(参见docs.microsoft.com/en-us/dotnet/csharp/whats-new/…),放回大括号不会改变该语句的含义。我删除了大括号以减少代码行数并增强可读性.... 真的吗?在上述声明中(2017 年),读者将在分号处被解除分配.. 至少在 v7 中确实如此.. 很高兴知道发生了变化.. 是的,如果您使用using (var x = new Reader()) ;,这仍然是正确的。分号表示一个空的表达式语句。但是,如果您使用 using var x = new Reader();,则变量 x 只会在其生命周期和/或范围结束时被释放和处置。【参考方案2】:

您可以使用Bass Audio Library。它有 .NET 包装器,您可以获得峰值幅度和采样率。

【讨论】:

不幸的是,这对我也没有帮助:(【参考方案3】:

我过去使用 MathNET.Numerics 成功编写了一个 GUI。

【讨论】:

以上是关于从波形文件中获取频率和幅度的主要内容,如果未能解决你的问题,请参考以下文章

python 问题。。。 对一个波形文件做fft,然后怎么获取那些频率分量? numpy有这个函数

DSP - 获取所有频率的幅度

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

音频波形到整数序列

在进行 FFT 和改变频率分量值之后,我只会在音频中得到噪音。我哪里错了?

返回 Numpys FFT 的数据并在音频文件中找到每秒的幅度和频率