Click here to Skip to main content
Click here to Skip to main content

Audio Mixer - Console Simulator

, 22 Mar 2010 CPOL
Rate this:
Please Sign up or sign in to vote.
C# .NET - MCI audio mixer with multiple tracks and buses


This is a nice Audio Mixer I made in C# .NET - VS8. It uses MCI component to play media files, it may work with video files too.

I would like to add in the future with your help:

  • equalization in each track and master
  • recording button in each bus and master
  • mic and line-in selection (in each track at input-selector sector)
  • spectrum board or leds indicating volume and activity

It took me long to made this, so please comment and enjoy it!

I used some stuff from such as Knob-Control, MCI classes, etc.

Credits go to the respective owners.

I took the time to explain a bit of how this works and the project idea. In time, I'll be adding detailed information.

First of all, this is an "Audio Mixer Console Simulator", what does an audio mixer do? It mixes sounds. These kind of consoles are used in recording studios and live performances for mixing audio, for example when bands do live presentations the mixer is what unifies the bass, guitar, drums, vocals and all other instruments, so signals can go out by the same pair of speakers with the correct volume level, panning, equalization, etc..

This project is a Console Simulation, so does not work like a real mixer console. It only mixes media files such as mp3, wav, ogg, etc.

In this case, I made a 10x4 console, that means 10tracks x 4buses (we can mix up-to 10 media files simultaneously, with 4 different output settings.)

Let's go to the project.

frmMain.PNG - Click to enlarge image

This is the main window, there are 10 tracks, and at the right we have a master volume control and Bus-Output selection where we can choose which signal we listen to.



Here is where we choose the 10 media files. We can see how this part of the console would look in a real mixer (behind the form title), where you plug-in the cable coming from the mics/instruments; here we don't have cables, we have files.

Here, I'll be explaining each part of a Track at the main panel.


  1. track caption: It's the title of the track. By double-clicking, you can edit it and put things like 'bass' so you know what signal that track manipulates.
  2. input selection: Where you select the number of input signal from the frmInputs


  3. pre-amplification volume level: It's the level of the incoming signal before it is manipulated (in this case, we don't manipulate it but in the future we can add an equalizer and some other stuff into the tracks.)
  4. buses-exit: Here you adjust the level of the signal that you want to send to each bus. For example, if you leave the green track with 0, when you change in the Bus-Output selection (at the right part of the main form) to Aux2, you won't listen to the track.
  5. pan level: It's the signal position in the stereo speakers. 0 means that the sound goes to both speakers by the same level. -100 means that all the signal will go into the left speaker, and +100 ito the rightone. So if we put +50, we will be having more signal in the right speaker than in the leftone.
  6. solo switch: This button activates the solo-mode. This means that all other tracks without this button pressed will be muted.
  7. mute switch: Mutes the track.
  8. track main volume level: it works like the pre-amplification volume level, with the difference of changing the signal volume after being manipulated -by equalizer and other stuff.

Ok, hope you understand better the idea and how the console works. I will be explaining how I use the MCI, but basically this is the idea:

There are MCI controls into each track and each Input-Player-Control (the 10 controls from the frmInputs). When you click OK button from frmInputs, each track synchronizes itself with the position of the Input-Player-Controls. That was the way I do manipulate with ease the signals and synchronize them as if it was into a live mode.

Here I paste the simple code that makes this feeling of having the signals accessible to all the tracks as if they were connected with a cable.

foreach (Track.Track _ArrayTracks in _Tracks)
    _ArrayTracks.Paths = loFrmInputs.Paths;
    _ArrayTracks.PlayState = loFrmInputs.PlayState;
    _ArrayTracks.Position = loFrmInputs.Position;

This goes for each track and synchronizes the filename, playstate and position of the file.

_ArrayTracks is an object of the type Track and _Tracks is an arraylist that has all the tracks inside.

Ok, that's all for the moment. I love making interesting audio projects, so I decided to share this with you. I really hope you enjoy it and make better ones!

Thanks! Comment, share and credit please. Smile | :)




About the Author

Software Developer
Argentina Argentina
No Biography provided
Follow on   Twitter

Comments and Discussions

GeneralMy vote of 1 PinmemberAlexB4728-Dec-09 21:55 



| Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.141223.1 | Last Updated 22 Mar 2010
Article Copyright 2008 by davefrassoni
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid