def instrument(self, new, channel): if channel != 0: if not isinstance(self.player, MIDI): self.player = MIDI() self.player.type(new, channel) return self.player.close() if new.strip().lower().startswith('beep'): self.player = Beeper() self.filter.discard('%') self.strip.discard('$') self.filter.add('$') self.strip.add('%') else: self.player = MIDI() self.filter.discard('$') self.strip.discard('%') self.filter.add('%') self.strip.add('$') try: self.player.type(new) except ValueError as e: # Fallback to Beeper print e.message self.player.close() self.player = Beeper() self.filter.discard('%') self.strip.discard('$') self.filter.add('$') self.strip.add('%')
class Player(Parser): def __init__(self, *args, **kwargs): super(Player, self).__init__(*args, **kwargs) self.player = Beeper() self.speed = 2000 self.noteinfo = True def instrument(self, new, channel): if channel != 0: if not isinstance(self.player, MIDI): self.player = MIDI() self.player.type(new, channel) return self.player.close() if new.strip().lower().startswith('beep'): self.player = Beeper() self.filter.discard('%') self.strip.discard('$') self.filter.add('$') self.strip.add('%') else: self.player = MIDI() self.filter.discard('$') self.strip.discard('%') self.filter.add('%') self.strip.add('$') try: self.player.type(new) except ValueError as e: # Fallback to Beeper print e.message self.player.close() self.player = Beeper() self.filter.discard('%') self.strip.discard('$') self.filter.add('$') self.strip.add('%') def tempo(self, new): self.speed = new def lyrics(self, new): self.noteinfo = not new def say(self, new): self.write(new, newline=False) def dynamic(self, new, channel): self.player.dynamic(new) def noteon(self, channel, note): self.player.on(channel, note) def noteoff(self, channel, note): self.player.off(channel, note) def play(self, head, data): try: length = float(data.rstrip('+')) except ValueError: print data, 'not known' return length = self.speed / length if data.endswith('+'): # Dotted notes length *= 1.5 if head.startswith('0'): if self.noteinfo: self.write('Sleep: ', length) time.sleep(length/1000.) return if self.noteinfo: self.write((head, length)) self.player(head, length) def writer(self): while True: item = self.queue.get() if item is None: return try: sys.stdout.write(item) except IOError: pass def write(self, *args, **kwargs): self.queue.put(kwargs.get('sep', '').join(i if isinstance(i, unicode) else unicode(i) for i in args)) if kwargs.get('newline', True): self.queue.put('\n') def run(self): self.queue = Queue() thread = Thread(target=self.writer) thread.daemon = True thread.start() try: with MediaTimer(): super(Player, self).run() finally: self.queue.put(None)
def __init__(self, *args, **kwargs): super(Player, self).__init__(*args, **kwargs) self.player = Beeper() self.speed = 2000 self.noteinfo = True
from math import * from beep import Beeper #br = 88000 br = 16000 beeper = Beeper(bitrate=br, channels=2) def happy(reps=1): length = 0.05 * 1000 for rep in xrange(reps): for f in xrange(700, 1000 + 1, 100): print f beeper.tone(frequency=f, length=length) beeper.play() def chirtle(): happy(3) def real_happy(reps=1): length = 0.1 * 1000 for rep in xrange(reps): for f in xrange(200, 1000 + 1, 100): print f beeper.tone(frequency=f, length=length) beeper.play()