M5Atomic-EchoBase の RecordPlay サンプルプログラムを参考にしてください。接続するデバイスに応じて、プログラム内の使用する IO 設定を変更してください。本チュートリアルでは、主コントローラーとして AtomS3R を使用し、IO 設定は AtomS3 と一致しています。
// ATOMS3 ピンマップで EchoBase を初期化
echobase.init(16000 /*サンプリングレート*/, 38 /*I2C SDA*/, 39 /*I2C SCL*/, 7 /*I2S DIN*/, 6 /*I2S WS*/, 5 /*I2S DOUT*/,
8 /*I2S BCK*/, Wire);
echobase.setSpeakerVolume(50); // スピーカーの音量を 50% に設定
echobase.setMicGain(ES8311_MIC_GAIN_6DB); // マイクのゲインを 6dB に設定
// 録音
echobase.setMute(true);
delay(10);
echobase.record(buffer, RECORD_SIZE); // バッファに音声を録音
delay(100);
// 再生
echobase.setMute(false);
delay(10);
echobase.play(buffer, RECORD_SIZE); // バッファから音声を再生
delay(100);
M5Unified と M5GFX を基にした基本的な表示とボタン操作を追加し、ボタンを押すことで録音を開始し、録音後自動で再生するプログラムです。
/*
* SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
*
* SPDX-License-Identifier: MIT
*/
#include "M5Unified.h"
#include <Arduino.h>
#include <M5EchoBase.h>
#define RECORD_SIZE (1024 * 96) // 録音バッファのサイズを 96KB に設定
M5EchoBase echobase(I2S_NUM_0); // M5EchoBase クラスのインスタンスを作成
static uint8_t *buffer = nullptr; // 音声バッファを保持するポインタ
void setup()
{
M5.begin();
M5.Display.setFont(&fonts::FreeMonoBold9pt7b);
Serial.begin(115200);
// ATOMS3 ピンマップで EchoBase を初期化
echobase.init(16000 /*サンプリングレート*/, 38 /*I2C SDA*/, 39 /*I2C SCL*/, 7 /*I2S DIN*/, 6 /*I2S WS*/, 5 /*I2S DOUT*/,
8 /*I2S BCK*/, Wire);
// ATOM ピンマップで EchoBase を初期化する場合:
// echobase.init(16000 /*サンプリングレート*/, 25 /*I2C SDA*/, 21 /*I2C SCL*/, 23 /*I2S DIN*/, 19 /*I2S WS*/, 22 /*I2S
// DOUT*/, 33 /*I2S BCK*/, Wire);
echobase.setSpeakerVolume(50); // スピーカーの音量を 50% に設定
echobase.setMicGain(ES8311_MIC_GAIN_6DB); // マイクのゲインを 6dB に設定
buffer = (uint8_t *)malloc(RECORD_SIZE); // 録音バッファのメモリを確保
// メモリ確保が成功したか確認
if (buffer == nullptr) {
// メモリ確保に失敗した場合、無限ループに入る
while (true) {
M5.Display.println("Failed to allocate memory :(");
Serial.println("Failed to allocate memory :(");
delay(1000);
}
}
Serial.println("EchoBase ready, start recording and playing!");
M5.Display.println("Click! For Record and Play");
}
void loop()
{
M5.update();
if (M5.BtnA.wasClicked()) {
M5.Display.fillScreen(BLACK);
M5.Display.setCursor(0, 0);
M5.Display.println("Recording");
// 録音
echobase.setMute(true);
delay(10);
echobase.record(buffer, RECORD_SIZE); // バッファに音声を録音
delay(100);
M5.Display.println("Playing");
// 再生
echobase.setMute(false);
delay(10);
echobase.play(buffer, RECORD_SIZE); // バッファから音声を再生
delay(100);
M5.Display.println("Done");
}
}
AtomS3R の場合、リセットボタンを 2 秒ほど長押しして、内部の緑色の LED が点灯したらボタンを離します。これでデバイスはダウンロードモードに入り、プログラム書き込みの準備が整います。