ShowWaveForm’�A C# Implementation of CWaveForm

Environment: VS.NET

Introduction

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

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.

Usage

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( );
else
wave.ZoomOut( );

Refresh( );

}

Questions/Discussion

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

Downloads


Download demo project – 11 Kb


Download source – 2 Kb

More by Author

Must Read