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の使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。
ごく基本的なところから、かなり複雑なスケッチや、ネットワーク接続など、比較的高度なものまで、つまづかずに読み進めていけるような構成になっており、大変わかりやすい本です。