Reactive-balsa

From HaskellWiki
Revision as of 16:42, 30 April 2012 by Lemming (talk | contribs) (initial version)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Reactive-balsa is a live MIDI event processor based on the Reactive-banana framework and ALSA. (Thus it is currently bound to Linux.) It is the successor of the package streamed, that uses a kind of arrow types.

The MIDI event processor can be used for accompaniment, gags, games and more. It is usually inserted between a MIDI input device such as a USB piano keyboard and a MIDI controlled synthesizer, say an internal software synthesizer or an external hardware synthesizer.

Some of the included examples:

  • arpeggiator: play a pattern according to pressed keys
  • generate a beat with controllable tempo
  • instrument cycling: every note is played with a different instrument
  • LFO-controlled change of MIDI controllers
  • simulate playing chords on a guitar
  • interval trainer
  • keyboard with mirrord order of keys: perfect support for lefties :-)

The reactive programming paradigma has precisely the right abstractions that we need for MIDI event processing:

  • Events are discrete MIDI events for key press and release, knob turning and fader move, instrument change,
  • Behaviours are things like current position of a knob or fader or the set of currently pressed keys.

This becomes especially useful for the arpeggiator. There are several ways to obtain a set of keys:

  • The actual set of pressed keys.
  • Latched keys: Every key press toggles between press and release
  • Group latched keys: A chord is hold until a new chord is played.
  • Serial latch: A queue of fixed length holds pressed keys. Newly pressed keys release old keys.

And there are many ways to generate MIDI events from a set of keys:

  • cycle them up or down, or play them in ping-pong mode,
  • play them randomly,
  • play algorithmic patterns, like de-Bruijn sequences or k-nary cross sums, Gray codes or Johnson-Trotter-permutations,
  • play the set of keys with random inversions.


Package reactive-balsa
Hackage http://hackage.haskell.org/package/reactive-balsa
Repository darcs get http://code.haskell.org/~thielema/reactive-balsa/