obnizのサンプルプログラムを試してみた2（圧電スピーカー）

#概要
- [obnizのサンプルプログラムを試してみた](https://qiita.com/getapojim/items/045441c4ef71ba9efa86)の圧電スピーカー編．
- [「Parts Library for obniz」](https://obniz.io/sdk/parts)に掲載されているものをそのままやってみただけ．
- サンプルに「指定した周波数の音を鳴らします」とあったので、周波数を変えながら音を出してみた．
- ドレミファソラシドをできるように追記．

#試したパーツ
- 圧電スピーカー

#圧電スピーカー
周波数を1000hzから100ずつ下げながら、0.5秒ずつ鳴らす．
<img width="225" alt="obniz圧電スピーカー" src="https://qiita-image-store.s3.amazonaws.com/0/85506/a2b3b874-2730-3e29-667e-5f1f63e8b2aa.jpeg">

```html:private_speaker.html
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
  <script src="https://unpkg.com/obniz@1.9.2/obniz.js" crossorigin="anonymous"></script>
</head>
<body>

<div id="obniz-debug"></div>
<h1>obniz instant html</h1>
<div id="print"></div>

<script>
var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {

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

speaker.play(1000); //1000hz
await obniz.wait(500);
speaker.play(900); //900hz
await obniz.wait(500);
speaker.play(800); //800hz
await obniz.wait(500);
speaker.play(700); //700hz
await obniz.wait(500);
speaker.play(600); //600hz
await obniz.wait(500);
speaker.stop();
  
}
  
</script>
</body>
</html>
```

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">obnizで圧電スピーカーから音を出す<a href="https://t.co/kerUMPc68k">https://t.co/kerUMPc68k</a><a href="https://twitter.com/hashtag/obniz?src=hash&amp;ref_src=twsrc%5Etfw">#obniz</a> <a href="https://twitter.com/hashtag/IoT?src=hash&amp;ref_src=twsrc%5Etfw">#IoT</a> <a href="https://twitter.com/hashtag/%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C?src=hash&amp;ref_src=twsrc%5Etfw">#電子工作</a> <a href="https://twitter.com/hashtag/JavaScript?src=hash&amp;ref_src=twsrc%5Etfw">#JavaScript</a> <a href="https://twitter.com/hashtag/%E5%9C%A7%E9%9B%BB%E3%82%B9%E3%83%94%E3%83%BC%E3%82%AB%E3%83%BC?src=hash&amp;ref_src=twsrc%5Etfw">#圧電スピーカー</a></p>&mdash; m (@getapojim) <a href="https://twitter.com/getapojim/status/1027658460765204480?ref_src=twsrc%5Etfw">2018年8月9日</a></blockquote>


#追記　ドレミファソラシド
周波数を変えていくと音が変わることが分かったので、どうすればドレミファソラシドになるのか調べてみた．


> ド 262Hz レ 294Hz ミ 330Hz ファ 349Hz ソ 392Hz ラ 440Hz シ 494Hz ド 523Hz

だそうです．
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1053868595


やってみた．
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">obnizで圧電スピーカーからドレミファソラシド<a href="https://t.co/LPaQJ8GcgR">https://t.co/LPaQJ8GcgR</a><a href="https://twitter.com/hashtag/obniz?src=hash&amp;ref_src=twsrc%5Etfw">#obniz</a> <a href="https://twitter.com/hashtag/IoT?src=hash&amp;ref_src=twsrc%5Etfw">#IoT</a> <a href="https://twitter.com/hashtag/%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C?src=hash&amp;ref_src=twsrc%5Etfw">#電子工作</a> <a href="https://twitter.com/hashtag/JavaScript?src=hash&amp;ref_src=twsrc%5Etfw">#JavaScript</a> <a href="https://twitter.com/hashtag/%E5%9C%A7%E9%9B%BB%E3%82%B9%E3%83%94%E3%83%BC%E3%82%AB%E3%83%BC?src=hash&amp;ref_src=twsrc%5Etfw">#圧電スピーカー</a></p>&mdash; m (@getapojim) <a href="https://twitter.com/getapojim/status/1027659182210670592?ref_src=twsrc%5Etfw">2018年8月9日</a></blockquote>

```html:private_speaker_doremi.html
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
  <script src="https://unpkg.com/obniz@1.9.2/obniz.js" crossorigin="anonymous"></script>
</head>
<body>

<div id="obniz-debug"></div>
<h1>obniz instant html</h1>
<div id="print"></div>

<script>
var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {

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

  // tone()関数
  // frequency　：　周波数(Hz)
  // duration 　：　音を鳴らす時間(ミリ秒)
  async function tone(frequency, duration){
    speaker.play(frequency);
    await obniz.wait(duration);
    speaker.stop();
  }
  
  // ドレミファソラシドの周波数データを配列化
  var sounds = ['262', '294', '330', '349', '392', '440', '494', '523'];

  // tone()関数を使って演奏する
  for(var i=0; i<sounds.length; i++){
    tone(sounds[i], 500);
  }

}
  
</script>
</body>
</html>
```

speaker.play()をズラズラ書いていくのも何なので、演奏データは配列化し、演奏処理は関数にした．
「演奏」と書くとなんだか大げさな気がしますが。。。

以下の投稿が参考になった．
[[WIP] Arduinoで音を出したい（メモ）](https://qiita.com/tadfmac/items/7fb26596fe6240959c48)



#参考
obniz
https://obniz.io/

[WIP] Arduinoで音を出したい（メモ）
https://qiita.com/tadfmac/items/7fb26596fe6240959c48

Arduino Reference
tone()
https://www.arduino.cc/reference/en/language/functions/advanced-io/tone/