首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取音频wav数据并绘制信号波形

读取音频wav数据并绘制信号波形
EN

Stack Overflow用户
提问于 2020-11-11 07:44:45
回答 1查看 542关注 0票数 1

我的任务是分析一个wav音频文件(过滤,FFT等)。在C#中。目前我正试图正确地将字节转换为双倍,以便用scottplot绘制波形的音频信号,我尝试使用Naudio库,但没有找到任何读取音频数据和绘制它的成功,最终破坏了我的项目。下面的代码是我将wav字节读入数组并将其转换为双精度数组以使用scottplot绘制信号的地方,这不起作用,我使用的是windows forms app(.NET内核)。

代码语言:javascript
复制
        byte[] wavData = File.ReadAllBytes(@"C:\Users\me\Documents\africa-song.wav");
        double[] values = new double[wavData.Length / 8];
        Buffer.BlockCopy(wavData, 0, values, 0, values.Length * 8);
        formsPlot1.plt.PlotSignal(values, 44100);

如果有更好的库我可以使用或工作来实现这一点,将不胜感激

EN

回答 1

Stack Overflow用户

发布于 2020-12-20 01:24:06

用NAudio从WAV文件中读取值

您可以直接从WAV文件中读取字节,但这并不总是很容易,因为不同的WAV文件具有不同大小的头部,因此您并不总是知道第一个数据字节位于何处。您还必须读取和解释报头,以了解数据格式(每个样本的字节数、是否为浮点等)以及有多少通道。

从WAV文件中读取值的更简单方法是使用NAudio。我使用此方法将任何WAV文件数据的值转换为双精度数组:

代码语言:javascript
复制
static (double[] audio, int sampleRate) ReadWav(string filePath)
{
    using var afr = new NAudio.Wave.AudioFileReader(filePath);
    int sampleRate = afr.WaveFormat.SampleRate;
    int sampleCount = (int)(afr.Length / afr.WaveFormat.BitsPerSample / 8);
    int channelCount = afr.WaveFormat.Channels;
    var audio = new List<double>(sampleCount);
    var buffer = new float[sampleRate * channelCount];
    int samplesRead = 0;
    while ((samplesRead = afr.Read(buffer, 0, buffer.Length)) > 0)
        audio.AddRange(buffer.Take(samplesRead).Select(x => (double)x));
    return (audio.ToArray(), sampleRate);
}

使用ScottPlot绘制值

与内置的图形库不同,ScottPlot允许对具有数百万个点的数据集进行鼠标交互的平移和缩放,因此即使您的音频文件有一个小时长,您也可以轻松地显示它。看起来你已经非常接近你的原始代码了!

代码语言:javascript
复制
(double[] audio, int sampleRate) = ReadWav("demo.wav");

formsPlot1.plt.PlotSignal(audio, sampleRate);
formsPlot1.plt.Title("WAV File Data");
formsPlot1.plt.XLabel("Time (seconds)");
formsPlot1.plt.YLabel("Audio Value");
formsPlot1.plt.AxisAuto(0);
formsPlot1.Render();

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64778448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档