javascript - 我如何使用 midi.js 和 jasmid.js?

标签 javascript midi midi.js

我正在尝试在 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>

最佳答案

我今天试用了最新版本。我使用 Linux mint 操作系统。这些示例提供了工作。请注意,这些示例在 loadPlugin 调用中有“onsuccess”而不是“callback”。改变了它并且它起作用了。顺便说一句,我没有完全使用你的文件,因为我的路径不同。我从示例下的 MIDIPlayer.html 中复制了头部部分。 此外,如果您在没有网络服务器的文件系统上进行测试,浏览器可能不允许使用 ajax 访问其他文件,例如 midi 文件。 Chrome 会发生这种情况。我用过火狐。调试控制台在原声钢琴 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>

关于javascript - 我如何使用 midi.js 和 jasmid.js?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30407664/

相关文章:

javascript - 使用 Chord Diagram 可视化通行流量数据

javascript - 反向数组函数在 javascript 中不起作用

node.js - 根据频率创建音频文件

java - 画钢琴

Android Studio midi 合成器编译错误, Protocol Buffer

javascript - 动态加载 midi.js soundfonts

javascript - 将模态框放置在 Vue.js 的子组件中

javascript - 将类添加到具有特定父级 div 的元素(不应用具有相同父级名称的所有 div)