Algorithmic Composition With Python and Music21 - Tutorial 01
Algorithmic Composition With Python and Music21 - Tutorial 01
Oscar Riveros
November 05, 2013
Abstract The most basic, mathematica music, not art at the moment, just take control.
Part I
Tutorial 01
1 Create a chromatic scale from C3 (60) to C4 (72)
from music21 import * In [1]: stream = stream.Stream(); In [2]: noteList = [note.Note(midi=n) for n in range(60, 72)]; In [3]: [stream.append(note) for note in noteList]; In [4]: stream.show(musicxml) In [5]:
2 Create a chromatic scale from C3 to C4 with the form of sin() with 24 notes of length
from music21 import * In [6]: from pylab import * %pylab --no-import-all inline
Populating the interactive namespace from numpy and matplotlib
def discrete_sin(theta, low_note, high_note): return high_note + int(high_note - low_note) * sin(theta) In [7]: stream = stream.Stream(); In [8]: pitchesList = [discrete_sin(n, 60, 72) for n in range(24)]; In [9]: plot(pitchesList) [<matplotlib.lines.Line2D at 0x105a4d6d0>] In [10]: Out [10]:
3 Create a simple mathematical counterpoint betwen sin( + sin ()) and cos( + cos ()) with 256 notes of length in the rst voice, where = e and = ln(1 + ) and rst voice is 2 times most faster than the second voice and one cotave uper
from music21 import * In [13]: from pylab import * %pylab --no-import-all inline
Populating the interactive namespace from numpy and matplotlib
def psi(theta): return exp(theta) In [14]: def discrete_sin(theta, low_note, high_note): return high_note + int(high_note - low_note) * sin(theta + psi(theta)) def phi(theta): return log(1 + theta) In [15]: def discrete_cos(theta, low_note, high_note): return high_note + int(high_note - low_note) * cos(theta + phi(theta))
stream_sin = stream.Stream(); stream_cos = stream.Stream(); In [16]: pitchesList_sin = [discrete_sin(n, 60, 72) for n in range(256)]; pitchesList_cos = [discrete_cos(n, 48, 60) for n in range(128)]; In [17]: plot(pitchesList_sin) plot(pitchesList_cos) In [18]:
[<matplotlib.lines.Line2D at 0x105a53ed0>]
Out [18]:
[stream_sin.append(note.Note(midi=pitch, quarterLength=0.5)) for pitch in pitchesLi [stream_cos.append(note.Note(midi=pitch, quarterLength=1)) for pitch in pitchesList In [19]: score = stream.Stream() In [20]: score.insert(0, stream_sin) score.insert(0, stream_cos) In [21]: score.show(musicxml) In [22]:
4 About Me
1. 2. 3. 4. http://twitter.com/maxtuno http://soundcloud.com/maxtuno http://www.reverbnation.com/maxtuno http://mx-clojure.blogspot.com/