LoginSignup
2
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-04-05

作ろうと思ったきっかけ

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

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

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

コインの音

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

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

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

【鳴らしてみた様子】

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

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

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

const Obniz = require('obniz');
var obniz = new Obniz("OBNIZ-ID");  // OBNIZ-IDに自分のIDを入れます
obniz.onconnect = async function () {

  // スピーカーを呼び出す
  var speaker = 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); // ドの音
    } else if (state === "none") {
      // none で押してないとき
      obniz.display.clear();  // 一旦クリアする
      // スピーカーで音を鳴らさない stop
      speaker.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オクターブあげてみましょう。

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

余談

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

最終的なソースコード

const Obniz = require('obniz');

var obniz = new Obniz("Obniz_ID");  // Obniz_IDに自分のIDを入れます
obniz.onconnect = async function () {

  // スピーカーを呼び出す
  var speaker = obniz.wired("Speaker", {signal:0, gnd:1});

  // ディスプレイ処理
  obniz.display.clear();  // 一旦クリアする
  obniz.display.print("Hello obniz!");  // Hello obniz!という文字を出す

  // スイッチの反応を常時監視
  obniz.switch.onchange = async function(state) {
    if (state === "push") {
      // 押されたとき
      console.log("pushed");
      // ディスプレイ処理
      obniz.display.clear();  // 一旦クリアする
      obniz.display.print("pushed");  // pushed という文字を出す
      // 音を鳴らす
      speaker.play(1975.53);     // シ
      await obniz.wait(300);   // Wait
      speaker.play(2637.02);    // ミ
      await obniz.wait(600);   // Wait
      speaker.stop();
    } else if (state === "none") {
      // none で押してないとき
      obniz.display.clear();  // 一旦クリアする
      // スピーカーで音を鳴らさない stop
      speaker.stop();
    } else if (state === "left") {
      speaker.play(1318.51); // ミ
    }
  }
}
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0