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


Comments

  • Works on Linux too :)

    Posted by t3rmin4t0r on 06/09/2004 08:52am

    It works - though I think the color handling was ugly (read that as I hate white bgs :) http://demo.dotgnu.org/~t3rmin4t0r/waveform.png No changes except color .. if you look at the terminal , you'll see the compile command too. Anyway nice portable code :)

    Reply
  • Because it's your first attempt, it's very good.

    Posted by Wosiu on 04/13/2004 01:26pm

    Otherwise it would be Average. Thank you very much this is exactly what I was looking for. I'm currently analyzing your code to write something more advanced as my university project ;) thx

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Between contractors and employees, there is a great deal of risk surrounding the privacy and security of sensitive data in the healthcare industry. When a breach is suspected, the law requires that healthcare organizations quickly launch an investigation to find the source and scope of the issue. These investigations can be quite costly, to say nothing of the penalties for the breach itself and the damage to reputation and brand. This white paper details new affordable software tools that can help healthcare …

  • Organizations across the world continue to strive for greater agility, efficiency, and innovation. But they also need to cut costs, improve productivity and become more competitive. These new requirements create complexity and extra tasks for IT to manage. But with greater complexity, it is easy to miss a minor system vulnerability, which in turn can cause major security issues. This white paper analyzes how complexity in the IT environment is causing new security challenges and how best to address this …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds