Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8833

obnizとブザーで兄弟配管工ゲームのコイン音を出してみた

$
0
0

作ろうと思ったきっかけ

  • ProtoOutoStudio 3回目授業でobnizに触れる
  • ブザーが面白かった

 兄弟配管工ゲームでは、ブロックを叩くとコインが出てきますよね。その時の効果音を再現してみようと思いました。

”あの”効果音の音階を調べてみた

コインの音

が、楽譜が読めないぞ....。オクターブもよく分からん....。
よし、トライ&エラーか???(音痴です)

まずはベースとなる”ド”を鳴らす

”ド”の音が何Hzか調べました。今回はこちらのサイトを参考に周波数を設定していきます。

【鳴らしてみた様子】

音を鳴らすだけなら、obnizのJavascriptパーツライブラリから試すと爆速で確認できます。

 obniz IDを入力し、Test Runをクリックすると、指定した音が鳴ります。デフォルトは1000Hzになっているので、鳴らしたい音に合わせるといいかなと思います。
image.png

 今回はobnizのボタンを押すと、指定の音が鳴るようなプログラムをNode.jsで動かしています。ソースコードはこちら。

constObniz=require('obniz');varobniz=newObniz("OBNIZ-ID");// OBNIZ-IDに自分のIDを入れますobniz.onconnect=asyncfunction(){// スピーカーを呼び出すvarspeaker=obniz.wired("Speaker",{signal:0,gnd:1});// ディスプレイ処理obniz.display.clear();// 一旦クリアするobniz.display.print("Hello obniz!");// Hello obniz!という文字を出す// スイッチの反応を常時監視obniz.switch.onchange=function(state){if(state==="push"){// 押されたときconsole.log("pushed");// ディスプレイ処理obniz.display.clear();// 一旦クリアするobniz.display.print("pushed");// pushed という文字を出す// 音を鳴らすspeaker.play(523.25);// ドの音}elseif(state==="none"){// none で押してないときobniz.display.clear();// 一旦クリアする// スピーカーで音を鳴らさない stopspeaker.stop();}}}

 上述のプログラムを使う際は、obniz.jsが必要となります。次のコードでインストールしておきましょう。

npm i obniz

あの効果音に使われている音を鳴らす

あの効果音は””と””の2音で構成されているようです。といっても”ミ”は1つ上のオクターブになっているようです。

では、音階表を参考にしてみると....。

image.png

”シ”は987.76Hz、”ミ”は1318.51Hzでつくります。

 音を鳴らしてみるとこのようになりました。

 よさそうですね!あとは自動化してタイミング調整だな....

組み合わせる

 音を順番に出力するのは簡単ですが、タイミングがわからない!!!!!!!!
楽譜を見ると次のようになっています。

image.png

 こちらのサイトを参考にしてみると、200bpsのテンポであると読み解きました。200bpsとは、1分間に200拍の速度です。つまり、

  1分間(60秒) ÷ 200 = 0.3秒

となります。楽譜をみると、どうやら”シ”と”ミ”の間は何も記号がないので1拍だとして、”ミ”の後は2拍ありそうなので0.6秒として作りました。

結果....。


 
 思っていたより音が低そうなので、1オクターブあげてみましょう。

 こちらの方が近そうですね!でも何か足りない気がしてくる....
何度も同じ音を聞いていると分からなくなってしまうなぁ。でもこれで良しとしますか。

余談

 圧電スピーカーで効果音作るの楽しそう....沼に片足いれはじめてしまうぅ!

最終的なソースコード

constObniz=require('obniz');varobniz=newObniz("Obniz_ID");// Obniz_IDに自分のIDを入れますobniz.onconnect=asyncfunction(){// スピーカーを呼び出すvarspeaker=obniz.wired("Speaker",{signal:0,gnd:1});// ディスプレイ処理obniz.display.clear();// 一旦クリアするobniz.display.print("Hello obniz!");// Hello obniz!という文字を出す// スイッチの反応を常時監視obniz.switch.onchange=asyncfunction(state){if(state==="push"){// 押されたときconsole.log("pushed");// ディスプレイ処理obniz.display.clear();// 一旦クリアするobniz.display.print("pushed");// pushed という文字を出す// 音を鳴らすspeaker.play(1975.53);// シawaitobniz.wait(300);// Waitspeaker.play(2637.02);// ミawaitobniz.wait(600);// Waitspeaker.stop();}elseif(state==="none"){// none で押してないときobniz.display.clear();// 一旦クリアする// スピーカーで音を鳴らさない stopspeaker.stop();}elseif(state==="left"){speaker.play(1318.51);// ミ}}}

Viewing all articles
Browse latest Browse all 8833

Trending Articles