Changeset View
Changeset View
Standalone View
Standalone View
extern/audaspace/bindings/python/examples/tetris2.py
- This file was added.
| #!/usr/bin/python | |||||
| import aud, math, time | |||||
| def parseNotes(notes, bpm, basefreq, rate = 44100, | |||||
| notechars = "XXXCXDXEFXGXAXHcXdXefXgXaXhp"): | |||||
| pos = 0 | |||||
| fadelength = 60/bpm/10 | |||||
| halfchars = "#b" | |||||
| durationchars = "2345678" | |||||
| position = 0 | |||||
| sequence = aud.Sequence() | |||||
| while pos < len(notes): | |||||
| char = notes[pos] | |||||
| mod = None | |||||
| dur = 1 | |||||
| pos += 1 | |||||
| while pos < len(notes) and notes[pos] not in notechars: | |||||
| if notes[pos] in halfchars: | |||||
| mod = notes[pos] | |||||
| elif notes[pos] in durationchars: | |||||
| dur = notes[pos] | |||||
| pos += 1 | |||||
| freq = notechars.find(char) | |||||
| if mod == '#': | |||||
| freq += 1 | |||||
| elif mod == 'b': | |||||
| freq -= 1 | |||||
| freq = math.pow(2, freq/12)*basefreq | |||||
| length = float(dur)*60/bpm | |||||
| note = aud.Sound.square(freq, rate).fadein(0, fadelength).fadeout(length - fadelength, fadelength) | |||||
| entry = sequence.add(note, position, position + length, 0) | |||||
| if char == 'p': | |||||
| entry.muted = True | |||||
| position += length | |||||
| return sequence.limit(0, position) | |||||
| def tetris(bpm = 300, freq = 220, rate = 44100): | |||||
| notes = "e2Hcd2cH A2Ace2dc H3cd2e2 c2A2A4 pd2fa2gf e3ce2dc H2Hcd2e2 c2A2A2p2" | |||||
| s11 = parseNotes(notes, bpm, freq, rate) | |||||
| notes = "e4c4 d4H4 c4A4 G#4p4 e4c4 d4H4 A2c2a4 g#4p4" | |||||
| s12 = parseNotes(notes, bpm, freq, rate) | |||||
| notes = "EeEeEeEe AaAaAaAa AbabAbabAbabAbab AaAaAAHC DdDdDdDd CcCcCcCc HhHhHhHh AaAaA2p2" | |||||
| s21 = parseNotes(notes, bpm, freq, rate, notechars = "AXHCXDXEFXGXaXhcXdXefXgXp") | |||||
| notes = "aeaeaeae g#dg#dg#dg#d aeaeaeae g#dg#dg#2p2 aeaeaeae g#dg#dg#dg#d aeaeaeae g#dg#dg#2p2" | |||||
| s22 = parseNotes(notes, bpm, freq/2, rate) | |||||
| return s11.join(s12).join(s11).volume(0.5).mix(s21.join(s22).join(s21).volume(0.3)) | |||||
| if __name__ == "__main__": | |||||
| dev = aud.Device() | |||||
| handle = dev.play(tetris(300, 220, dev.rate)) | |||||
| while handle.status: | |||||
| time.sleep(0.1) | |||||