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

  • The 2014 State of DevOps Report — based on a survey of 9,200+ people in IT operations, software development and technology management roles in 110 countries — reveals: Companies with high-performing IT organizations are twice as likely to exceed their profitability, market share and productivity goals. IT performance improves with DevOps maturity, and strongly correlates with well-known DevOps practices. Job satisfaction is the No. 1 predictor of performance against organizational …

  • Data integrity and ultra-high performance dictate the success and growth of many companies. One of these companies is BridgePay Network Solutions, a recently launched and rapidly growing financial services organization that allows merchants around the world to process millions of daily credit card transactions. Due to the nature of their business, their IT team needed to strike the perfect balance between meeting regulatory-mandated data security measures with the lowest possible levels of latency and …

Most Popular Programming Stories

More for Developers

RSS Feeds

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