bitWorking

Online Flash Midi Player


 28. Mai 2012  ActionScript, Sound  


Schon seit längerem interessiere ich mich für die MIDI Wiedergabe im Browser mittels Flash.

Da Flash von Hause aus kein MIDI-Format unterstützt, muss man tief in die Trickkiste greifen. Seit dem Flash Player 10 kann man dynamischen Sound mit Flash generieren. (SampleDataEvent) Es gibt mittlerweile eine Menge Projekte, die diese Möglichkeit nutzen und ein Online Musik Studio bereitstellen. Leider gibt es kein Projekt, das auf den General-MIDI Standard baut und es so erlaubt MIDI-Dateien zu importieren/exportieren.

Ich habe vor 2 Jahren schon mal einen Sequencer auf Basis des SiON Synthesizer gebaut, den ich aber nicht veröffentlicht habe.

http://sites.google.com/site/sioncenter/

Vom Prinzip her hat das auch gut geklappt, nur ist SiON nicht so gut dafür geeignet akustische Instrumente abzubilden. Hier ein Beispiel: http://wonderfl.net/c/rdrN

Meine neueste Endeckung ist ein Projekt, dass den C Synthesizer FluidSynth mit Hilfe von Alchemy nach Actionscript portiert hat. http://code.google.com/p/flash-midi-player/

Ich habe die swc Library um wichtige Funktionen erweitert, die es mir nun erlauben komplette MIDI-Dateien abzuspielen. Für das Parsen der MIDI-Datei habe ich einen eigenen Decoder programmiert.

Beim Starten des Players wird eine 1MB große SoundFont-Datei reingeladen, die die General-MIDI Sounds beinhaltet. Durch die SoundFont-Datei kann man die Qualität der MIDI-Wiedergabe steuern; man könnte aber auch eigene Soundbänke laden, die sich nicht an den GM-Standard halten.

Nun ein Demo meines MIDI-Players, den ich bald zu einem Sequencer ausbauen will:

Bitte schreibt mir mal, ob es flüssig bei Euch läuft und wieviel CPU der Player schluckt.
Bei mir ruckelt der Player manchmal noch bei MIDI’s mit vielen Events/Spuren.

Durch weitere Optimierungen insbesondere die Compileroptionen „-as3 -optimize“ schluckt der Player jetzt deutlich weniger CPU und ruckelt bei keinem Lied mehr.



Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.