Proposal For Separate Track Lengths On MPC4000

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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!

  7. 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.

  8. 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.

  9. 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%.

    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.

  10. 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