You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
from MidiOutFile import MidiOutFile
|
|
from MidiInFile import MidiInFile
|
|
|
|
"""
|
|
This is an example of the smallest possible type 0 midi file, where
|
|
all the midi events are in the same track.
|
|
"""
|
|
|
|
|
|
class Transposer(MidiOutFile):
|
|
|
|
"Transposes all notes by 1 octave"
|
|
|
|
def _transp(self, ch, note):
|
|
if ch != 9: # not the drums!
|
|
note += 12
|
|
if note > 127:
|
|
note = 127
|
|
return note
|
|
|
|
|
|
def note_on(self, channel=0, note=0x40, velocity=0x40):
|
|
note = self._transp(channel, note)
|
|
MidiOutFile.note_on(self, channel, note, velocity)
|
|
|
|
|
|
def note_off(self, channel=0, note=0x40, velocity=0x40):
|
|
note = self._transp(channel, note)
|
|
MidiOutFile.note_off(self, channel, note, velocity)
|
|
|
|
|
|
out_file = 'midiout/transposed.mid'
|
|
midi_out = Transposer(out_file)
|
|
|
|
#in_file = 'midiout/minimal_type0.mid'
|
|
#in_file = 'test/midifiles/Lola.mid'
|
|
in_file = 'test/midifiles/tennessee_waltz.mid'
|
|
midi_in = MidiInFile(midi_out, in_file)
|
|
midi_in.read()
|
|
|