C# 无法使用NAudio获取音频的波形图像
无法使用此代码获取持续时间较短的音频流的波形图像。 我得到了完全空白的图像。是否有任何方法可以为持续时间较短的音频流获得正确的波形图像。我在这里使用NAudio的AudioFileReader函数C# 无法使用NAudio获取音频的波形图像,c#,c#-4.0,naudio,waveform,lame,C#,C# 4.0,Naudio,Waveform,Lame,无法使用此代码获取持续时间较短的音频流的波形图像。 我得到了完全空白的图像。是否有任何方法可以为持续时间较短的音频流获得正确的波形图像。我在这里使用NAudio的AudioFileReader函数 Bitmap bim = new Bitmap(1800,200); System.Drawing.Graphics g = Graphics.FromImage(bim); using (var reader = new AudioFileReade
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");
位图bim=新位图(1800200);
System.Drawing.Graphics g=Graphics.FromImage(bim);
使用(var reader=newaudiofilereader(“D:\\testsongs\\DawnJay.mp3”))
{
var样本=reader.Length/(reader.WaveFormat.Channels*reader.WaveFormat.BitsPerSample/8);
var f=0.0f;
var max=0.0f;
//波形最大宽度为4000像素:
变量批=(int)数学最大值(40,样本/4000);
var-mid=100;
var yScale=100;
float[]缓冲区=新的float[批];
int-read;
var-xPos=0;
钢笔=新钢笔(颜色:红色,2.0f);
g、 清晰(颜色为黑色);
while((read=reader.read(buffer,0,batch))==batch)
{
对于(int n=0;n
此处显示您的代码:
var batch = (int)Math.Max(40, samples / 4000);
这意味着您将接受每列至少40个样本。对于小文件,这可能意味着您的数据在输出位图中只会减少到少量的数据列。若你们正在缩小那个些数据以适应屏幕上的显示区域,你们的音频数据可能会消失
尝试将每个块的最小采样数更改为较小的值,这将使您有机会实际可视化小音频文件。您可能应该进行完整的最小-最大计算,否则您对非常小的文件的绘图将看起来完全错误。我修改了NAudio的Wpf演示代码,以生成波形图像。您好@Corey,正如您所说,通过减少40个采样值,我得到了持续时间较小的文件的图像。我还有一个疑问,那就是有可能得到像声音云一样的图像吗?不确定声音云是如何处理边缘情况的,但看起来他们只是在为每列设置一个简单的最大级别。我将编写一些代码,稍后将其发布到这里。我将完成这个项目。无论如何,谢谢你宝贵的时间。