65.9K
CodeProject is changing. Read more.
Home

Multimedia PeakMeter Control

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.86/5 (17 votes)

Dec 6, 2001

CPOL

2 min read

viewsIcon

142726

downloadIcon

3181

Multimedia Meter Control - ala WinAmp.

Sample Image - PeakMeter.gif

Introduction

This Multimedia PeakMeter control can be used to display audio metering information in Multimedia applications. It has a few features like those found in WinAmp such as peak value fall off. This is the third version of this control, which now can display three different color ranges. I hope that you will find it useful. I don't think there's any free PeakMeter like this available.

Luigi Bianchi has made a free OWL Version of this control available. You may want to view it here. You are free to use this control as you wish as long as it is not sold for profit without my consent. Just let me know if you use it in your application.

Description

This control should be very easy to use since it uses the same format as other MFC standard controls. Each function includes a header with description. The Peak falloff speed can be controlled with SetFalloffDelay function.

This new version allows you to use this control as a Progress control with the difference that you may have more than one band. To use this control as a progress control, don't call Start function. Peak Falloff effect and Grid can be turned on and off by using SetFalloffEffect and ShowGrid respectively.

This control uses Keith Rule's CMemDC class. An ATL version of this control can be created easily. The class CMemDC can be removed. An ATL (or ActiveX) version of this control can be created easily.

How to Use

Using this control is quite simple, you may create a static control and subclass it from a dialog. Both Vertical and Horizontal type of this control can be created this way. Add a static control to your dialog and use SS_LEFT or SS_CENTER to display the Horizontal or Vertical band for this control.

You may want to view the full features of this control by recompiling it with different values for color range and/or meter range. This control can also be used as a progress control. In this case, you should not call the Start method.

void CPeakMeterDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CPeakMeterDlg)
    DDX_Control(pDX, IDC_PMC_HORZ, m_PeakMeter1);
    //}}AFX_DATA_MAP
}
// Then Initialize your control like this
    m_PeakMeter1.SetMeterBands(10, 10); // use value of "1" to 
                                        // obtain smooth effect - see demo
    m_PeakMeter1.Start(1000/18); // 18 fps - puts delay in ms

// or create the control like this:
    // Create this control with create
    m_PeakMeter2.Create(WS_CHILD|WS_VISIBLE|PMS_VERTICAL, rc, this, IDC_PMC_HORZ);
    m_PeakMeter2.SetMeterBands(1, 10); // smooth horizontal band
    m_PeakMeter2.Start(1000/20); // 20 fps - puts delay in ms

// Change Band value like this - you can change all data or single value
// ArrayData is an array of "int" - see demo for more details
    m_PeakMeter1.SetData(ArrayData, 0, nElements);

History

  • 4 Feb 2002 - 1.1: Improved Falloff effect to look more like Audio system.
  • 10 June 2002 - 1.2: Added three ranges of color (low, medium, high).
  • 26 June 2002 - updated source.