我正在嘗試提取wav文件的音頻內容並將結果波形導出爲圖像(bmp/jpg/png)。如何將音頻波形繪製成位圖
所以我發現下面的代碼繪製一個正弦波,按預期工作:
string filename = @"C:\0\test.bmp";
int width = 640;
int height = 480;
Bitmap b = new Bitmap(width, height);
for (int i = 0; i < width; i++)
{
int y = (int)((Math.Sin((double)i * 2.0 * Math.PI/width) + 1.0) * (height - 1)/2.0);
b.SetPixel(i, y, Color.Black);
}
b.Save(filename);
可正常工作完全,我希望做的是更換
int y = (int)((Math.Sin((double)i * 2.0 * Math.PI/width) + 1.0) * (height - 1)/2.0);
與像
int y = converted and scaled float from monoWaveFileFloatValues
那麼,我會如何最好地去做這個以最簡單的方式p ossible?
我有2個基本的問題,我需要處理(我認爲)
- 轉換浮在不鬆動的信息的方式來詮釋,這是由於
SetPixel(i, y, Color.Black);
其中x & y都爲詮釋 - 樣品跳過在x軸,使波形配合到限定空間
audio length/image width
得到的樣本數由單個像素
另以平均強度在其將被表示選項是找到不依賴於上述方法的繪製波形的另一種方法。 Using a chart可能是一個好方法,但我希望能夠直接渲染圖像
這是所有要從控制檯應用程序運行,我已經在一個浮動的音頻數據(減去標題)陣列。
更新1
下面的代碼使我得出使用System.Windows.Forms.DataVisualization.Charting
所需的輸出,但它花費了大約30秒,處理27776個樣本,同時它做什麼,我需要的,它是太很慢很有用。所以我仍然在尋找能夠直接繪製位圖的解決方案。如下圖所示
System.Windows.Forms.DataVisualization.Charting.Chart chart = new System.Windows.Forms.DataVisualization.Charting.Chart();
chart.Size = new System.Drawing.Size(640, 320);
chart.ChartAreas.Add("ChartArea1");
chart.Legends.Add("legend1");
// Plot {sin(x), 0, 2pi}
chart.Series.Add("sin");
chart.Series["sin"].LegendText = args[0];
chart.Series["sin"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
//for (double x = 0; x < 2 * Math.PI; x += 0.01)
for (int x = 0; x < audioDataLength; x ++)
{
//chart.Series["sin"].Points.AddXY(x, Math.Sin(x));
chart.Series["sin"].Points.AddXY(x, leftChannel[x]);
}
// Save sin_0_2pi.png image file
chart.SaveImage(@"c:\tmp\example.png", System.Drawing.Imaging.ImageFormat.Png);
所以你有任何代碼讀取音頻文件?刪除標題,然後查看數據?這應該是你的開始;只有在繪圖之後..而且,不,對於繪製圖表的點數並不是真的這麼好,imo – TaW
@TaW - 「我已經將音頻數據(除了標題)放在浮點數組中。 「所以我正在尋找下一步。 – Majickal