ShowWaveForm’�A C# Implementation of CWaveForm

Environment: VS.NET


ShowWaveForm is based from a C++ class, called CWaveFile, written by Alexander Beletsky. This is a port to C#, with some added features. A small .wav file is included in the demo project .zip file for testing.


WaveFile.cs is the main class. It reads and parses the WAV file headers. When passed a PaintEventArgs (typically from an OnPaint() event), it will draw the waveform. The class also allows for zooming in/out on the waveform.


Using the class is very simple. Here is the sample project file open menu handler:

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( );


And here is the Paint handler of the demo project:

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…”;

The last interesting thing in the demo project is the MouseWheel handler, which controls zooming of the waveform:

protected override void OnMouseWheel( MouseEventArgs mea )
if ( mea.Delta * SystemInformation.MouseWheelScrollLines /
120 > 0 )
wave.ZoomIn( );
wave.ZoomOut( );

Refresh( );



This is my first attempt at programming in C#/.NET. So, please comment on everything in this code! Specifically, I have questions about the following:

  • Drawing the waveform is very slow for large files, perhaps because of using PageScale?
  • How to catch some of the errors that can occur in zooming in/out too far
  • Drawing of stereo waveforms


Download demo project – 11 Kb

Download source – 2 Kb

More by Author

Must Read