Having worked with Yamaha sequencers for many years now (QY700 and RS7000), I've come to appreciate an important feature of their architecture: each MIDI track can be given its own length, and seamlessly loops around its own length.
The result of this is that each track can be seen as a (polyphonic) MIDI looper, where a 4 bar loop can play a beat, a 12 bar loop plays a melody, and for an freaky touch, you can add a 17 bar loop that strums a guitar chord somewhere in that track. All of this in the same sequence. A loop will not wait for the other loops, it seamlessly restarts without waiting for the sequence to reach its end. All in all a very, very powerful feature with endless possibilities. I'm using it all the time.
I'm proposing a simple modification here to the interface and structure of the MPC4000 in order to get separate track lengths implemented at relatively low costs. This is not an attempt to get the Yamaha data structure implemented in the 4K, which would be nearly impossible due to very different design. The goal of this piece is to warm the interest of current 4K users for the separate track length feature, and to give the developers an idea of how this could work. Being a software designer of embedded audio applications myself, I think the suggested modifications could work.
Enough intro now. Here are the proposed rules for dealing with separate tracks lengths on the MPC4000:
The current user
interface will not change.
The machine will maintain it's strongest point: a clear, open interface
with a simple and logical structure of sequences and tracks. Users that
don't use separate track lengths will not notice that the
option is available.
A track can never
be longer than the sequence that holds it.
This is an important restriction for both users and designers,
and prevents the designers from having to add a new data structure. A
sequence will always be able to store all the tracks.
The MIDI editors will not reflect the track's current
length.
This is another important restriction introduced to get the separate
track length feature implemented and still keep the designers happy. It
means that when you're editing a track that is 4 bars long, sitting in
an 8 bar sequence, the editor will give you the full 8 bars, without
limiting you in any way beyond bar 4. So if you change something in bar
6 on that track, you won't hear it because the track will bounce back
to its beginning after the 4th bar. The users will have to do their own
thinking here.
Maybe in a later version of the OS, the MIDI editors could become aware
of the current track's actual length, and give a visual clue, or even
restrict the editable area. But this would be way too much work (and
introduce bugs) in an initial release. Better keep what's working now.
A track length
field will be added to the track block.
The fun part. The track block on the Main page will show a new 'Bars'
field. This is where you specify this specific track's length in bars.
The default value for this field is 'SEQ', indicating that the track
will follow the length of the sequence at all times. This is the way it
has always been.
The Bars field value can be changed in the normal way to specify the
track length as a number of bars. The value can never exceed the length
of the sequence.
An example. Suppose you specify a track
length of 4 bars, while the sequence is 8 bars. If the length of the
sequence is changed to e.g. 16 bars at some later time, the track will
stay at 4 bars. However, if the sequence length is changed to 2 bars,
our track's length is forced to 2 bars, as it can never be longer than
the sequence that holds it.
In a future OS update, pressing the Window button while the cursor in
on the new Bars field, a Track Repeat dialog could be shown. In this
dialog you can repeat the bars of a track a number of times, within the
limits of the sequence.
For example, suppose the track is 4 bars long, and the sequence is 16
bars long. The track can be repeated up to 3 times. If the user would
choose to repeat it 1 time and press DO IT, a copy of the first 4 bars
would be placed in the next 4 bars, and the track's Bars field value
would automatically be set to 8. The user can now do some edits in
these extra 4 bars and have more variation in the loop.
The track length
is stored per track and per sequence.
This simply means that the length of track 1 in sequence #1 can be
different from the length of track 1 in sequence #2. So you get a
completely new picture when you start a new sequence.
Tracks loop
seamlessly around their own length while the sequence plays.
Let's start with an example right away.
Suppose you have a sequence with 3 tracks named A, B and C. Track A is
4 bars long, track B is 5 bars long, and track C is 3 bars long. The
sequence is 8 bars long. These tracks will loop around their own length
while their sequence is playing, as shown by the ASCII picture below:
1
9 17
|
|
|
|A A A A|A A A A|A A
A A|A A A A|A A A A|...
|B B B B B|B B B B B|B B B B B|B B B B B|...
|C C C|C C C|C C C|C C C|C C C|C
C C|C C C|...
As can be seen from the pic, tracks B and C are not reset to their
beginning at bar 9, where the sequence repeats for the first time. They
simply loop around their own length, unaffected
by the sequence length. This is how each track becomes a standalone
looper, and exactly this is the power of the separate track length
feature!
Loops are cut off when a new sequence is started.
This is often the first question asked by people that are confronted
with the concept introduced in the previous section: what happens when
you change to another sequence? The answer
is very simple: the tracks are cut off at their current position in the
track, and restart from the beginning in the next sequence.
For example, using the example introduced in the previous section, when
jumping to another sequence at bar 17, you get the following result:
1
9
17
|
|
| new sequence
|A A A A|A A A A|A A
A A|A A A A|
|B B B B B|B B B B B|B B B B B|B
|C C C|C C C|C C C|C C C|C C C|C
Track A cycled four full loops, but both track B and C are cut off
after 1 bar in their 4th and 6th loop,
respectively. Note that the tracks still loop around their own length
while their sequence plays, even if the sequence loops. The Yamaha
sequencers behave the same, btw, and it works out just fine in practice.
This rule also applies for chaining
sequences in Song mode, and for building a new sequence from a song. In
all of these situations, the sequence length is in charge, and the
tracks are simply 'sliced' at places where a
sequence change occurs.
Of course, you don't have to change sequences. With so many
tracks available, you could create a whole song simply by
muting/unmuting looping tracks.
Notes are forcedly ended at the end
of the track.
Suppose we have a 4 bar track living in an 8 bar sequence. Suppose this
track starts a long note in bar 3 that ends in bar 7. The track will
loop back right after bar 4. What to do with that note? It is stopped
at the track's end position, which is the end of bar 4 in our example.
So even if the editor suggests the note goes on much longer, the
current track length dictates that the note will be ended at an earlier
place.
If the 4K OS allows, it could be possible (and possibly even at low
costs) to have the note complete its full length, even while the track
already looped back to its beginning. That's up to the engineers. And if
this is possible, it would be
a nice optional feature that can be switched on or off for a track.
Of course, any MIDI event in the track that starts after the track's end position is ignored. For
example, a MIDI note that starts at bar 5 will be ignored on our 4 bar
track.
Bonus: separate track playback
speeds.
Now that we have separate track lengths, where each track runs
individually, it's relatively simple to have each track play at
different playback speeds. The idea is to dial in some playback scale
factor for a given track, possibly while the track is playing. The
result is non destructive, the track's MIDI data is not changed.
Possible playback speeds to slow down a track are 125%, 150%, 200%,
300% and 400%. And values to speed up a track are 75%, 66%, 50%, 33%
and 25%. Standard speed is of course 100%.
The amount of fun that can be had from this feature is almost
limitless. Simply copy a track, and change the playback speed on that
track to 200% to make it a 'slomo' version of the original track. Add
some filtering to make it sound darker. For an additional freaky touch,
change the track length of the copy as well.
Bonus:
separate track playback shifts.
For the same reason that individual playback speeds are possible,
individual playback shifts (in time) are now equally possible. A track
can be given a new time shift field, that allows the track to be
shifted backward or forward in time up to one full bar. All
non-destructive again, and in real-time.
These were the most important rules, in my opinion, to get the separate track length feature implemented at relative low costs. Once it is in, the code can be fine-tuned to support it even better (like in the MIDI editors). But even with the mentioned restrictions, I think these modifications would make the MPC4000 sequencer the king of all sequencers, broadening it's applications to a much wider field.
If you have any comments or suggestions, please let me know.
Robert van der Kamp
robnet@wxs.nl