Click here to Skip to main content
13,349,293 members (64,042 online)
Click here to Skip to main content
Add your own
alternative version


83 bookmarked
Posted 30 Mar 2008

Audio Mixer - Console Simulator

, 22 Mar 2010
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. :)


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Software Developer
Argentina Argentina
No Biography provided

You may also be interested in...

Comments and Discussions

QuestionAwesome Project Pin
Joelandersen20-Oct-17 14:48
memberJoelandersen20-Oct-17 14:48 
QuestionMessage Removed Pin
20-Oct-17 14:28
memberMember 1347664920-Oct-17 14:28 
QuestionAudio Mixer Pin
Member 1135247417-Mar-15 1:22
memberMember 1135247417-Mar-15 1:22 
QuestionExcellent work Pin
Syam Kumar Sivankutty26-Aug-13 22:57
memberSyam Kumar Sivankutty26-Aug-13 22:57 
Questionexcelent work Pin
_aleksei24-May-12 9:34
member_aleksei24-May-12 9:34 
QuestionMy vote of 5 Pin
cpwhoosh9-May-12 8:19
membercpwhoosh9-May-12 8:19 
QuestionExcellent - my vote of 5 - ignore the people giving it bad votes - very nice Pin
Splodgi19-Nov-11 5:26
memberSplodgi19-Nov-11 5:26 
easy to understand. All the code is there (no idea what that vote of 1 joker is on about) About time someone wrote something like this. Thanks
GeneralMy vote of 4 Pin
Camlovespeakers17-Jun-11 12:50
memberCamlovespeakers17-Jun-11 12:50 
Generalduplicate audio channel Pin
sr_dusad13-May-10 20:08
membersr_dusad13-May-10 20:08 
GeneralMy vote of 1 Pin
AlexB4728-Dec-09 21:55
memberAlexB4728-Dec-09 21:55 
GeneralMy vote of 1 Pin
yojiq28-Dec-09 21:40
memberyojiq28-Dec-09 21:40 
GeneralMy vote of 1 Pin
Kerkia28-Dec-09 9:59
memberKerkia28-Dec-09 9:59 
GeneralArticle feedback [modified] Pin
jeffb4223-Dec-09 9:43
memberjeffb4223-Dec-09 9:43 
GeneralRe: Article feedback Pin
Jonathan C Dickinson28-Dec-09 9:50
memberJonathan C Dickinson28-Dec-09 9:50 
GeneralRe: Article feedback Pin
jeffb4228-Dec-09 14:02
memberjeffb4228-Dec-09 14:02 
GeneralMy vote of 1 Pin
ehenry723-Dec-09 5:51
memberehenry723-Dec-09 5:51 
GeneralMy vote of 1 Pin
Michael E. Jones23-Dec-09 1:26
memberMichael E. Jones23-Dec-09 1:26 
GeneralNice work Amigo [modified] Pin
Omar Amin Ibrahim22-Dec-09 20:23
memberOmar Amin Ibrahim22-Dec-09 20:23 
GeneralMy vote of 1 Pin
TV Mogul22-Dec-09 11:28
memberTV Mogul22-Dec-09 11:28 
GeneralMy vote of 1 Pin
Johann Krenn22-Dec-09 8:11
memberJohann Krenn22-Dec-09 8:11 
GeneralMy vote of 2 Pin
pita200922-Dec-09 8:08
memberpita200922-Dec-09 8:08 
Generalyou are crazy!! Pin
reborn_zhang22-Dec-09 6:17
memberreborn_zhang22-Dec-09 6:17 
GeneralMy vote of 1 Pin
leeloo99921-Dec-09 21:27
memberleeloo99921-Dec-09 21:27 
GeneralRe: My vote of 1 Pin
Rodrigo Rodriguez22-Dec-09 2:27
memberRodrigo Rodriguez22-Dec-09 2:27 
GeneralRe: My vote of 1 Pin
TV Mogul23-Dec-09 5:27
memberTV Mogul23-Dec-09 5:27 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

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