HasChorus

HasChorus is a set of Haskell modules written on top of Haskore to make it easier to sequence simple, repetitive music.

Background
In the early 1990s 2 things happened to make me interested in writing some software to sequence repetitive music:

  • I did quite a bit of music sequence using trackers; and
  • I went to a seminar presented by a UK academic (sorry, I've forgotten his name) about expressing music in functional programming languages (probably Miranda, in this case) at Sydney University.

Trackers were nice because you could express things in simple blocks and arrange those blocks into sequences. However, the constant cutting and pasting, and minor tweaking was tedious. You needed to be able to program this stuff: the computer should handle the repetition.

I waited until the late 1990s before doing anything. By this time I had seen Haskore. It was very powerful but didn't do the tracker-like block structuring in any obvious way.

So I wrote HasChorus on top of Haskore.

Modules

HasChorus has a bunch of useful modules:

HasChords.lhs
Build (diatonic) chords from scales and scale degrees.
HasDrums.lhs
Sequence drums in a similar manner to a drum machine.
HasEasyMusic.lhs
Allow simple specification of simple music sequences.
HasGroove.lhs
Modify Haskore performances via normal distributions.
HasPatterns.lhs
Sequence patterns by playing chords in different ways.
HasScales.lhs
Build scales and pick notes by scale degree.
HasSounds.lhs
Some boring ways of playing some instruments.
HaskoreExtras.lhs
Some useful functions that aren't in Haskore.

including some utilities:

BubbleSort.lhs
An implementation of bubble sort. Used by HasGroove.lhs.
Normal.lhs
Generate normal distributions. Used by HasGroove.lhs.

and a sample song:

TwelveBar.lhs
An example song.

See the README for a few more details...

Testing, maintenance, ...

HasChorus has been tested under:

  • Hugs: Currently I use Hugs 98, February 2000. I use -h1000000 so that HasGroove doesn't melt down... :-)
  • GHC: 4.08 (previously under 4.07) under x86 Linux.

Lack of more recent Haskell versions confirms that I haven't run Haschorus myself in a very long time. There's probably some useful code in there but it is unmaintained. I used to use HasChorus to sequence up simple backing tracks for my own compositions... but then I discovered the joy of playing with other people... :-)

AttachmentSize
haschorus-1.2.1.tar.gz20.17 KB