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

  • Is your compliance strategy relying on disconnected processes and tools that leave your organization at risk? Do your security and operations teams run into conflicts--leading to a gap between audit and remediation? Now you can make even the most complex and dynamic IT infrastructure fully secure and compliant. Read this eBook and learn how to: Improve process and close the SecOps gap Quickly detect, audit and remediate breaches Create a more agile environment to comply to regulatory mandates Better …

  • Relying on outside companies to manage your network and server environments for your business and applications to meet the needs and demands of your users can be stressful. This is especially true as many Managed Hosting organizations fail to meet their service level agreements. Read this Forrester total economic impact report and learn what makes INetU different and how they exceed their customers' managed hosting expectations.

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date