Naughter Software Logo

CMMSystem LogoCMMSystem v1.05 A set of C++ classes encapsulating the Win32 Multimedia APIs

Welcome to CMMSystem, a collection of C++ classes to encapsulate some of the Win32 Multimedia APIs. Areas covered include the waveOut, waveIn, mmio and mixer APIs

Ever since studying Audio Signal Processing in college, I've always been interested in computer based audio. These classes are the results of my investigations into base Win32 support for this area.




The classes which constitute CMMSystem are:

CMMIOFile: This class implements a very simple wrapper for the "mmio..." functions. These functions provide for reading and writing of RIFF files, which the common .wav file is one instance of. Like all the classes in CMMSystem it is exception based and will throw a "CMMIOException*" or ""CMMIOException&" exception when any errors occur. For an example on how easy it is to use this class, check out the code for the PlayWav and RecordWav sample projects included in the download.


CWaveOut: This implements a wrapper for the "waveOut.." functions. This was the first class developed in CMMSystem and was based on the great tutorial on audio input processing from David Overton at If you are new to audio processing on Windows, then I'd recommend you check out this very good introduction. The class internally looks after all the details of buffer management and provides a very simple Write method to send audio data to it. Again any errors which occur in the class are reported as "CWaveOutException*" / "CWaveOutException&" exceptions.


CWaveIn: This is the corollary class to CWaveOut and provides support for recording audio data. Again the details of buffer management is handled by the class and a simple Read method is provided to obtain the recorded audio data. Any errors will cause a "CWaveInException*"  / "CWaveInException&" exception to be thrown.


CMixer: The final class in CMMSystem, CMixer provides a thin veneer over the very complicated area of the mixer APIs. I do not claim to be any expert on this particular area and the wrapping provided is very thin. Again any errors which occur internally will cause aa "CMixerException*" / "CMixerException&" to be thrown.





V1.05 (1 January 2017)

V1.04 (12 March 2016)

V1.03 (24 January 2009)

V1.02 (19 March 2008)

V1.01 (26 June 2006)

V1.0 (2 August 2005)