Visual C++ 7.1Visual C++ 7.0.NET 1.0Visual Studio .NET 2003.NET 1.1Windows 2000Windows XP中级开发Visual StudioWindowsC++.NETC#
ShowWaveForm






4.45/5 (12投票s)
2003年8月22日

147622

5325
一个用于处理 .WAV 文件的 C# 类
引言
ShowWaveForm
基于 Alexander Beletsky 编写的 C++ 类 CWaveFile
。这是一个移植到 C# 的版本,并添加了一些新功能。演示项目 .zip 文件中包含一个小 .wav 文件,用于测试。
WaveFile.cs
WaveFile.cs 是主类。它读取并解析 .WAV 文件头。当传递一个 PaintEventArgs
(通常来自 OnPaint
事件)时,它将绘制波形。该类还允许缩放波形。
用法
使用该类非常简单。以下是示例项目文件打开菜单处理程序
private void fileOpen_Click(object sender, System.EventArgs e)
{
OpenFileDialog fileDlg = new OpenFileDialog();
if ( fileDlg.ShowDialog() == DialogResult.OK )
{
wave = new WaveFile( fileDlg.FileName );
sbpMainPanel.Text = "Reading .WAV file...";
wave.Read( );
sbpMainPanel.Text = "Finished Reading .WAV file...";
m_DrawWave = true;
Refresh( );
}
}
以下是演示项目的 Paint 处理程序
private void Form1_Paint( object sender,
System.Windows.Forms.PaintEventArgs e
)
{
Pen pen = new Pen( ForeColor );
if ( m_DrawWave )
{
sbpMainPanel.Text = "Drawing .WAV file...";
wave.Draw( e, pen );
sbpMainPanel.Text = "Finished drawing .WAV file...";
}
}
演示项目中的最后一个有趣之处是 MouseWheel 处理程序,它控制波形的缩放
protected override void OnMouseWheel( MouseEventArgs mea )
{
if ( mea.Delta * SystemInformation.MouseWheelScrollLines / 120 > 0 )
wave.ZoomIn( );
else
wave.ZoomOut( );
Refresh( );
}
问题/讨论
这是我第一次尝试用 C#/.NET 编程。所以请评论这段代码中的所有内容!具体来说,我有一些问题:
- 对于大文件,波形的绘制非常慢,可能是因为使用了
PageScale
? - 如何捕获缩放过度导致的某些错误
- 绘制立体声波形