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

  • Today's competitive marketplace requires the organization to frequently release and deploy applications at the pace of user demands, with reduced cost, risk, and increased quality. This book defines the basics of application release and deployment, and provides best practices for implementation with resources for a deeper dive. Inside you will find: The business and technical drivers behind automated application release and deployment. Evaluation guides for application release and deployment solutions. …

  • Download the Information Governance Survey Benchmark Report to gain insights that can help you further establish business value in your Records and Information Management (RIM) program and across your entire organization. Discover how your peers in the industry are dealing with this evolving information lifecycle management environment and uncover key insights such as: 87% of organizations surveyed have a RIM program in place 8% measure compliance 64% cannot get employees to "let go" of information for …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds