Web MIDI APIを使ってみる

Web MIDI APIを使ってみました。

Web MIDI APIとは

Web MIDI APIとは、ブラウザとMIDI機器をつなぐものです。
HTML5の一部として、策定が進められています。

2013年10月13日現在
現在実装しているブラウザはGoogleChromeMac版のみです。

他のブラウザでも,Jazz-puluginというのを使えばMIDI機器をつなげるようになるらしいです。

使ってみる

http://www.w3.org/TR/webmidi/
大体はここを見ればわかります。

とりあえずこんなかんじに書いてみました。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>Web Midi API TEST</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <script>
        $(function(){
            var midi = null;
            var inputs =null;

            navigator.requestMIDIAccess().then( onMIDISuccess, onMIDIFailure);
            function onMIDISuccess(midiAccess) {
                console.log( "MIDI ready!" );
                midi = midiAccess;

                inputs = midi.inputs()

                if(inputs.length==0){
                    $("#info").append("<p>利用可能なMIDIデバイスが見つかりませんでした</p>");
                }else {
                    for( var i=0; i<inputs.length; i++){
                        $("#device").append('<option value="'+ i +'">' + inputs[i]["name"]  + '</option>');
                    }
                }
            }
            function onMIDIFailure(msg) {
                console.log( "Failed to get MIDI access - " + msg );
            }

            function onMIDIMessage( event ) {
                console.log(event);
                var str = "MIDI message received [" + event.data.length + " bytes]: ";
                for (var i=0; i<event.data.length; i++) {
                    str += "0x" + event.data[i].toString(16) + " " ;
                }
                console.log(str);
            }

            $("#device").on("change", function(){
                var port = $("#device option:selected").val();
                console.log(port);
                inputs[port].onmidimessage = onMIDIMessage;
            });

        });
    </script>
</head>
<body>
    <h1>Web Midi API TEST</h1>
    <div id="info"></div>
    
    <select id="device">
    <option>選択してください</option>
    </select>

</body>
</html>

MIDI機器からの入力を受け取って、console.logで出力しています。
実際にMIDI機器をつないで、信号を送ったりすると、

MIDI message received [3 bytes]: 0x90 0x3c 0x60  
MIDI message received [3 bytes]: 0x80 0x3c 0x40  

というようなログが出力されます。
1バイト目は メッセージの種類
2バイト目は ノート番号
3バイト目は ベロシティ
です。

1バイト目のメッセージの種類というのは
0x90ならノートオン(キーボードを押した時)
0x80ならノートオフ(キーボードを話した時)
といったようなものです。

2バイト目はノートの番号です。
一般的にピアノであれば中央の「ド」の音が0x3c (60)になると思います。

3バイト目はベロシティです。
音の強弱の情報で、
1~127の間で、高いほうが強い音となります。

実際に作った確認のページはこちら
http://mintsu-dev.com/webmidiapitest/

Web MIDI API を使ってみんなでセッションできるサイトを作ってみました
Webduetto