【发布时间】:2021-09-24 21:12:44
【问题描述】:
我尝试开发一种音频字幕工具并使用 Naudio 生成波形供用户识别声音,每个音频大约 1 小时,我发现某些音频的波形与中间的声音不匹配音频。
这里是代码
public static class WaveFormRendererTool
{
public static void draw(int width, string filename)
{
string imagepath = filename+".png";
var maxPeakProvider = new MaxPeakProvider();
var rmsPeakProvider = new RmsPeakProvider(200); // e.g. 200
var samplingPeakProvider = new SamplingPeakProvider(200); // e.g. 200
var averagePeakProvider = new AveragePeakProvider(4); // e.g. 4
SolidBrush brush = new SolidBrush(Color.Green);
var myRendererSettings = new StandardWaveFormRendererSettings();
//var myRendererSettings = new SoundCloudBlockWaveFormSettings(Color.Red,Color.Green,Color.Yellow,Color.Blue);
myRendererSettings.Width = width;
myRendererSettings.TopHeight = 75;
myRendererSettings.BottomHeight = 75;
myRendererSettings.BackgroundColor = Color.White;
myRendererSettings.PixelsPerPeak = 1;
myRendererSettings.TopPeakPen = new Pen(brush);
myRendererSettings.BottomPeakPen = new Pen(brush);
myRendererSettings.TopSpacerPen = new Pen(brush);
var renderer = new WaveFormRenderer();
var audioFilePath = filename;
var image = renderer.Render(audioFilePath, averagePeakProvider, myRendererSettings);
/* if (File.Exists(imagepath)) {
File.Delete(imagepath);
}*/
image.Save(imagepath, ImageFormat.Png);
renderer=null;
}
the wave form is flat but already speak
这里是宽度的代码:
MediaFoundationReader wf = new MediaFoundationReader(file.FullName);
audioLength = wf.TotalTime.TotalSeconds;
int width = Convert.ToInt32(wf.TotalTime.TotalSeconds*10);
canvas.Width = width * canstf.ScaleX;
canvaswidth = canvas.Width;
canvas.Height = 150;
img.Width = width;
//img.Height = 100;
//img.Height = 100
img.Source = null;
WaveFormRendererTool.draw(width, file.FullName);
img.Source = ImageRotation.LoadImageFile(file.FullName + ".png");
scroller1.ScrollToHorizontalOffset(0);
initialCanvas(width);
【问题讨论】: