Я хотел бы создать последовательность заметок MIDI в javascript, а затем воспроизвести ее. Многие плагины поддерживают MIDI, но я не знаю ни одного поддерживающего URL-адрес «data:». Генерация MIDI-контента не представляет большого труда, но подача этого контента в проигрыватель — дело непростое. Кто-нибудь знает, как это можно сделать - если не вообще, то хотя бы для конкретного плагина типа QuickTime?
создание MIDI в javascript
Ответы (5)
Очень аккуратная проблема. В последнее время я много работал с изображениями в кодировке base64 и регулярно использую http://www.greywyvern.com/code/php/binary2base64 для кодирования изображений. Я только что попытался преобразовать MIDI-файл и поместить текстовый поток base64 в HTML, и он отлично воспроизводился в Firefox (что меня удивило). Вот код (для краткости поток Base64 удален):
<embed
autostart="true"
loop="false"
volume="100"
hidden="false"
src="data:audio/x-midi;base64,abc...."
></embed>
Я не уверен, что можно перейти от двоичного образа к base64 в JS, но я подозреваю, что переход от MIDI может быть. Это начало.
Возможно, вы захотите взглянуть на следующий мой блог. Речь идет о библиотеке, которая делает именно то, что вы пытаетесь сделать, на стороне клиента. Однако имейте в виду, что кросс-браузерная воспроизводимость MIDI в браузерах не совсем стабильна.
http://sergimansilla.com/blog/динамически-генерирующий-миди-в-javascript/
Похоже, самым простым способом будет передача MIDI-данных, например. PHP-скрипт, который затем возвращает ввод. Затем вы можете использовать «yourscript.php?your-midi-data» вместо «data:your-mini-data».
В дополнение к использованию Javascript (см. сообщение Серджи), вы можете использовать Java в качестве резервного метода с моим мостом между Javascript и Java, который раскрывает части среды MIDI: http://mudcube7.blogspot.com/2010/08/dynamic-midi-generation-in-browser.html
QuickTime с URL-адресом данных работает как с Firefox, так и с Chrome (последние выпуски, без бета-версий). Вы должны следовать инструкциям из веб-сайт quicktime: инициализируйте QuickTime, вызвав QT_WriteOBJECT
function mp3, просто чтобы он не жаловался - возможно, в этом нет необходимости), зарегистрируйте слушателей, как описано в указанной ссылке, и после получения обратного вызова qt_load вызовите метод document.movie1.SetURL(myDataURL)
. Я использовал кодировку base64 в URL-адресе данных: "data:audio/midi;base64,..."
. (контент был сгенерирован javascript). Все работало сенсационно хорошо: Play(), Stop() и т. д. Самое сложное — это прочитать их монументальный документ (обратите внимание, что в нем также есть часть «HTML»)