Most bass lines are single notes, and because bassists lift fingers, mute strings, and pick, there's going to be a space between notes. Go through your MIDI sequence note by note and make sure that no note extends over another note's attack (Fig. 1). If two notes play together, you'll hear a momentary note collision that doesn't sound like a real bass. I'll even increase the gap between notes slightly if the notes are far apart.
Great bassists are known for their touch — the ability to play notes with consistent timing and dynamics. It can sometimes be harder to play keyboard notes consistently than bass strings, which brings us to MIDI velocity compression.
Audio compression can give more consistent levels, but it doesn't give a more consistent touch; that has to happen at the source. Some recording software programs have either MIDI FX or editing commands to compress data by raising low-level notes and/or reducing high-level notes (Fig. 2). But if your program doesn't have velocity compression, there's an easy solution: add a constant to all velocity values for "MIDI limiting."
For example, suppose the bass part's softest note velocity is 70, and the highest is 110 — a difference of 40. Add 35 to all values, and now your softest velocity is 70+35=105, and your highest is 110+35=145, but velocity can't go higher than 127 — so you have instant "MIDI limiting." Now your highest-velocity note is 127, and there's only a difference of 22 between the highest and lowest notes. If you want to go back to making sure the highest-level note is 110, then subtract 17 from all values. Your highest-level note is now at 110, but the lowest-level note is 88 — still a difference of 22 instead of 40.
This doesn't necessarily preclude adding audio compression, but you'll probably need to add less of it, and the sound will be more natural.
It means you can probably modulate synth parameters with velocity. When creating sampled bass instruments, rather than go through the hassle of multi-sampling different velocities, I sample each individual note plucked strongly and then tie sample start time, level, and filter cutoff to note velocity to create the dynamics. Although the sound may arguably not be as realistic as something with four billion round-robin samples, I find this approach to be more expressive overall because any synth module changes tied to dynamics are continuous.
Slides are an important bass technique — not just slides up or down a string, but over a semitone or more when transitioning between notes. For example, when going from A to C, you can extend the A MIDI note and use pitch bend to slide it up to C (remember to add a pitch bend of 0 after the note ends). Also, all my sampled bass instruments have sampled down and up/down slides for each string. Throw those in from time to time, and people swear it's a real bass. Unless you're emulating a fretless bass, you want a stepped, not continuous, slide to emulate sliding over frets, but you don't want to re-trigger the note at each step. There are several ways to do this.
Then again, you might want to emulate a fretless bass and have continuous slides.
For precise slides, Figure 4 shows the amount of pitch-bend change per semitone when using a pitch-bend range of +/-12 semitones (recommended for bass to make these kinds of slides possible). For example, if an octave is a pitch-bend value of 8191 and you want to start a slide three semitones above the note where you want to land, start at a pitch-bend value of +2048 and end with a pitch-bend value of 0. If you want to step the part (this assumes you can turn off pitch-bend smoothing or enter precise values in an Event List), add equally spaced events at +1366, +683, and just before the final note, 0.
Dubstep people have figured this out — they eschew vibrato for tremolo or "filtrato." With bass, I use the mod wheel for what I feel are more useful effects:
Because you'll likely be playing single notes for bass line, your other hand will be free to work the mod wheel and increase expressiveness even further — and that's a good thing.