我试图在http://mudcu.be/piano/创建彩色钢琴网站的变体,我真的很难找到一个如何解析MIDI文件,绘制图形元素和播放MIDI音符的好例子。
有谁知道彩钢琴网站是如何创建的?
我首先尝试播放特定的midi文件 - 没有运气。
下面的代码没有做任何事情,也没有显示错误。
<!DOCTYPE html>
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<!-- polyfill -->
<script src="static/Base64.js" type="text/javascript"></script>
<script src="static/Base64binary.js" type="text/javascript"></script>
<script src="static/WebAudioAPI.js" type="text/javascript"></script>
<!-- midi.js package -->
<script src="static/audioDetect.js" type="text/javascript"></script>
<script src="static/gm.js" type="text/javascript"></script>
<script src="static/loader.js" type="text/javascript"></script>
<script src="static/player.js" type="text/javascript"></script>
<script src="static/event.js" type="text/javascript"></script>
<script src="static/plugin.audiotag.js" type="text/javascript"></script>
<script src="static/plugin.webaudio.js" type="text/javascript"></script>
<script src="static/plugin.webmidi.js" type="text/javascript"></script>
<!-- jasmid just in case-->
<script src="static/stream.js"></script>
<script src="static/midifile.js"></script>
<script src="static/replayer.js"></script>
<!-- utils -->
<script src="static/dom_request_xhr.js" type="text/javascript"></script>
<script src="static/dom_request_script.js" type="text/javascript"></script>
</head>
<body>
<script type="text/javascript">
window.onload = function () {
MIDI.loadPlugin({
soundfontUrl: "static/",
instrument: "acoustic_grand_piano",
callback: function() {
MIDI.Player.loadFile("static/mario.mid", MIDI.Player.start);
}
});
}
</script>
</body>
</html>
答案 0 :(得分:0)
我今天试了最新版本。我使用Linux mint os。这些例子提供了工作。注意到这些例子在loadPlugin调用中有“onsuccess”而不是“callback”。改变了它并且它起作用了。顺便说一句,我没有完全使用你的文件,因为我的路径不同。我在示例下从MIDIPlayer.html复制了head部分。 此外,如果您在没有Web服务器的情况下对文件系统进行测试,则浏览器可能不允许使用ajax访问其他文件,如midi文件。铬会发生这种情况。我用的是Firefox。调试控制台在声音paino js中显示语法错误,但看起来它仍然有效。 间歇性地,声音无法播放,当我打开声音控制台时,我看到此特定应用实例(浏览器)的音量设置为零。我增加它,我可以听到声音。不知道为什么会这样。 MIDI.js的另一个问题似乎是它不支持所有midi属性。例如,它无法播放带有歌词的midi文件。但是,jasmid可以处理它。我的代码如下:
<!DOCTYPE html>
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>MIDI.js - Sequencing in Javascript.</title>
<!-- midi.js css -->
<link href="./css/MIDIPlayer.css" rel="stylesheet" type="text/css" />
<!-- shim -->
<script src="../inc/shim/Base64.js" type="text/javascript"></script>
<script src="../inc/shim/Base64binary.js" type="text/javascript"></script>
<script src="../inc/shim/WebAudioAPI.js" type="text/javascript"></script>
<script src="../inc/shim/WebMIDIAPI.js" type="text/javascript"></script>
<!-- jasmid package -->
<script src="../inc/jasmid/stream.js"></script>
<script src="../inc/jasmid/midifile.js"></script>
<script src="../inc/jasmid/replayer.js"></script>
<!-- midi.js package -->
<script src="../js/midi/audioDetect.js" type="text/javascript"></script>
<script src="../js/midi/gm.js" type="text/javascript"></script>
<script src="../js/midi/loader.js" type="text/javascript"></script>
<script src="../js/midi/plugin.audiotag.js" type="text/javascript"></script>
<script src="../js/midi/plugin.webaudio.js" type="text/javascript"></script>
<script src="../js/midi/plugin.webmidi.js" type="text/javascript"></script>
<script src="../js/midi/player.js" type="text/javascript"></script>
<script src="../js/midi/synesthesia.js" type="text/javascript"></script>
<!-- utils -->
<script src="../js/util/dom_request_xhr.js" type="text/javascript"></script>
<script src="../js/util/dom_request_script.js" type="text/javascript"></script>
<!-- includes -->
<script src="./inc/timer.js" type="text/javascript"></script>
<script src="./inc/colorspace.js" type="text/javascript"></script>
<script src="./inc/event.js" type="text/javascript"></script>
</head>
<body>
<script type="text/javascript">
window.onload = function () {
MIDI.loadPlugin({
soundfontUrl: "./soundfont/",
instrument: "acoustic_grand_piano",
onsuccess: function() {
MIDI.Player.loadFile("minute_waltz.mid", MIDI.Player.start);
}
});
}
</script>
</body>
</html>
答案 1 :(得分:-1)
使用https://github.com/surikov/SSSynthesiser.js
它可以访问数以千计的虚拟乐器。请参阅项目页面上的示例