2010-08-02 10 views
12

Ich habe etwas recherchiert und es scheint, dass Javascript und MIDI in diesen Tagen nicht gut zusammenpassen. Zumindest sagt das Google.Generiere Live-MIDI aus Javascript

Wie in diesem Thema beschrieben: generating MIDI in javascript ist es möglich, eine Datei entweder in Javascript oder serverseitig zu erstellen und sie so abzuspielen, als würde man eine gewöhnliche Datei abspielen.

Aber ich wirklich möchte in der Lage sein, einzelne MIDI-Events zu senden, „live“, wie es eine ständige Interaktion mit dem Benutzer sein würde. Ich denke, mein Plan B wäre, ein Java-Applet zu erstellen, das das tut, aber dann wäre meine App nicht mehr reines HTML5.

Ich hörte auch Audio-Unterstützung nicht berühmt ist jetzt HTML5, so fragte ich mich auch, wenn keine Lösung ist jetzt verfügbar, was sind die möglichen zukünftigen Ergebnisse?

Danke.

Antwort

3

Siehe die Musik Einbettung Teil this blog post by John Resig. (Aus irgendeinem Grund klingt das Mario-Spiel, das Resig mit Spielen verbindet, in Firefox, aber nicht in Chrome oder Safari; es lohnt sich, zu untersuchen, warum).

Die Idee ist, dass Sie eine data URI verwenden, um eine Base64-codierte Version Ihrer Daten in die HTML-Datei selbst einzubetten. So könnte man Javascript schreiben, um kontinuierlich Daten in MIDI format, dann encode it in base64 zu generieren, und dann in ein HTML5-Element

+0

Das mache ich schon, um ganze Sequenzen zu erzeugen, und ich denke, ich werde mich daran halten müssen, um einzelne Noten zu spielen. Das Problem ist, dass die Latenz etwas bemerkbar ist, auch wenn es nicht so groß ist. Aber ich denke, es ist momentan die beste Lösung, ein Java-Applet zu verwenden. – Manux

+0

Können Sie einen Link zu Ihrem Code veröffentlichen? Es kann möglich sein, die Latenz zu verringern, indem kontinuierlich Töne im Hintergrund erzeugt werden und mehrere Audioelemente erzeugt werden, um sie zu füllen. –

0

wenn html5 eine Option ist, könnten Sie versuchen osc Ereignisse mit WebSockets zu erzeugen und wandeln sie in Midi-Signale einen Server-Proxy verwenden.

Was ich nicht weiß, ist, wenn die Zeitgeber in Javascript sind stabil genug für eine genaue Zeitpunkte zu erzeugen.

+0

Element einspeisen, also müsste ich die Musik zum Client streamen? Bei diesem Tempo sehe ich nicht, warum ich OSC benutzen würde. Oder, sobald ich die Midi-Signale auf der Client-Maschine habe, wo sende ich sie: ^? – Manux

+0

Osc-Ereignisse sind keine Live-Musik, die zur Verwendung gestreamt wird, sondern Kontrollsignale, die über UDP oder TPC transportiert werden. auf dem Desktop könnten Sie einen kleinen Proxy laufen lassen, der die osc-Ereignisse in Midi-Signale umwandelt, die an die Midi-Geräte gesendet werden, die Sie steuern wollen –

+0

Also müsste ich diesen Proxy auf dem Client-Rechner installieren? Ich schätze das kann ich in Javascript nicht machen. – Manux

1

Ich glaube, die beste Option zur Zeit von Ihrer HTML-Anwendung über eine xhr oder WebSockets zu einem Backend-System zu kommunizieren, auf dem Server ausgeführt wird, der die eigentliche Übersetzung in Midi-Events tun. Sie werden vielleicht feststellen, dass einer der vielen Comet-Server, die bereits verfügbar sind, diesen Teil Ihres Lebens einfacher macht, aber viele Midi-Anwendungen erfordern eine relativ geringe Latenz, und Sie werden Schwierigkeiten haben, Kometen-Techniken weit unter 100ms zu bekommen.

+0

Das hilft nicht wirklich, ich muss immer noch einen Weg finden, MIDI-Events an das Client-Betriebssystem zu senden . – Manux

Verwandte Themen