Mr.SpOOn wrote: > Salve, > ho bisogno di utilizzare Python in combinazione con il protocollo > MIDI. In realtà l'unica cosa di cui avrei bisogno sarebbe la > possibilità di leggere dei fil MIDI e lavorare con i valori numerici > delle note. > > Mi è stato suggerito questo pacchetto: > http://www.mxm.dk/products/public/pythonmidi > Il problema è che non è molto documentato, comunque, dando un'occhiata > a un paio di esempi si può capire. > > Per fare qualche prova, però, ho creato un file MIDI usando l'editor > MIDI MUsE, su Ubuntu, e quando provo a usare questo file in uno degli > esempi di prima, ricevo questo errore: > > format: 1, nTracks: 1, division: 384 > ---------------------------------- > > Start - track #0 > tempo: 500000 > Traceback (most recent call last): > File "example_print_file.py", line 19, in <module> > midiIn.read() > File "/home/ilsignorcarlo/ordinami/midi/MidiInFile.py", line 48, in read > p.parseMTrkChunks() > File "/home/ilsignorcarlo/ordinami/midi/MidiFileParser.py", line > 169, in parseMTrkChunks > self.parseMTrkChunk() # this is where it's at! > File "/home/ilsignorcarlo/ordinami/midi/MidiFileParser.py", line > 118, in parseMTrkChunk > dispatch.meta_event(meta_type, meta_data) > File "/home/ilsignorcarlo/ordinami/midi/EventDispatcher.py", line > 258, in meta_event > nn, dd, cc, bb = toBytes(data) > ValueError: need more than 2 values to unpack > > > E non ho idea di dove sia il problema. > Qualcuno ha pratica con il MIDI (possibilmente in combinazione con > Python) e sa suggerirmi qualche altro pacchetto che possa fare al caso > mio o aiutarmi a capire il problema? > > Grazie, > Carlo
Il problema è che 'data' non contiene abbastanza caratteri da poter essere scompattato in una tupla di 4 elementi (sono solo 2). Dato che lo standard midi prevede 4 valori per 'time signature, come riportato correttamente nel commento: # TIME_SIGNATURE = 0x58 (58 04 nn dd cc bb) l'impressione è che il file midi utilizzato non sia corretto, e che il valore meta_length (MidiFileParser.py linea 116) che dovrebbe essere '04' non lo sia. Controlla con un print e prova un file midi generato da un altro programma. Nota: per time signature è previsto: Meta Event Type Length Numer Denom Metro 32nds 255 (0xFF) 88 (0x58) 4 0-255 0-255 0-255 1-255 i primi tre byte sono a valore fisso, il comando è sempre lungo 7 byte. -- Riccardo Lemmi _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python