Konwerter Music-X to SMF – Standard Midi File

Translate original post with Google Translate

Wielu zajmujących się muzyką w latach 90 tworzyło przy pomocy Atari ST (wbudowane midi) czy też Commodore Amiga (prosta przejściówka Midi). Na Atari ST królował Cubase, na Amidze m. in. Music-X.

Music-X jest dla mnie jedynym sekwencerem midi, który ma odtwarzanie sekwencji. To są takie podślady (subtracks) odpalane ze ścieżki głównej. Wystarczy sobie zaprogramować bas, chórki, perkusję i szaleć, bo każdą taką sekwencję można odtwarzać w innej wysokości (transpozycja), np. 0 – to główne C, +7 to G, a -7 to F oktawę niżej. Bardzo szybko się tworzy aranżacje na zasadzie: nie powtarzaj się.

Ja używałem Amigi do komponowania, zebrało się kilkanaście kawałków, jednak nie za bardzo było co z tym dalej robić. Miałem 2 możliwości, z czego przez obie przeszedłem.

  1. zmuszenie Music-X pod emulatorem, by dał strumień midi. Napisałem łatkę pod emulator i konwerter strumienia midi do SMF. Działało, ale dużo zachodu z tym było.
  2. napisanie konwertera Music-X to SMF.

Oba podejścia zakończyły się sukcesem, jednak drugie podejście jest bardziej uniwersalne.
Konwerter v0.5 500-linijkowy napisany w pythonie 2.5.1 do pobrania tutaj

Powinno działać nawet na niższych (>=2.4) wersjach pythona.

Dla tych, co są ciekawi zastosowanych rozwiązań:

  • ten programik celowo – dla wygody użytkownika – jest w jednym pliku.
  • jest pisany “na kolanie” – ważne, żeby działał, rozwijanie nie jest planowane :), chociaż jest bardzo elastyczny.

CHANGELOG:

Fixed from 0.4: (2010-06-18)
– Fixed sequence length setting (when sequence offset is not 0)
– changed ‘len’ variables to ‘length’ not to be in potential conflict with func
– added reverse sorting of events by event type before write;
now pgmchg, ctrlchg always before note on; note on before note off. good

Fixed from 0.3: (2010-06-13)
– file format checking added

Fixed from 0.2: (2010-06-10)
– unroll sequences now works ok. (not only first unroll)

Fixed from 0.1: (2010-06-08)
– The code has a little problems with unrolling sequences, sometimes the last note is fired but not finished, this leads to endless notes playing. I have met this problem once or twice, it is easy to remove the notes manually.
– Code cleanup

Initial version: 0.1: (2010-06-08)

Leave a Reply