クリエイター手抜きプロジェクト[584]IoT M5 Stack編サウンドの制御/古籏一浩

投稿:  著者:  読了時間:8分(本文:約3,900文字)



今回は、M5 Stackでサウンドを扱ってみます。M5 Stack本体にはスピーカーが内蔵されていますので、外部にスピーカーをつなぐ必要はありません。M5 Stackのサウンドを扱うためのブロックは以下の3つしかありません。

・指定した音を指定した時間鳴らす
・スピーカーの音量を設定する
・指定した音階を指定した時間鳴らす

マイクロビットのように、あらかじめ何か曲が用意されているわけではありません。何か曲を演奏したりするのは、ブロックを使うと大変そうです。曲を演奏するならブロックを使わずに、Pythonを使って書いた方がよさそうです。

ということで、こういう場合いつもの、デバイスを傾けると周波数が変わる楽器みたいなものを作ります。

その前段階として、M5 Stack本体から音が鳴るか確認してみましょう。





M5 Stackで音を鳴らすには、ハードウェアのカテゴリにあるスピーカーのカテゴリにあるブロックの中から、[ [Low A]の音を[1]拍鳴らす ]ブロックを配置します。

また、スピーカーの音量を設定するブロックも配置します。この音量を設定するブロックは[ Setup ]ブロックの下にくっつけます。音量設定のブロックの下に[ [Low A]の音を[1]拍鳴らす ]ブロックをくっつけます。

音の高さは[ [Low A]の音を[1]拍鳴らす ]ブロックの、ポップアップメニューから選択できます。Low Aでは音が低いので、Middle Aにして鳴らしてみます。

実行ボタンを押すと、M5 Stack本体からピッ! という音が一回鳴ります。

Pythonのコードだと、以下のようになります。

--------------------------------------------------------------------------
from m5stack import *
from m5ui import *
clear_bg(0x222222)
btnA = M5Button(name="ButtonA", text="ButtonA", visibility=False)
btnB = M5Button(name="ButtonB", text="ButtonB", visibility=False)
btnC = M5Button(name="ButtonC", text="ButtonC", visibility=False)
speaker.volume(1)
speaker.sing(448, 1)
--------------------------------------------------------------------------

それでは次に、指定した周波数の音を鳴らしてみましょう。ハードウェアのカテゴリにあるスピーカーのカテゴリから[ スピーカーを鳴らす 音の高さ [1800]Hz [200]ミリ秒間 ]ブロックを配置します。音の高さを440、長さを3000ミリ秒に設定します。

Pythonのコードだと以下のようになります。

--------------------------------------------------------------------------
from m5stack import *
from m5ui import *
clear_bg(0x222222)
btnA = M5Button(name="ButtonA", text="ButtonA", visibility=False)
btnB = M5Button(name="ButtonB", text="ButtonB", visibility=False)
btnC = M5Button(name="ButtonC", text="ButtonC", visibility=False)
speaker.volume(1)
speaker.tone(440, 3000)
--------------------------------------------------------------------------

実行ボタンを押すと、M5 Stack本体から3秒間、440Hzの高さの音が鳴ります。

それでは最後に、M5 Stackの傾に応じて鳴る周波数が変わるようにしてみます。M5 Stackの傾きの値は前々回、前回とも使用した[ Get Y ACC ]ブロックを使います。このブロックは、ハードウェアのカテゴリのIMUカテゴリの中にあります。

まず、傾きの値を入れる変数freqを用意します。変数のカテゴリにある「変数の作成」ボタンをクリックします。表示されるダイアログでfreqと入力します。

この変数freqに[ Get Y ACC ]の値の絶対値を取ります。マイナスもしくは0の周波数を指定するとエラーになってしまうためです。

次に値を10000倍します。これで、だいたい人間の耳に聞こえる周波数の範囲になります。音の範囲を変えたい場合は、この値を変更してください。

あとは、[ スピーカーを鳴らす 音の高さ [1800]Hz [200]ミリ秒間 ]ブロックで、音の高さに[ Convert to int [freq] ]をはめこみます。音の長さは100に設定します。これで完成です。

Pythonのコードだと、以下のようになります。

--------------------------------------------------------------------------
from m5stack import *
from m5ui import *
from mpu6050 import MPU6050
import i2c_bus
clear_bg(0x222222)
imu = MPU6050(i2c_bus.get(i2c_bus.M_BUS))
btnA = M5Button(name="ButtonA", text="ButtonA", visibility=False)
btnB = M5Button(name="ButtonB", text="ButtonB", visibility=False)
btnC = M5Button(name="ButtonC", text="ButtonC", visibility=False)
label1 = M5TextBox(25, 26, "Text", lcd.FONT_Default, 0xFFFFFF)
import math
freq = None
speaker.volume(1)
while True:
freq = math.fabs(imu.acceleration[1])
freq = freq * 10000
speaker.tone(int(freq), 100)
wait(0.001)
--------------------------------------------------------------------------

実行ボタンを押して、M5 Stack本体を傾けると音の周波数が変わります。さすがに、今回のプログラムで何か演奏するのは無理がありますので、ボタンを押したら周波数の範囲が変わるようにしたり、いろいろ工夫してみてください。


【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/

二か月ほど待って、ようやくPanasonicの4Kカメラが手元に。AG-CX350というビデオカメラ。初期ロットの時に注文すればよかったのかもしれないけど、とにかく4K/60Pのカメラがなかったため仕方なくといったところ。

今年は8Kのカメラが出るみたいなのですが、実際に出てみないとわかりません。とりあえず、業務用の4K/60Pカメラで急場を凌ごうという感じですが、このAG-CX350というカメラ思ったよりもいい感じで撮影できます。ここらへんは、また別の機会にでも書こうと思います。

・InDesign自動化サンプルプログラム逆引きリファレンス上/下
https://www.amazon.co.jp/dp/4844396846/
https://www.amazon.co.jp/dp/4844396854/

・創って学ぼうプログラミング
https://news.mynavi.jp/series/makeprogram

・みんなのIchigoLatte入門 JavaScriptで楽しむゲーム作りと電子工作
https://www.amazon.co.jp/dp/4865940936
[正誤表]
http://www.openspc2.org/book/error/ichigoLatte/

・After Effects自動化サンプルプログラム 上巻、下巻
https://www.amazon.co.jp/dp/4844397591
https://www.amazon.co.jp/dp/4844397605

・IchigoLatteでIoT体験
https://www.amazon.co.jp/dp/B06X3X1CHP
http://digiconcart.com/dccartstore/cart/info/2561/218591

・みんなのIchigoJam入門 BASICで楽しむゲーム作りと電子工作
http://www.amazon.co.jp/dp/4865940332/

・Photoshop自動化基本編
http://www.amazon.co.jp/dp/B00W952JQW/

・Illustrator自動化基本編
http://www.amazon.co.jp/dp/B00R5MZ1PA/

・4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/

・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/