iiwusynth-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[iiwusynth-devel] MIDI router proposal


From: M. Nentwig
Subject: [iiwusynth-devel] MIDI router proposal
Date: Sun, 15 Dec 2002 14:25:57 +0200

Hei,

I'd like to propose a new feature, MIDI routing.
Most important, the feature is completely transparent in 'default' mode:
When a new synth is started, the MIDI router does not do anything. The
user won't even notice that it exists. If a user doesn't need the
router, he doesn't have to know about it.

The router makes sense, when Fluidsynth is used as 'a virtual 19'' rack'
- MIDI input from a keyboard on one side, audio output to the speakers
on the other side. It's probably not too useful, when using the synth as
a library.
The scheme is similar to the MIDI router in any multitimbral synth, just
much more general.

The MIDI router is one more processing layer directly behind the MIDI
input. It processes incoming MIDI events and generates control events
for the synth.
The user can specify 'windows', in which MIDI data is routed. Here is an
example (in human-readable form, those are no commands).
It splits the keyboard and routes CC 7 (vol) to one part, and CC 11
(expr) to the other.

'route MIDI note events from MIDI-in channel 1 to synth channel 1, when
60 <= key <= 72'
'route MIDI note events from MIDI-in channel 1 to synth channel 2, when
73 <= key <= 127'
'route MIDI CC events from MIDI-in channel 1 to synth channel 1, when  7
<= CC <= 7' ('CC=7')
'route MIDI CC events from MIDI-in channel 1 to synth channel 2, when 11
<= CC =< 11'
'route MIDI CC events from MIDI-in channel 1 to synth channel 1, when 7
<= CC =< 7'
'route MIDI CC events from MIDI-in channel 1 to synth channel 2, when 11
<= CC <=11'
'route MIDI aftertouch events from MIDI-in channel 1 to synth channel 1'

Another way to use this feature is to implement OMNI mode:  incoming
MIDI input on all input channels is treated equally and routed to one
particular synth channel.
With the MIDI router it will also be possible to set up arbitrary
layered sounds and process the parts with separate effects.

About implementation: I thought to implement two separate filtering
passes:
The first pass is used to ignore incoming events. So to get rid of the
sustain pedal, we just tell the router to ignore all events with CC =
64.
The second pass does the actual routing. Each 'window' (one of the
'route ...' lines from above) checks against a range for channel,
param1, param2, modifies / offsets channel, param1, param2 and sends the
event to the synth.

Long-term planning:
- Several MIDI inputs (input 2: MIDI channel 17..32 etc)
- MIDI output (similar routing commands, only to a MIDI interface
instead of the synth).

What do you think?

Cheers

Markus




reply via email to

[Prev in Thread] Current Thread [Next in Thread]