class music_converter: def __init__(self, music_key, major, tempo, tsfile): self.key = music_key self.tempo = tempo self.timeseries = pd.read_csv(tsfile, sep='\s*,\s*', engine='python') self.composition = Composition() self.composition.set_author('Guido', '*****@*****.**') self.composition.set_title('Epidemics') def write_mingus(self, outfile): notes = list(self.timeseries['Notes']) t = Track() for n in range(len(notes)): if n % 4 == 0: b = Bar(self.key, (4, 4)) if notes[n] != 'Z': b + notes[n] else: b + None if (n + 1) % 4 == 0: t + b self.composition + t self.track = t lily_composition = LilyPond.from_Composition(self.composition) print lily_composition LilyPond.to_pdf(lily_composition, outfile) def write_midi(self, outfile): midi_file_out.write_Composition(outfile, self.composition, bpm=self.tempo)
def tests_to_mingus_composition(): # Create a composition, and add the vocal tracks to it. composition = Composition() composition.set_title('Counterpoint Exercise', '') composition.set_author(author, '') # Set up our vocal 'tracks' with the notes, key, meter defined in tracks.py tracks = {} for voice in [Soprano, Alto, Tenor, Bass]: if len(melodies[voice.name]): tracks[voice.name] = Track(instrument=voice()) tracks[voice.name].add_bar(Bar(key=key, meter=meter)) tracks[voice.name].name = voice.name for note in melodies[voice.name]: tracks[voice.name].add_notes(*note) composition.add_track(tracks[voice.name]) return composition
def createMingusComposition(intermed, timesig, bIsTreble, bSharps): comp = Composition() comp.set_title('Trilled Results') comp.set_author('Author') if bIsTreble: ins = TrebleInstrument('') else: ins = BassInstrument('') track = Track(ins) track.name = 'Part 1' comp.add_track(track) assert len(timesig) == 2 and isinstance(timesig[0], int) and isinstance( timesig[1], int) firstbar = Bar(meter=timesig) track.add_bar(firstbar) mapDurs = { int(intermed.baseDivisions * 4): 1.0, #whole note, int(intermed.baseDivisions * 2): 2.0, #half note int(intermed.baseDivisions * 1): 4.0, #qtr note, and so on int(intermed.baseDivisions * 0.5): 8.0, int(intermed.baseDivisions * 0.25): 16.0, int(intermed.baseDivisions * 0.125): 32.0, int(intermed.baseDivisions * 0.0625): 64.0, } for note in intermed.noteList: if note.pitch == 0 or note.pitch == (0, ): # a rest thepitches = tuple() else: # a note thepitches = [] for pitch in note.pitch: pname, poctave = music_util.noteToName(pitch, bSharps) thepitches.append(pname + '-' + str(poctave)) dur = note.end - note.start if dur not in mapDurs: raise NotesinterpretException('Unknown duration:' + str(dur)) notecontainer = NoteContainer(thepitches) notecontainer.tied = note.isTied bFit = track.add_notes(notecontainer, mapDurs[dur]) assert bFit #note that, naturally, will enforce having correct measure lines, since going across barline throughs exception return comp
def createMingusComposition(intermed, timesig, bIsTreble, bSharps): comp = Composition() comp.set_title('Trilled Results') comp.set_author('Author') if bIsTreble: ins = TrebleInstrument('') else: ins=BassInstrument('') track = Track(ins) track.name = 'Part 1' comp.add_track(track) assert len(timesig)==2 and isinstance(timesig[0],int) and isinstance(timesig[1],int) firstbar = Bar(meter=timesig) track.add_bar(firstbar) mapDurs={ int(intermed.baseDivisions*4): 1.0, #whole note, int(intermed.baseDivisions*2): 2.0, #half note int(intermed.baseDivisions*1): 4.0, #qtr note, and so on int(intermed.baseDivisions*0.5): 8.0, int(intermed.baseDivisions*0.25): 16.0, int(intermed.baseDivisions*0.125): 32.0, int(intermed.baseDivisions*0.0625): 64.0, } for note in intermed.noteList: if note.pitch==0 or note.pitch==(0,): # a rest thepitches = tuple() else: # a note thepitches = [] for pitch in note.pitch: pname, poctave = music_util.noteToName(pitch,bSharps) thepitches.append(pname+'-'+str(poctave)) dur = note.end - note.start if dur not in mapDurs: raise NotesinterpretException('Unknown duration:' + str(dur)) notecontainer = NoteContainer(thepitches) notecontainer.tied = note.isTied bFit = track.add_notes(notecontainer, mapDurs[dur]) assert bFit #note that, naturally, will enforce having correct measure lines, since going across barline throughs exception return comp
def setup_tracks(midi_file_out=None): from tracks import melodies, cantus_firmus, key, meter, species, author # Create a composition, and add the vocal tracks to it. composition = Composition() composition.set_title('Counterpoint Exercise', '') composition.set_author(author, '') # Set up our vocal 'tracks' with the notes, key, meter defined in tracks.py tracks = {} for voice in [Soprano, Alto, Tenor, Bass]: if len(melodies[voice.name]): tracks[voice.name] = Track(instrument=voice()) tracks[voice.name].add_bar(Bar(key=key, meter=meter)) tracks[voice.name].name = voice.name for note in melodies[voice.name]: tracks[voice.name].add_notes(*note) composition.add_track(tracks[voice.name]) if midi_file_out is not None: # Save the midi file! write_Composition(midi_file_out, composition, verbose=True) return composition, [], species
async def run(self): while await self.receive(): # flush messages pass c = Composition() c.set_author("amg") c.set_title(CFG.OUTPUT_PREFIX + self.agent.name) c.add_track(self.agent.get("melody_track")) c.add_track(self.agent.get("accompaniment_track")) # fluidsynth.init("4U-Yamaha C5 Grand-v1.5.sf2", "alsa") # fluidsynth.play_Composition(c) midi_file_out.write_Composition( CFG.OUTPUT_FOLDER + CFG.OUTPUT_PREFIX + self.agent.name + ".mid", c, CFG.SONG_TEMPO) l = lilypond.from_Composition(c) extra = " \\score { \\new PianoStaff << \\set PianoStaff.instrumentName = #\"Piano \" \\new Staff = \"upper\" \\upper \\new Staff = \"lower\" \\lower >> \\layout { } }" l2 = l.replace("{ {", "upper = {x {x", 1).replace( "{ {", "lower = { {", 1).replace("{x {x", "{ {", 1) + extra # print("<lilipond-"+CFG.OUTPUT_FOLDER+CFG.OUTPUT_PREFIX+self.agent.name+">\n"+l2) lilypond.to_pdf( l2, CFG.OUTPUT_FOLDER + CFG.OUTPUT_PREFIX + self.agent.name) self.agent.presence.set_presence( state=PresenceState(available=True, show=PresenceShow.AWAY)) self.set_next_state(S_FINISHED)
def vexflow_to_mingus_composition(melodies): # Create a composition, and add the vocal tracks to it. composition = Composition() composition.set_title('Counterpoint Exercise', '') composition.set_author(author, '') # Set up our vocal 'tracks' with the notes, key, meter defined in tracks.py tracks = {} for voice in [Soprano, Alto, Tenor, Bass]: lower_name = voice.name.lower() if lower_name in melodies and melodies[lower_name]: tracks[voice.name] = Track(instrument=voice()) tracks[voice.name].add_bar(Bar(key=key, meter=meter)) tracks[voice.name].name = voice.name for bar in melodies[lower_name]: for pitch, duration in bar: pitch = pitch.replace('/', '-').upper() if duration.endswith('r'): pitch = None duration = duration[:-1] duration = inv_durations[duration] tracks[voice.name].add_notes(pitch, duration) composition.add_track(tracks[voice.name]) return composition
# Constants FIRST = 0 SECOND = 1 THIRD = 2 FOURTH = 3 # Prefix pre = "test - " # Start Composition composition = Composition() composition.set_author('Melody Nieun', '*****@*****.**') composition.set_title('First Melody Composition with Python') # Start a track (which will be a part of the composition defined above) track = Track() # Start a bar (which will be a part of the track defined above) bar1 = Bar() notes = note_collection(['C', 'D', 'E', 'F', 'G', 'A', 'B']) # Generate the first note generator = NoteGenerator(notes=notes, duration=4)#, conditions={0: condition1}) generator.add_notes_to(bar1, count=4) # This line add the first note to the bar defined above prev_notes = generator.added_notes
range = (Note('C', 0), Note('C', 10)) clef = 'Treble' def __init__(self, name): self.name = name Instrument.__init__(self) class BassInstrument(Instrument): name = '' range = (Note('C', 0), Note('C', 10)) clef = 'Bass' def __init__(self, name): self.name = name Instrument.__init__(self) comp = Composition() comp.set_title('The Mingus') comp.set_author('Ben') ins = TrebleInstrument('kazoo') track = Track(ins) track.name = 'WWW' #instead of 'untitled' comp.add_track(track) firstbar = Bar(meter=(3,4)) track.add_bar(firstbar) print track.add_notes(['C-5'], 4.0) print track.add_notes(['E-5'], 2.0) print track.add_notes(['C-4','D-4'], 8.0) print track.add_notes(['C-4','D-4','F-4'], 8.0)
from mingus.containers import Note from mingus.containers import NoteContainer from mingus.containers import Bar from mingus.containers import Track from mingus.containers.instrument import Instrument, Piano, Guitar from mingus.containers import Composition from mingus.midi.midi_file_out import write_Composition eb = Note("Eb", 4) g = Note("G", 4) bb = Note("Bb", 4) n = NoteContainer([eb, g, bb]) c = Composition() c.set_author('Dusty Carver', '*****@*****.**') c.set_title('Late Nights') t = Track(Guitar()) b = Bar('Eb', (4, 4)) b.place_notes(n, 4) b.place_notes(n, 4) b.place_notes(n, 4) b.place_notes(None, 4) t.add_bar(b) c.add_track(t) write_Composition("one.mid", c)