🦌

obnizで赤鼻のトナカイに「ウィ〜ウィッシュアメリクリ」歌わせる

2021/12/02に公開

もいせん アドベントカレンダー 2021/12/02

クリスマスツリーのオーナメントをobnizで改造してみる

今回は、クリスマスのオーナメントを改造してみます。
トナカイの鼻を赤く光らせ、クリスマスソングを歌わせるぞ!

まずは音程を確かめる

今回は「ウィ〜ウィッシュアメリクリスマス」を歌ってもらいます。
ファのみシャープが付く音階・ト長調(ソラシドレミファ#ソ)で、下記の通りです。

「レソソラソファミミ ミララシラソファレ レシシドシラソミ レレミラファソ」

ウィ〜ウィッシュアメリクリスマス♪の周波数を調べる

それぞれの音の周波数を調べます。
https://www.aihara.co.jp/~taiji/browser-security/js/equal_temperament.html

配列otoに、それぞれの周波数を入れます。

var oto = [830.609,880.000,987.767,1046.502,1174.659,1318.510,1479.978,1567.982,1760.000,1975.533,2093.005,2349.318,2637.020,2959.955,3135.963]//ソラシドレミファ#ソラシドレミファソ
        /*
        ソ ラ シ ド レ ミ ファ# ソ ラ シ ド レ
        0 1  2   3  4   5  6     7   8  9  10  11

        レソソラソファミミ ミララシラソファレ レシシドシラソミ レレミラファソ
        */

obnizの準備をする

スピーカー(signal:0, gnd:1)とLED(gnd:11, vcc: 10, din: 9)をつなぎます。

使ったパーツのライブラリ

obnizのコードは下記の通り

<html>
  <head>
    <script src="https://unpkg.com/obniz@3.x/obniz.js"></script>
  </head>
  <body>
    <script>

      var obniz = new Obniz("OBNIZ_ID_HERE"); // ここに自身のobniz IDを入力する

      obniz.onconnect = async function () { 
        // Javascript Example
        var led = obniz.wired("WS2811", {gnd:11, vcc: 10, din: 9});
        led.rgb(220, 20, 60); // Yellow
        
        var oto = [830.609,880.000,987.767,1046.502,1174.659,1318.510,1479.978,1567.982,1760.000,1975.533,2093.005,2349.318,2637.020,2959.955,3135.963]//ソラシドレミファ#ソラシドレミファソ
        /*
        ソ ラ シ ド レ ミ ファ# ソ ラ シ ド レ
        0 1  2   3  4   5  6     7   8  9  10  11

        レソソラソファミミ ミララシラソファレ レシシドシラソミ レレミラファソ
        */

        var speaker = obniz.wired("Speaker", {signal:0, gnd:1});

        speaker.play(oto[4]); //レ
        await obniz.wait(1000);
        speaker.stop();
        speaker.play(oto[7]); //ソ
        await obniz.wait(1000);
        speaker.stop();
        await obniz.wait(100);
        speaker.play(oto[7]); //ソ
        await obniz.wait(500);
        speaker.stop();
        speaker.play(oto[8]); //ラ
        await obniz.wait(500);
        speaker.stop();
        speaker.play(oto[7]); //ソ
        await obniz.wait(500);
        speaker.stop();
        speaker.play(oto[6]); //ファ#
        await obniz.wait(500);
        speaker.stop();
        speaker.play(oto[5]); //ミ
        await obniz.wait(1000);
        speaker.stop();
        await obniz.wait(100);
        speaker.play(oto[5]); //ミ
        await obniz.wait(1000);
        speaker.stop();
        await obniz.wait(100);


        speaker.play(oto[5]); //ミ
        await obniz.wait(1000);
        speaker.stop();
        speaker.play(oto[8]); //ラ
        await obniz.wait(1000);
        speaker.stop();
        await obniz.wait(100);

        speaker.play(oto[8]); //ラ
        await obniz.wait(500);
        speaker.stop();
        speaker.play(oto[9]); //シ
        await obniz.wait(500);
        speaker.stop();
        speaker.play(oto[8]); //ラ
        await obniz.wait(500);
        speaker.stop();
        speaker.play(oto[7]); //ソ
        await obniz.wait(500);
        speaker.stop();
        speaker.play(oto[6]); //ファ#
        await obniz.wait(1000);
        speaker.stop();
        speaker.play(oto[4]); //レ
        await obniz.wait(1000);
        speaker.stop();
        await obniz.wait(100);


        speaker.play(oto[4]); //レ
        await obniz.wait(1000);
        speaker.stop();
        speaker.play(oto[9]); //シ
        await obniz.wait(1000);
        speaker.stop();
        await obniz.wait(100);

        speaker.play(oto[9]); //シ
        await obniz.wait(500);
        speaker.stop();
        speaker.play(oto[10]); //ド
        await obniz.wait(500);
        speaker.stop();
        speaker.play(oto[9]); //シ
        await obniz.wait(500);
        speaker.stop();
        speaker.play(oto[8]); //ラ
        await obniz.wait(500);
        speaker.stop();
        speaker.play(oto[7]); //ソ
        await obniz.wait(1000);
        speaker.stop();
        speaker.play(oto[5]); //ミ
        await obniz.wait(1000);
        speaker.stop();

        
        speaker.play(oto[4]); //レ
        await obniz.wait(500);
        speaker.stop();
        await obniz.wait(100);

        speaker.play(oto[4]); //レ
        await obniz.wait(500);
        speaker.stop();
        speaker.play(oto[5]); //ミ
        await obniz.wait(1000);
        speaker.stop();
        speaker.play(oto[8]); //ラ
        await obniz.wait(1000);
        speaker.stop();
        speaker.play(oto[6]); //ファ#
        await obniz.wait(1000);
        speaker.stop();
        speaker.play(oto[7]); //ソ
        await obniz.wait(1000);
        speaker.stop();
      }
    </script>
  </body>
</html>



完成!

完成しました。ちゃんと歌ってくれて、鼻も赤く光っています。
これは、かなり、かわいいのでは!!

Discussion