示例#1
0
    def compose(self, mood):
        self.tonality = {'key': 0, 'mode': 'Major'}
        melody_param = self.generate_melody_parameter(mood)
        melody_track = Generator.generate_track([], melody_param['tempo'] *
                                                self.tempo_multiplier)

        harmony_param = self.generate_harmony_parameter(mood)
        # self.adjusted_progressions = Composer.adjust_progression(self.progression_notations, self.annotated_important_notes, harmony_param)
        harmony_annotated_notes = self.generate_harmony(harmony_param)
        harmony_track = Generator.generate_track(
            harmony_annotated_notes,
            harmony_param['tempo'] * self.tempo_multiplier)
        harmony_track_split = MIDI.separate_track(harmony_track, num_track=2)
        pattern = MIDI.new_pattern()
        pattern.append(melody_track)
        for track in harmony_track_split:
            pattern.append(track)

        # set tonality
        if melody_param['mode'][0] > 0:
            tonality = {'mode': 'Major', 'key': self.tonality['key']}
        elif melody_param['mode'][0] < 0:
            tonality = {'mode': 'Minor', 'key': self.tonality['key']}
        else:
            tonality = {
                'mode': self.tonality['mode'],
                'key': self.tonality['key']
            }

        (instruments,
         seed_change) = Instrument.get_instruments(mood, Generator.seed)
        Generator.seed_change_tmp = seed_change
        tonality_name_major = [
            'C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B'
        ]
        tonality_name_minor = [
            'C', 'C#', 'D', 'Eb', 'E', 'F', 'F#', 'G', 'G#', 'A', 'Bb', 'B'
        ]
        if tonality['mode'] == 'Major':
            print tonality_name_major[tonality['key']], 'Major'
        else:
            print tonality_name_minor[tonality['key']], 'Minor'
        return (pattern, tonality, instruments)