Hi folks I hope someone here might be able to help. I scavenged some info and even code from the net and am trying to write a module that reads a text file and spits out a midi file.
So far I managed to make it work to the level of reading a text file with appropriate notes, octaves, transposing, volume, aftertouch, polyphony, channeltouch etc. However I am stuck at writing notes longer than 127 decimal number. The code I am using is below. I didn't post the whole code to keep it brief. If it is ok I will post the whole. ########################################### def note_on(self, time, channel, note, velocity): return varLen(time) + [0x90 + channel, note, velocity] def varLen(value): # Big endian variable byte word # as defined by the midi standard result = [] while value: result.append((value & 0x7F) | 0x80) value = value >> 7 if len(result) == 0: return [0] else: result[len(result)-1] -= 128 result.reverse() return result ############################################# note_on should accept time,channel,note and velocity as decimals. Note and velocity are not a problem as their numbers are small. If I want to put a note that lasts say longer than 127, fluidsynth moans saying unexpected eof or unexpected byte 0xfe. What I would like to do is, to be able to note_on(1500,1,60,120) 1500 being the problem. Midi file standard says that time is written as a variable length entity. so if 1500 does not fit in a byte it should then use as many bytes as needed, but all bytes except last one have their msb set to 1 to show there is more to come. Below is the output of mftext for a working and nonworking midi files respectively. ############## playing a single 'a' note ############ working fine ### Header format=1 ntrks=2 division=24 Track start Time=0 Tempo, microseconds-per-MIDI-quarter-note=500000 Time=0 Time signature=4/4 MIDI-clocks/click=24 32nd-notes/24-MIDI-clocks=8 Time=0 Meta event, end of track Track end Track start Time=0 Program, chan=1 program=1 Time=0 Note on, chan=1 pitch=57 vol=127 Time=127 Note off, chan=1 pitch=57 vol=0 Time=127 Meta event, end of track Track end ###################################################### ######### playing a single a note, with double the 127 duration## ########not working############################################ Header format=1 ntrks=2 division=24 Track start Time=0 Tempo, microseconds-per-MIDI-quarter-note=500000 Time=0 Time signature=4/4 MIDI-clocks/click=24 32nd-notes/24-MIDI-clocks=8 Time=0 Meta event, end of track Track end Track start Time=0 Program, chan=1 program=1 Time=0 Note on, chan=1 pitch=57 vol=127 Error: unexpected byte: 0xfe ######################################################### What am I doing wrong!!!!!! Help appreciated. ta sree -- http://mail.python.org/mailman/listinfo/python-list