def _parse_midi_event(self, f, delta_time, status):
     if status & 0xF0 != 0xF0:
         command = (status & 0xF0) >> 4
         channel = status & 0x0F
         data_1 = self._read_8(f) & 0x7F
         data_2 = 0
         if command in [8, 9, 10, 11, 14]:
             data_2 = self._read_8(f) & 0x7F
         if command == 8:
             return events.NoteOffEvent(delta_time, channel, data_1, data_2)
         elif command == 9:
             if data_2 == 0:
                 return events.NoteOffEvent(delta_time, channel, data_1, data_2)
             return events.NoteOnEvent(delta_time, channel, data_1, data_2)
         elif command == 10:
             return events.PolyphonicKeyPressureEvent(delta_time, channel, data_1, data_2)
         elif command == 11:
             return events.ControlChangeEvent(delta_time, channel, data_1, data_2)
         elif command == 12:
             return events.ProgramChangeEvent(delta_time, channel, data_1)
         elif command == 13:
             return events.ChannelPressureEvent(delta_time, channel, data_1)
         elif command == 14:
             return events.PitchWheelChangeEvent(delta_time, channel, (data_2 << 7) | data_1)
         return None
     message_id = status & 0x0F
     if message_id == 0:
         manufacturer_id = self._read_8(f)
         data = []
         d = self._read_8(f)
         while d != 0xF7:
             data.append(d)
             d = self._read_8(f)
         return events.SystemExclusiveEvent(delta_time, manufacturer_id, data)
     elif message_id == 2:
         lo7 = self._read_8(f)
         hi7 = self._read_8(f)
         return events.SongPositionPointerEvent(delta_time, (hi7 << 7) | lo7)
     elif message_id == 3:
         return events.SongSelectEvent(delta_time, self._read_8(f))
     elif message_id == 6:
         return events.TuneRequestEvent(delta_time)
     elif message_id == 8:
         return events.TimingClockEvent(delta_time)
     elif message_id == 10:
         return events.StartEvent(delta_time)
     elif message_id == 11:
         return events.ContinueEvent(delta_time)
     elif message_id == 12:
         return events.StopEvent(delta_time)
     elif message_id == 14:
         return events.ActiveSensingEvent(delta_time)
     elif message_id == 15:
         return events.ResetEvent(delta_time)
     return None
Exemple #2
0
def pop_sound(ticktime):
    cc = events.ProgramChangeEvent(tick=0, channel=0, value=pop_ins)
    track.append(cc)
    on = events.NoteOnEvent(channel=0,
                            tick=ticktime,
                            velocity=120,
                            pitch=pop_pitch)
    track.append(on)
    #ticktime+=Notelength+Tempo
    off = events.NoteOffEvent(tick=ticktime + Notelength + Tempo,
                              pitch=pop_pitch,
                              channel=0)
    track.append(off)
    return ticktime