从波形文件中获取频率和幅度
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有这个函数