Project: isobar
A Python library to express and manipulate musical patterns.
isobar is a Python framework for expressing and constructing musical patterns, designed for use in algorithmic composition. It allows for concise construction, manipulation and transposition of sequences, supporting scalar operations on lazy patterns. These can then be output via MIDI or (soon) OSC.
It is inspired by SuperCollider's excellent pattern library, which allows patterns to be combined like building blocks to create easily extensible compositions.
Download
Get the source from github:
git clone git@github.com:ideoforms/isobar.git
Examples of common operations are included within the distribution.
Usage
from isobar import * from isobar.io.midiout import * # create a repeating sequence with scalar transposition: # [ 48, 50, 57, 60 ] ... seqA = PSeq([ 0, 2, 7, 3 ]) + 48 # apply pattern-wise transposition # [ 48, 62, 57, 72 ] ... seqA = seqA + PSeq([ 0, 12 ]) # create a geometric chromatic series, repeated back and forth seqB = PSeries(0, 1, 12) + 72 seqB = PPingPong(seqB) # create an velocity series, with emphasis every 4th note, # plus a random walk to create gradual dynamic changes amp = PSeq([ 60, 40, 30, 40 ]) + PBrown(0, 1, -20, 20) # a Timeline schedules events at a given BPM, sent over a specified output timeline = Timeline(120) midiout = MidiOut() timeline.output(midiout) # assign each of our Patterns to particular properties timeline.sched({ 'note': seqA, 'dur': 1 }) timeline.sched({ 'note': seqB, 'dur': 0.25, 'amp': amp }) timeline.run()