Example #1
0
class MelodyPlayer():
    def __init__(self, speed=0.1):
        self.melody = None
        self.speed = speed
        self.static_start_note = 28
        self.transpose = 0
        self.pd = PdSender(settings["PD_HOST"], settings["PD_PORT"])

    def play(self, real_scale, start=0):
        """plays the melody given in the self.melody attribute

        by sending the necessary messages to the roqba-sound-engine"""
        if not self.melody:
            raise RuntimeError("Impossible Request: no melody given")
        start_note = (self.static_start_note + self.melody['start_note'])
        current_note = start_note
        self.pd.send("sound 1")
        for counter, note in enumerate(self.melody['melody']):
            move = note[0]
            modifier = None
            if type(move) == str:
                move, modifier = extract_modified_move(move)
                modifier = (modifier == '-' and -1 or 1)
            next_note = current_note + move
            next_real_note = real_scale[next_note]
            if modifier:
                next_real_note += modifier
            print(next_real_note + self.transpose, end=' ')
            if counter >= start:
                self.pd.send(["voice", 1, "dur", self.speed * note[1] * 1000])
                self.pd.send(["voice", 1, next_real_note + self.transpose])
                time.sleep(self.speed * note[1])
            current_note = next_note
Example #2
0
 def __init__(self, speed=0.1):
     self.melody = None
     self.speed = speed
     self.static_start_note = 28
     self.transpose = 0
     self.pd = PdSender(settings["PD_HOST"], settings["PD_PORT"])