M5Stackでビープ音の音量調節を行う

beep関数で音を鳴らすと音量が大きすぎる

M5Stackで一通り機能を試してみよう!と音を出そうとして、とりあえず一番簡単なbeep関数で音を鳴らしてみると、部屋に

ピー!!

と大きめの音が鳴ってびっくりしました。

今回はその解決方法を探っていきたいと思います。

ヘッダファイルの中身を見てみる

短いのでとりあえずM5Stack.hの中でスピーカーに関係するところを全て載せます。

Speaker.cpp

ソースコードのリンク(2019年9月現在)

このソースコードから

  1. スピーカーピンとトーンピンがある (8行目 void SPEAKER::begin )
  2. スピーカーピンには音量がアナログで書き込めるが、トーンピンには周波数がアナログで書き込める(21行目 void SPEAKER::tone, 64行目void SPEAKER::playMusic)

ということがわかります。つまり、playMusic関数では音量を調整できますがbeep関数では音量を調整できないようです。ビープ音の音量を調整するために、3つの方法を検討しました。

解決法① setVolume関数を使う

せっかくsetVolome関数で音量調整ができるので、それを活用していきましょう。

setVolumeで音量を11にして、正弦波の音データを生成してそれをplayMusicで流します。

以下サンプルコード

playBeepでmakeBeepを呼び出し、音データを生成し、playMusicで再生しています。

解決法② 音源を小さくする

それでもまだ音が大きいと感じたのでさらに音を小さくしていきます。

音源データの振幅自体を小さくしていけばさらに音を小さくすることができます。

以下サンプルコード

vが振幅を表しています。

解決法③ ハードウェア的解決

そもそもスピーカーにつながっているアンプの増幅率が大きすぎるのが原因らしいので、そこに抵抗を入れたりすると音量を小さくすることができるようです。(未検証)

さらに、原始的な方法としてスピーカーにテープなどを貼ると音量を小さくできます。

 参考サイト M5Stackのスピーカボリューム調整機構

まとめ

そもそもスピーカーの性能があまり良くないので難しいですが、playMusic関数を用いることでなんとか音は小さくできました。

次は音を出していないときにも勝手に出ている音をなんとかしたいですね。

この記事をシェアする