🦌
obnizで赤鼻のトナカイに「ウィ〜ウィッシュアメリクリ」歌わせる
もいせん アドベントカレンダー 2021/12/02
クリスマスツリーのオーナメントをobnizで改造してみる
今回は、クリスマスのオーナメントを改造してみます。
トナカイの鼻を赤く光らせ、クリスマスソングを歌わせるぞ!
まずは音程を確かめる
今回は「ウィ〜ウィッシュアメリクリスマス」を歌ってもらいます。
ファのみシャープが付く音階・ト長調(ソラシドレミファ#ソ)で、下記の通りです。
「レソソラソファミミ ミララシラソファレ レシシドシラソミ レレミラファソ」
ウィ〜ウィッシュアメリクリスマス♪の周波数を調べる
それぞれの音の周波数を調べます。
配列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