M5Stack用MIDIシンセサイザユニットのサンプルの 1つを使って、ピアノの音を鳴らしてみたという話です。
それを試している時の様子は以下のとおりです。
この時、デバイスは、「M5Stack CoreS3 SE + M5Stack CoreS3用バッテリーボトム の組み合わせ」を利用し、開発には Arduino IDE を使っています。
今回使うデバイス
M5Stack用MIDIシンセサイザユニット
まずは、音を鳴らすために使うデバイス「M5Stack用MIDIシンセサイザユニット」についてです。
このデバイスは、自分は以下から入手しました。
●M5Stack用MIDIシンセサイザユニット(SAM2695) — スイッチサイエンス
https://www.switch-science.com/products/9510
以下は、公式のドキュメント・GitHub のリポジトリです。
●m5-docs
https://docs.m5stack.com/en/unit/Unit-Synth
●m5stack/M5Unit-Synth
https://github.com/m5stack/M5Unit-Synth/tree/main
Arduino IDE で使うライブラリ
今回の開発で使う Arduino IDE では、以下のライブラリを使います。
●M5UnitSynth - Arduino Reference
https://www.arduino.cc/reference/en/libraries/m5unitsynth/
ライブラリの最新バージョンは「1.0.1」のようです。
利用するポート
今回使う「M5Stack用MIDIシンセサイザユニット」のポートの種類について補足しておきます。公式ドキュメントで示されているとおり「RORT.C.UART」になります。
ユニットを接続するデバイス
上記の M5Stack用MIDIシンセサイザユニットを接続するデバイスについても書いておきます。
M5Stack用MIDIシンセサイザユニットを使うには、上記のとおり「RORT.C.UART」に対応している必要があります。
自分が持っているデバイスで、これに対応したものはいくつかありますが、今回は「M5Stack CoreS3 SE + M5Stack CoreS3用バッテリーボトム の組み合わせ」を使います。
ちなみに、これらに関しても自分の入手元は上記のユニットと同じで以下です。
M5Stack CoreS3 SE は PORT.A のみしか使えませんが、M5Stack CoreS3用バッテリーボトムのほうでは以下のとおり PORT.C が使えます。
●M5GO Battery Bottom3 (for CoreS3 only) | m5stack-store
https://shop.m5stack.com/products/m5go-battery-bottom3-for-cores3-only?variant=44174704804097
この PORT.C のコネクタに M5Stack用MIDIシンセサイザユニットをつなぎます。
プログラムについて
今回、動作させるサンプルとして、以下にある公式サンプルを使います。
●M5Unit-Synth/examples at main · m5stack/M5Unit-Synth
https://github.com/m5stack/M5Unit-Synth/tree/main/examples
とりあえず、以下のピアノの音を鳴らすサンプルを選んでみました。
●M5Unit-Synth/examples/piano/piano.ino at main · m5stack/M5Unit-Synth
https://github.com/m5stack/M5Unit-Synth/blob/main/examples/piano/piano.ino
基本的には上記のサンプルそのままですが、ピンの番号だけ書きかえが必要です。
以下のとおり、PORT.C は「TXC: G17、RXD: G18」となっています。
●m5-docs
https://docs.m5stack.com/en/module/M5GO3%20Bottom
これに合わせて、サンプルの以下の部分を少し変更します。
上記に対応したプログラム全体を示します。
/**
* @file piano.ino
* @author SeanKwok (shaoxiang@m5stack.com)
* @brief Unit Synth Piano Example
* @version 0.2
* @date 2024-04-07
*
*
* @Hardwares: M5Core + Unit Synth
* @Platform Version: Arduino M5Stack Board Manager v2.1.0
* @Dependent Library:
* M5UnitSynth: https://github.com/m5stack/M5Unit-Synth
*/
#include "M5UnitSynth.h"
M5UnitSynth synth;
void setup() {
Serial.begin(115200);
Serial.println("Unit Synth Piano");
synth.begin(&Serial2, UNIT_SYNTH_BAUD, 18, 17);
synth.setInstrument(0, 0, GrandPiano_1); // synth piano 1
}
void loop() {
synth.setNoteOn(0, NOTE_C4, 127);
delay(1000);
synth.setNoteOn(0, NOTE_D4, 127);
delay(1000);
synth.setNoteOn(0, NOTE_E4, 127);
delay(1000);
synth.setNoteOn(0, NOTE_F4, 127);
delay(1000);
synth.setNoteOn(0, NOTE_G4, 127);
delay(1000);
synth.setNoteOn(0, NOTE_A4, 127);
delay(1000);
synth.setNoteOn(0, NOTE_B4, 127);
delay(1000);
synth.setNoteOn(0, NOTE_C5, 127);
delay(1000);
}
これを書きこんで音を鳴らしてみた様子は、冒頭に掲載した動画の通りです。
【追記】 M5StickC Plus2 も試す
記事を公開した後に M5StickC Plus2 でも試したので、情報を残しておきます。
プログラムで変更した部分は、以下の通りです。
// synth.begin(&Serial2, UNIT_SYNTH_BAUD, 18, 17);
synth.begin(&Serial2, UNIT_SYNTH_BAUD, 33, 32);
ピン番号は、本体裏の記載を参照しました。