M5Stackに関する書籍やネット上の記事を読んでいると、M5Stackの内蔵スピーカーの音量を調整する「M5.Speaker.setVolume()」関数では、「M5.Speaker.tone()」関数などの音量を変えることはできないと書かれています。
しかし、2020年4月にリリースされたM5StackライブラリのV0.3.0以降では、「M5.Speaker.tone()」関数の音量を、「M5.Speaker.setVolume()」関数で変えることができるようです。
今回は、「M5.Speaker.tone()」関数を使って音を鳴らしてみようと思います。
まずは、「M5.Speaker.setVolume()」関数で、実際に音量が変わることを確認します。
#include <M5Stack.h> int volume = 1; void playTone() { M5.Lcd.fillScreen(BLACK); M5.Lcd.setCursor(0, 0); M5.Lcd.print("Volume : "); M5.Lcd.println(volume); M5.Speaker.setVolume(volume); M5.Speaker.tone(440, 200); } void setup() { M5.begin(); M5.Lcd.setTextSize(3); } void loop() { M5.update(); if(M5.BtnA.wasPressed()) { volume--; playTone(); } if(M5.BtnC.wasPressed()) { volume++; playTone(); } }
Aボタンを押すと、音量を 1 だけ小さくして、「プッ」と音を鳴らします。
Cボタンを押すと、音量を 1 だけ大きくして、「プッ」と音を鳴らします。
音量が 0 では音が鳴らず、音量を大きくしていくと、だんだん音が大きくなります。
ただし、音量を 11 にすると、音が鳴らなくなります。
つまり、「M5.Speaker.setVolume()」関数では、音量を 0 〜 10 の間で調整できることになります(数値が大きいほど音量も大きい)。
次に、複数のトーン音を、順番に鳴らしてみます。
#include <M5Stack.h> void setup() { M5.begin(); M5.Lcd.setTextSize(3); M5.Speaker.setVolume(3); } void loop() { M5.update(); if(M5.BtnA.wasPressed()) { M5.Speaker.tone(659, 200); delay(200); M5.Speaker.tone(523, 200); } if(M5.BtnC.wasPressed()) { M5.Speaker.tone(440, 100); delay(100); M5.Speaker.mute(); delay(100); M5.Speaker.tone(440, 100); delay(100); M5.Speaker.mute(); delay(100); M5.Speaker.tone(440, 100); } }
Aボタンを押すと「ピンポン」と鳴ります。何らかの処理がOKとなったときに鳴らす音をイメージしています。
Cボタンを押すと「プップップ」と鳴ります。何らかの処理がNGとなったときに鳴らす音をイメージしています。
M5Stackのスピーカーは扱いにくいという印象があり、これまであまり活用してきませんでしたが、このぐらいお気軽に使えるのであれば、色々と使い道が広がりそうです。
なお、私がM5Stack、M5StickCの使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。
ごく基本的なところから、かなり複雑なスケッチや、ネットワーク接続など、比較的高度なものまで、つまづかずに読み進めていけるような構成になっており、大変わかりやすい本です。
このサイトで書いている、M5Stackシリーズ(M5Stack、M5StickCなど)に関するブログ記事を、「さとやまノート」という別のブログページに、あらためて整理してまとめました。
他のM5Stackシリーズの記事にも興味のある方は「さとやまノート」をご覧ください。