def test_grouping(): midi = Midi(500) n0 = NoteOnEvent(0, 0, 0) n1 = NoteOnEvent(1, 10, 0) n2 = NoteOnEvent(1, 20, 0) n3 = NoteOnEvent(2, 30, 0) n4 = NoteOnEvent(2, 30, 0) midi.append(n0, 510) midi.append(n1, 400) midi.append(n2, 10) midi.append(n3, 0) midi.append(n4, 40) midi.append(n0, 510) midi.append(n0, 400) midi.append(n3, 10) midi.append(n2, 0) midi.append(n4, 40) midi.group() print for t in midi.timedEventsList: print t print t.sample(44100, 500, 60) # midi.quantize(fraction = 4) print midi.group() print for t in midi.timedEventsList: print t print t.sample(44100, 500, 60) comp = Composer(order = 2) comp.learnFromMidi(midi) print print comp.marcovChains[0] print print comp.marcovChains[1] """
class ScreenEventHandler(BaseEventHandler): def __init__(self, event_dispatcher): screen_event_types = [(custom_event_types.TilingRefresh, self.handle_tiling_refresh)] BaseEventHandler.__init__(self, event_dispatcher, screen_event_types) self.composer = Composer() self.get_unmanaged_screens() def handle_tiling_refresh(self, event): main_display = self.event_dispatcher.display self.composer.compose_windows(main_display.screen().root) def get_unmanaged_screens(self): # Get all active screens. for screen_id in xrange(self.event_dispatcher.display.screen_count()): if self.event_dispatcher.redirect_screen_events(screen_id): self.event_dispatcher.screens.append(screen_id)
def test_readFile(): comp = Composer(order = 3) midi_file_folder = "../midifiles/classical_piano/c_maj/format0" paths = [os.path.join(midi_file_folder, f) for f in os.listdir(midi_file_folder)] paths = paths[:3] for path in paths: midi = midi.readFile(path) # midi.quantize(32) print "Learning (" + path + ") ..." comp.learnFromMidi(midi) # print comp.marcovChains[1] midi = comp.getMidi(1, 1000) for e in midi.timedEventsList: print e samplerate = 44100 bpm = 120 numSamples = 60 * 44100 out = [] s = CSynth(samplerate) it = iter(midi.timedEventsList) currentSample = 0 # sample the last events was send to the synth at lastEventsSample = 0 print "Rendering..." while currentSample < numSamples: try: nextEvents = it.next() # calculate samples between the two events nextEventsSample = nextEvents.sample(samplerate, midi.unitsPerBeat, bpm) sampleDiff = nextEventsSample - lastEventsSample currentSample += sampleDiff while sampleDiff > 0: if sampleDiff < BUFFER_SIZE: out.extend(s.getSamplesBuffered(sampleDiff)) sampleDiff = 0 else: out.extend(s.getSamplesBuffered(min(sampleDiff, BUFFER_SIZE))) sampleDiff -= BUFFER_SIZE for event in nextEvents.events: if event.type == Messages.NOTE_ON: s.noteOn(event.note) if event.type == Messages.NOTE_OFF: s.noteOff(event.note) lastEventsSample = nextEventsSample except StopIteration: break # render rest while currentSample < numSamples: if numSamples - currentSample > BUFFER_SIZE: out.extend(s.getSamplesBuffered(BUFFER_SIZE)) currentSample += BUFFER_SIZE elif numSamples - currentSample > 0: out.extend(s.getSamplesBuffered(numSamples - currentSample)) currentSample = numSamples else: break print "Writing to file..." inout.writeMono("/tmp/asdf_python.wav", out, 44100)
def __init__(self, event_dispatcher): screen_event_types = [(custom_event_types.TilingRefresh, self.handle_tiling_refresh)] BaseEventHandler.__init__(self, event_dispatcher, screen_event_types) self.composer = Composer() self.get_unmanaged_screens()