The first thing you need for doing something like this is to understand what a MIDI file is and how it works. Why? All of the technical work involved in this requires MIDI technology. The wav/Mp3 part is just the result that the listener hears. The actual song is composed and controlled in the MIDI format, with the audio mixing handled in the .wav format.
MIDI, standing for "Musical Instrument Digital Interface" is a file that stores a lot of information useful for producing music on a computer. Here are a few things that are important:
A MIDI file does NOT contain ANY sound at all! It is simply a set of instructions for telling something else (such as a sound card, keyboard, other program, etc.) what sound to play, what note, when, how loud, etc. This is why MIDI files are no bigger than text files: they basically ARE text files!
A MIDI file is normally looked at one of two ways in a MIDI making program:
1) Looking like normal sheet music, such as in a program like
Noteworthy Composer2) In what's known as a "Piano Roll" view, such as
FL Studio.
the first way is preferred by most people who can read it, however it comes with a major flaw: It's MUCH, MUCH harder to make a MIDI file sound good in the sheet music view because it lacks the precise control over timing and dynamics (volume, expression, etc) that you can get in Piano Roll-based programs. For this reason, I use FL Studio for all of my work nowadays.
MIDI works on "channels", layers, basically. A channel in MIDI is like a "layer" in photoshop. In Photoshop, a layer can have an opacity. In MIDI, a channel can have a volume that changes over time. A Channel typically has one instrument assigned to it. In the case of simply writing General .mid files, you can change the instrument on a channel as the music progresses BUT the way I make my mp3s, that's not possible. The reason is explained later.
A MIDI file contains two different kinds of data:
1) Event-based, Per-Note data, such as Note A5 ON, velocity 100; Note C6 OFF, aftertouch 10; etc.
Don't worry about terms like "velocity" and "aftertouch" yet.

Basically, just understand that every note has some parameters attached to it and will trigger every time the playback of the MIDI reaches that note event.
2) Continuous Controllers
Every MIDI file has an "Internal clock", which can normally is set by the program creating the MIDI file or can be chosen manually by the person using the program. This internal clock sets how many "ticks" per second contained within the MIDI file. A continuous controller can only have one value per tick, meaning the more ticks per second the file has, the smoother the continuous controllers can change. Think of this like the resolution of the MIDI.
A perfect example of a Continuous Controller (CC for short) is "volume". Every Channel has its own "Volume" at every tick. This value is completely seperate from the "per-note" data and runs in parallel with it. There are far more CCs available in MIDI other than just Volume but it was a nice, simple example.
Here's a picture of a Volume CC in FL Studio, showing exactly how it works:

The first thing you will notice about a MIDI file from the internet, for example, is how low-quality is sounds compared to an average .mp3. This is because, like we said before, the MIDI file contains NO sound data. In the case of a normal MIDI file played on the average person's computer, your Operating System is set up to send MIDI playback data from your media player to your sound card.
If you're in Windows XP or a similar OS, you have a setup something like this, probably with the selection that I highlighted
In Red in this picture:

Let's pretend your setting is "Microsoft GS Wavetable SW Synth", like I highlighted.
What this means is
"Your media player will send all MIDI data to this...thingy, either a hardware or software device, called "Microsoft GS Wavetable SW Synth". This...thingy will be used to generate the sounds and send the sounds to whatever is connected to its output, usually your speakers."
What is "Microsoft GS Wavetable SW Synth"? It is a software synthesizer (a device, either hardware or software, in this case software, that stores or produces sounds). It contains all of the possible sounds that a MIDI file can possibly tell it to play. It just plays back whatever sounds the MIDI tells it to and sends that sound to your speakers. That's all it is. It's just a piece of software that is full of sounds, made my Microsoft. Every Windows computer has this synthesizer. What does that name mean in detail?
GS: General Standard MIDI. This basically means that this device is designed and capable of playing generic, ol' MIDI files that you find all over the place.
A "Wavetable" is basically that: a collection of .wav files that trigger and play according to whatever the MIDI wants.
SW Synth = software synthesizer.
GS is another name for GM: General MIDI. General MIDI is basically a standard that all typical MIDI files share. For example, all General MIDI-capable devices:
Support 128 standard instruments. For example, "Acoustic Grand Piano" is always MIDI instrument 001 in General MIDI.
"Gunshot" is always MIDI instrument 127 in General MIDI. That never changes in General MIDI. Every GM instrument has a number assigned to it. We can expand the instrument collection by moving away from GM, but then MIDI files can no longer be used exclusively to produce and distribute the music because those files assume you're working with GM instruments. In order to produce sounds beyond that of GM on a scope beyond your own computer, you need to convert the audio to a digital audio format, such as .wav or .mp3.
In General MIDI, MIDI channel 10 is ALWAYS, ALWAYS dedicated to percussion sounds. This will mess you up if you don't read it, which is why I'm bolding it! Each note on this channel, as long as you're using General MIDI, not a plugin synth or non-GM synth, is assigned to a unique percussion/drum sound. This is part of the MIDI standard. Make a new file, set the channel to 10 and you'll see what I mean.

In the case of simply writing General .mid files, you can change the instrument on a channel as the music progresses BUT the way I make my mp3s, that's not possible. The reason is explained later.
Why is this?
General MIDI rules go out the window for me when I'm making these Mp3s. The only way you can change the instrument on a channel is by writing in the change to the GM Instrument # value. Problem: I don't work with GM instruments so this value does absolutely nothing for me.

This is because the synths I'm using to generate the sounds are not GM-capable. They aren't audio devices like my sound card's synth or the windows synth. They "plug in" to FL Studio and let me direct the MIDI data directly to it without going through Windows at all. The synth directly loaded in FL Studio generates the sound and it has nothing to do with GM, it's just a massive library of instrument sounds that respond to MIDI events. Nothing in these synths is designed to respond to the GM instrument value, like they are in GM-capable synths like the Microsoft GS Wavetable.
In my case, the MIDI talks to my synth based on the MIDI channel. It's impossible to change the MIDI channel midway through the music, therefore It's impossible to change which instrument that channel is "talking to". I can, however, have one channel "trigger" multiple instruments at the same time. In my synth, I can load up, say, a french horn and a clarinet, both on MIDI channel 1 on Port 1. If I set a MIDI track (a MIDI instrument in the music), to Channel 1, port 1, when a note on that track is played, you hear both a clarinet and a french horn.
Now, if you have an upgraded sound card that has a hardware synth on it, such as s Soundblaster Live, Audigy or X-Fi, you'll see other options here. In my screenshot, you'll see that the
SB X-Fi Synth A
is my default. on my computer, this sends the MIDI data, by default, to the hardware synth on my sound card, NOT to the Windows synth. I prefer this because the hardware synth is customizable: I can load even hundreds of MB worth of .wav files into its memory using the programs that came with the sound card and use those .wavs to play MIDI files instead of the sound that comes with Windows.
Why am I talking about this? Because this is the same idea involved when I made these MP3s above.
MIDI can deal with and keep organized, up to 16 different instruments per port. A "port"? A port is basically, a software audio device. A computer is typically able to deal with up to 255 different ports for MIDI. It's important to know though, that a MIDI file is assigned to only one port, meaning that you can only deal with up to 16 instruments at a time when working exclusively in General MIDI.
What does this actually look like? I know this is pretty technical. I'll try to show this as simply as I can:
Each "staff" or "set of notes and other information for an instrument" takes up one "channel".

Notice that there are multiple devices on that list on this screenshot:

Each one of those devices is 1 Port, meaning each one of those devices can handle up to 16 unique channels of MIDI data, all at the same time.
Notice something else, too:
My sound card has:
SB X-Fi Synth A
SB X-Fi Synth B
My sound card actually has two ports dedicated to MIDI, each of which can be assigned to different sounds, etc. This means I can effectively play up to 32 different MIDI instruments at the same time on my sound card.
Problem: For producing a full orchestra, I'm afraid this still isnt' enough, plus I can't make a 32-channel MIDI file, PLUS, I can't rely on everyone having this X-Fi sound card to be able to play it...PLUS the sounds I can load onto my sound card still aren't that great.

If you look at this screenshot: This is my MIDI of Adventuring, by the way.

You'll notice I used Channel 9 twice. This is because I wanted to seperate the two staves for the simplicity of writing the music. They're both pianos, one's just the right hand and one's the left hand. I could get away with using the same channel for both staves because they both have the same instrument assigned to them and they both share the same volume and other CC values. I don't need them so seperated that they need to be on seperate channels. They're seperate for one reason: so it's easier to read and write.
That being said, also notice that I used all 16 MIDI channels in this file. If we need one more instrument to have a seperate CC volume, it's impossible. We hit the limitation of a General MIDI file. The only way we can expand on this is to add more Ports.
OKAY------------------------------
Okay I'm done babbling on about MIDI itself now. 
Let's sum up what we know so far:
MIDI is simply a way for a computer to talk to a sound generator: a synthesizer. The synthesizer generates the sound. The MIDI just tells the synth where to look inside its database for the sound, when to play the sound, what note, etc.
MIDI supports up to 16 channels per port. Typically, one can control up to 255 ports from one piece of music composing software, giving you control of 4080 different instruments at the same time.

Think of a channel like a "Layer" in the music. A channel has its unique properties that you set (such as volume, GM instrument number, etc.) Like Photoshop, can have a red colour on more than one layer, you can have the same instrument on more than one channel in MIDI, if you need to. There are times when this is useful.
In General MIDI, MIDI channel 10 is ALWAYS, ALWAYS dedicated to percussion sounds. Each note on this channel, as long as you're using General MIDI, not a plugin synth or non-GM synth, is assigned to a unique percussion/drum sound. This is part of the General MIDI (GM) standard. Make a new file, set the channel to 10 and you'll see what I mean.
Okay so what am I actually doing? 
It depends if you just want to make a General MIDI (.mid) file or an .mp3 like these. It is very possible to make a General MIDI file completely for free, using software like
Anvil StudioIn order to make mp3s like these, you need two things:
1) A "Host Program", also called a "Digital Audio Workstation" (DAW) that supports Virtual Studio Technology (VST) plugins.
2) A VST Synth to generate your sounds.
Whoa okay, I just threw a lot of information at you, I'll slow down.

DAW: A program like
FL Studio. A DAW is the program that you actually write the MIDI notes in. The music is written by creating MIDI "tracks", one at a time. A track is basically one layer of the music. Usually, each track has a unique channel unless you have reason to do otherwise.
4 MIDI tracks in a new project in FL Studio:
--------------------------------------------
For writing a General MIDI (.mid) file:
-------------------------------------------- the process is quite simple:
1) Listen to the first section, however large or small (smaller is easier to remember), of the song you want to make as a MIDI.
Focus on One Single instrument that's playing in this section of the music. I recommend starting with listening to the melody, if there is one, since this is usually the easiest part to hear and will help you form a basis for the rest of the parts.
EXCEPTION: If the melody has a tricky melody and there are percussion instruments playing, start by writing in the percussion parts as accurately as possible
2) Create a MIDI track and assign it to MIDI channel 1. Set the GM instrument of that track to one that most closely matches that of the instrument you're listening to.
3) try your best to accurately reproduce the notes, rhythm and expression as accurately and musically as possible, of the instrument you're listening to, in this MIDI track. Listen to the original, one note at a time, get a program to slow down the music if it helps.
4) Once you're reasonably happy, create another MIDI track, assign it to a new channel and do the same for another instrument in this section of the music.
5) Repeat until every instrument in this section of the music is written into your MIDI. Proceed to the next section of the song.
6) Repeat until the song is complete.
Consider details like expression, volume and being musical when writing the MIDI. Details make a big difference in the overall quality, try to make it sound as musical as possible.
There will be times when laying two or more instruments on the same notes will be needed to get a certain effect. There will also be times when an effect is simply impossible to produce in General MIDI. You'll have to simplify it, fake it or just skip it in these cases.
When choosing instruments for the vocal parts, pick something musical and blends well with the rest of the music. try not to pick instruments that are already being used elsewhere in the music unless the vocal part is in a completely different musical range (way higher or lower notes) than the other range where this instrument is used.
Other than that, it depends entire on the software you choose to use, the exact process of using it to make a General MIDI file. This is all there is to it, really. A lot of patience and the ability to tell if a note is the same as the original or not can be developed from practicing doing this. The result is very rewarding if done well.
In order to improve the quality of a MIDI, controlling the expression to make it more musical is very important.

There are a few ways do to this:
1) Velocity. Every MIDI note has a "Velocity" parameter associated with it, on a scale from 0 to 127. Velocity is basically, the "Relative volume of this particular note". This is seperate from the channel's Volume. Think of it like this: The channel's Volume is like turning the Volume knob on your stereo. The note's Velocity value is how hard a trumpet play is blowing into their trumpet, how hard the piano player is bashing on the piano, etc.

This value is especially important when working with higher-quality synthesizers because different velocities will trigger different sounds to play (such as a recording of a trumpet player playing loudly on a high velocity, or softly on a low velocity). This is important to keeping the music sounding natural.
2) Volume. The only way to have the volume of a note that's already playing change over time is to use the Volume controller for that MIDI channel. Unless you have a good reason to not use it, it's generally a very good idea to use it. B)
3) Shifting the location of notes slightly. This is where the limitations of the Sheet Music view are most obvious. Sometimes it's important to the expression or realism of a MIDI to have some notes start a few milliseconds before another note, or something similar. The Piano Roll applications give you this control whereas it's usually extremely clunky or nonexistant (in the case of Noteworthy Composer) in many sheet music programs.
---------------------------------
Producing Mp3s like the ones in my link, above, instead of just .mid files---------------------------------If you want to know how I actually made these mp3s, here's where you'll want to read.

I used FL Studio as my DAW (Digital Audio Workstation) software. This process is a LOT more complex than simply writing .mid files. the basic idea is the same: using MIDI tracks to produce the music, using all the same rules of MIDI.
the difference is, I can't just select the MIDI track, say "Set this track to "Piano" instrument" and start plunking in piano notes. The way this works is using what are called VST (Virtual Studio Technology) plugins. These plugins contain within them, commercial-quality (at commercial prices, mind you! If you don't have a budget, this isn't going to happen) instrument sounds.
What I do is, instead of assigning the MIDI track to my sound card, I say, right inside FL Studio, "Okay, FL, I want you to send this MIDI track's data over to this synth, sitting inside a mixer, where I can control the exact quality of its sounds. The mixer will then send the sound to my speakers." More confusing already, huh?

How about a picture?

I won't put it in the post because it's huge.
http://i63.photobucket.com/albums/h141/act...signal-path.jpgThe simple explaination:
MIDI goes in from the Piano MIDI track into the VST Synth.
The synth generates the Piano sound and sends the sound to Input 1 on the mixer, where I can do whatever I want to that sound.
The mixer then sends the sound from All of the inputs (just Input 1 for now, since that's all we're using) to the Master input on the mixer, where I can apply even more effects and sound control.
The Output of the Master is what I hear at my speakers and what gets saved to an mp3, wav, etc. when I save the file.
Where it says "Play" on the top right, in Input 1 of the mixer? That's where my VST synth is actually loaded. The synth is called "Play", which is why it says "Play" there.
*Getting really good instrument sounds*How do some of those instruments sound so realistic? The plugins are very good but it's hwo you use them that makes them really awesome!

Most of the instruments in my Play plugin have multiple playing styles available, called "Articulations". This is a Huuuuge improvement over General MIDI. In GM, you will see an intrument called "Trumpet" and it will have one way of being played, no matter what kind of note, long or short, loud or soft, you're playing in the MIDI.
The advantage of breaking free of General MIDI is that you can do something like this:
Trumpet, sustained note with vibrato
Trumpet, sustained note with no vibrato
Trumpet, sustained for 3 seconds with gradual increase in volume
Trumpet, sustained for 1 second with gradual increase in volume
Trumpet, short, staccato note, soft
Trumpet, short, staccato note, medium attack
Trumpet, short, staccato note, loud
Trumpet, sustained, loud attack followed by soft sustain
4-trumpet section, sustained note with vibrato
4-trumpet section, sustained with mute effect
etc. etc. The amount of freedom you gain is absolutely outstanding.
and this is what my VST synth does for me, as you can see in the screenshot:

You see all the brass instruments in the 2nd column, broken down into playing styles as you go to the right. The far-right column is where I can select an exact articulation (playing style) to assign to this MIDI channel.
By layering multiple articulations effectively, you gain an incredible amount of control over the realism and quality of the music. Combine this with the procedure of reproducing music by ear and you get these MP3s in my first post.
