-
Notifications
You must be signed in to change notification settings - Fork 0
MIDI Code Examples
charlies-world edited this page Nov 11, 2021
·
8 revisions
Here you will find specific code examples to see how you might use comPoYse to create something on a larger scale. Also check out my other repositories for more examples.
import random
from compoyse.midi.Note import Note
from compoyse.midi.Measure import Measure
from compoyse.midi.Voice import Voice
from compoyse.midi.Section import Section
from compoyse.midi.Composition import Composition
from compoyse.midi.MIDIDataFileWriter import MIDIDataFileWriter
def generate_new_note():
new_note = Note()
new_note.set_letter(scale[random.randrange(0, len(scale))])
new_note.set_octave(random.randrange(lowest_octave_range, highest_octave_range))
new_note.set_rhythmic_value(rhythms[random.randrange(0, len(rhythms))])
new_note.set_velocity(velocity)
return new_note
composition = Composition()
number_of_voices = 4
number_of_notes = 32
scale = ['Eb', 'F', 'G', 'Ab', 'Bb', 'C', 'D']
lowest_octave_range = 4
highest_octave_range = 6
rhythms = [['eighth'], ['quarter']]
velocity = 100
first_section = Section()
solo_voice = Voice()
measure = Measure()
for each in range(number_of_notes):
measure.add_beat(generate_new_note())
solo_voice.add_measure(measure)
first_section.add_voice(solo_voice)
first_section.set_quarter_note_bpm(120)
composition.add_section(first_section)
second_section = Section()
for each in range(number_of_voices):
new_voice = Voice()
new_measure = Measure()
for i in range(0, number_of_notes * 2):
new_measure.add_beat(generate_new_note())
new_voice.add_measure(new_measure)
second_section.add_voice(new_voice)
second_section.set_quarter_note_bpm(240)
composition.add_section(second_section)
# if we left "put_voices_in_same_track" as True,
# we would get an error,
# because each of our sections have a different amount of voices
MIDIDataFileWriter(composition, put_voices_in_same_track=False, fileName='passage_in_eb')
from compoyse.midi.Note import Note
from compoyse.midi.Rest import Rest
from compoyse.midi.Measure import Measure
from compoyse.midi.Voice import Voice
from compoyse.midi.Section import Section
from compoyse.midi.Composition import Composition
from compoyse.midi.MIDIDataFileWriter import MIDIDataFileWriter
velocity = 50
voice = Voice()
measure_one = Measure()
rest = Rest()
rest.set_rhythmic_value(['half','quarter'])
measure_one.add_beat(rest)
measure_one.add_beat(Note(velocity, 'Eb', 5, ['eighth']))
measure_one.add_beat(Note(velocity, 'D', 5, ['eighth']))
voice.add_measure(measure_one)
measure_two = Measure()
measure_two.add_beat(Note(velocity, 'D', 5, ['quarter']))
measure_two.add_beat(Note(velocity, 'Eb', 5, ['eighth']))
measure_two.add_beat(Note(velocity, 'D', 5, ['eighth']))
measure_two.add_beat(Note(velocity, 'D', 5, ['quarter']))
measure_two.add_beat(Note(velocity, 'Eb', 5, ['eighth']))
measure_two.add_beat(Note(velocity, 'D', 5, ['eighth']))
voice.add_measure(measure_two)
measure_three = Measure()
measure_three.add_beat(Note(velocity, 'D', 5, ['quarter']))
measure_three.add_beat(Note(velocity, 'Bb', 5, ['quarter']))
rest = Rest()
rest.set_rhythmic_value(['quarter'])
measure_three.add_beat(rest)
measure_three.add_beat(Note(velocity, 'Bb', 5, ['eighth']))
measure_three.add_beat(Note(velocity, 'A', 5, ['eighth']))
voice.add_measure(measure_three)
measure_four = Measure()
measure_four.add_beat(Note(velocity, 'G', 5, ['quarter']))
measure_four.add_beat(Note(velocity, 'G', 5, ['eighth']))
measure_four.add_beat(Note(velocity, 'F', 5, ['eighth']))
measure_four.add_beat(Note(velocity, 'Eb', 5, ['quarter']))
measure_four.add_beat(Note(velocity, 'Eb', 5, ['eighth']))
measure_four.add_beat(Note(velocity, 'D', 5, ['eighth']))
voice.add_measure(measure_four)
measure_five = Measure()
measure_five.add_beat(Note(velocity, 'C', 5, ['quarter']))
measure_five.add_beat(Note(velocity, 'C', 5, ['quarter']))
voice.add_measure(measure_five)
section = Section()
section.add_voice(voice)
section.set_quarter_note_bpm(240)
composition = Composition()
composition.add_section(section)
MIDIDataFileWriter(composition, fileName='i_heart_mozart')
# create a composition...
for i in range(0, composition.get_number_of_sections()):
current_section = composition.get_section_at_index(i)
for j in range(0, current_section.get_number_of_voices()):
current_voice = current_section.get_voice_at_index(j)
for k in range(0, current_voice.get_number_of_measures()):
current_measure = current_voice.get_measure_at_index(k)
for m in range(0, current_measure.get_number_of_beats()):
current_beat = current_measure.get_beat_at_index(m)
if current_beat._is_note(): # rests are unaffected
current_beat.alter_octave(1) # transpose up one octave