2010-08-02 16 views
12

Hice algunas investigaciones y parece que Javascript y MIDI no van bien juntos en estos días. Al menos eso dice Google.Generar MIDI en vivo desde Javascript

Como se indica en este tema: generating MIDI in javascript, es posible crear un archivo, ya sea en Javascript o en el lado del servidor, y reproducirlo como si se tocara un archivo habitual.

Pero, realmente me gustaría poder enviar eventos midi individuales, "en vivo", ya que sería una interacción constante del usuario. Supongo que mi plan B sería crear un applet de Java que haga esto, pero entonces mi aplicación ya no sería pura HTML5.

También escuché que el soporte de audio de HTML5 no es famoso en este momento, así que también me pregunté si no hay una solución disponible ahora, ¿cuáles son los posibles resultados futuros?

Gracias.

Respuesta

3

Consulte la parte de incrustación de música de this blog post by John Resig. (Por alguna razón, el juego de Mario al que Resig vincula me suena en Firefox pero no en Chrome o Safari; valdría la pena investigar por qué).

La idea es que utilice un data URI para incrustar una versión codificada en base64 de sus datos dentro del archivo HTML. Entonces, podría escribir Javascript para generar continuamente datos en el MIDI format, luego encode it in base64, y luego insertarlo en un elemento <audio> de HTML5

+0

Eso es lo que ya estoy haciendo para generar secuencias completas, y creo que tendré que pegarme a ellas para tocar notas individuales. El problema es que la latencia es notable, incluso si no es tan grande. Pero supongo que, a falta de utilizar un applet de Java, esta es la mejor solución en este momento. – Manux

+0

¿Puedes publicar un enlace a tu código? Es posible disminuir la latencia al generar continuamente tonos en el fondo y al crear múltiples elementos de audio para llenarlos. –

0

si html5 es una opción, puede tratar de generar eventos osc usando websockets y convertirlos a señales midi utilizando un servidor proxy.

Lo que no sé es si los temporizadores en javascript son lo suficientemente estables para generar sincronizaciones precisas.

+0

esperar, ¿así que tendría que transmitir la música al cliente? A ese ritmo, no veo por qué usaría OSC. O, una vez que obtuve las señales midi en la máquina del cliente, ¿a dónde las envío? – Manux

+0

Los eventos de osc no son música en vivo que se transmita al uso, sino señales de control que se transportan a través de udp o tcp. en el escritorio, podría ejecutar un pequeño proxy que traduzca los eventos de osc a las señales midi que se envían a los dispositivos midi que desea controlar –

+0

. ¿Tendría que instalar ese mismo proxy en la máquina del cliente? Supongo que no puedo hacer eso en Javascript. – Manux

1

Creo que su mejor opción en este momento es comunicarse desde su aplicación HTML a través de xhr o websockets a un sistema back-end ejecutado en su servidor que pueda hacer la traducción real en eventos midi. Puede encontrar que uno de los muchos servidores de cometas que ya están disponibles puede hacer que esta parte de su vida sea más fácil, sin embargo, muchas aplicaciones midi requieren una latencia relativamente baja, y tendrá dificultades para obtener técnicas de cometa mucho más abajo de 100 ms.

+0

Esto realmente no ayuda, todavía tengo que encontrar la manera de enviar eventos MIDI al sistema operativo del cliente . – Manux