[openbeos-midi] Re: some thoughts on the sequencer design doc...

  • From: cyanh256@xxxxxxxxxxxx
  • To: openbeos-midi@xxxxxxxxxxxxx
  • Date: Tue, 11 Dec 2007 06:46:26 GMT

Hi everyone,
It's been very quiet here lately, so I thought I'd give anyone
who's still watching the MIDI sequencer or MIDI interface
projects an update. There's a couple of questions too...

====

MIDI interface:

* Schematics are complete, on paper. I haven't scanned them
yet because I have no scanner (I'll find a workaround shortly).

* There are no MIDI activity LEDs yet. There are three choices:

- Option 1: A single LED to indicate "activity" (MIDI input or MIDI
output for all ports).
Requires no extra components, easy.

- Option 2: Two LEDs to indicate MIDI in (for all ports), and MIDI
out (for all ports).
Requires no extra components. Slightly more difficult to design.

- Option 3: Two LEDs for each port (16 total), indicating MIDI in
and MIDI out individually.
Requires three extra chips (or 16 transistors and 32 resistors),
and makes writing the driver a lot harder.

Any preference?


====

MIDI sequencer:

* Still working on the core engine, making progress.

* SysEx events can now be recorded to tracks directly.

* A question:
I was thinking of having the ability to send a track to multiple
destinations simultaneously, so several patches can be layered.
This will also affect MIDI thru -- selecting the track and
playing the keyboard will produce the full layered sound.

There are three possible ways to do this:

Option 1: I'm already implementing the notion of "ports", which are
numbered user-assigned aliases for MIDI destinations -- each track
chooses a certain port number.
I could implement layering simply by allowing a port to be assigned
to more than one MIDI destination.

Advantage: This is *very* easy to implement using the MIDI kit.

Disadvantage: Any MIDI data sent to a port goes to two
destinations, but on the same channel. So if you wanted to layer
a patch on synth 1, channel 4, and synth 2, channel 16, you'd be
out of luck.
Also, there would be no way to set invididual track settings
(e.g., time offset, velocity offset, transpose) for each individual
synth.


Option 2: Perhaps take a leaf out of MeV's book, and use
"destinations" for individual parts, rather than entire synthesizers.
Each destination would be assigned to one or more synthesizers,
with a channel number for each.

Advantage: More flexible than option 1. Perhaps having just one
"destination" number is more intuitive than separate port and
channel values? (I'm not convinced).

Disadvantage: There would be a rather large number of
destinations (128 for a typical 8x8 MIDI interface), and the
destination settings would have to be saved along with each
song, rather than global to the sequencer, which might get
confusing when you re-load a song at a later date, and the
hardware has changed.
The destinations would also have to be set up via a separate
window because of screen-space reasons, which could get
very ugly.


Option 3: Allow each track to be sent to multiple ports (perhaps
an unlimited number, or maybe up to 4 or so).

Advantage: This seems to be the more flexible solution.

Disadvantage: Harder to write (though not orders of magnitude).

The main problem though is the GUI -- how can this be
represented? I can imagine something like this (use a fixed font):

===============================================
Track 1        ch08  port4  time00  patch001  |
Flute          --------------------------------
               ch15  port1  time10  patch015  |
               --------------------------------
               ch01  port2  time00  patch127  |
===============================================
Track 2        ch02  port3  time00  patch000  |
Snare                                         |
===============================================
Track 3        ch07  port4  time00  patch002  |
Pad chords     --------------------------------
               ch14  port1  time10  patch014  |
===============================================

The trouble is, the height of each track will then vary depending
on how many output ports it's routed to. This might make the
arrangement view ugly, or difficult to use (or maybe not, if
there's padding above and below the "blobs"?)
Maybe the tracks could always be tall enough to hold 4 ports?
This would use a lot more vertical screen space to display the
same number of tracks (if that's even a problem?)

On the plus side, it's much clearer where each track is routed
-- it's all visible on the main arrangement window, unlike hiding
these settings in some kind of "port configuration" window.
On the other hand, if nobody wants layering features at all,
maybe just relying on option 1 would be good enough.

I'll be reaching this part of the sequencer engine very soon,
so if anyone has any thoughts on this one, now's the only time
to influence how it'll turn out!

- Cyan

Other related posts: