无法使用 NAudio 获取音频的波形图像

本文关键字:波形 波形图 图像 音频 获取 NAudio | 更新日期: 2023-09-27 18:34:43

使用此

代码无法获取持续时间较短的音频流的波形图像。我得到完全空白的图像。有没有办法为持续时间较短的音频流获得正确的波形图像。我在这里使用NAudio的AudioFileReader功能。

        Bitmap bim = new Bitmap(1800,200);
        System.Drawing.Graphics g = Graphics.FromImage(bim);
        using (var reader = new AudioFileReader("D:''Test-Songs''DawnJay.mp3"))
        {
            var samples = reader.Length / (reader.WaveFormat.Channels * reader.WaveFormat.BitsPerSample / 8);
            var f = 0.0f;
            var max = 0.0f;
            // waveform will be a maximum of 4000 pixels wide:
            var batch = (int)Math.Max(40, samples / 4000);
            var mid = 100;
            var yScale = 100;
            float[] buffer = new float[batch];
            int read;
            var xPos = 0;
            Pen pen = new Pen(Color.Red, 2.0f);
            g.Clear(Color.Black);
            while ((read = reader.Read(buffer, 0, batch)) == batch)
            {
                for (int n = 0; n < read; n++)
                {
                    max = Math.Max(Math.Abs(buffer[n]), max);
                }                                      
                int X1 = xPos;
                int X2 = xPos;
                float Y1 = mid + (max * yScale);
                float Y2 = mid - (max * yScale);
                g.DrawLine(pen,X1, Y1, X2, Y2);
                max = 0;
                xPos++;
            }
        }
        bim.Save("D:''Images''waveform.png");

无法使用 NAudio 获取音频的波形图像

你的代码在这里:

var batch = (int)Math.Max(40, samples / 4000);

这意味着您将接受每列至少 40 个样品。 对于小文件,这可能意味着您的数据在输出位图中减少到只有少量数据列。 如果随后缩小该数据以适应屏幕上的显示区域,则音频数据可能会消失。

尝试将每个块的最小样本数更改为较小的值,这应该使您有机会实际可视化小型音频文件。 您可能应该进行完整的最小-最大计算,否则非常小的文件的绘图看起来完全错误。