1. 環境設定: Arduino IDE の始め方チュートリアルを参考にして、IDE をインストールし、使用する開発ボードに対応するボードマネージャーと必要なライブラリをインストールしてください。
2. 必要なライブラリ:
3. 使用するハードウェア:
Unit AudioPlayer はコマンドを受け取ることでオーディオ再生機能を実現し、 3.5mm ソケットから出力される信号でクリアなオーディオ出力を実現し、現在のコマンドに対応した動作情報をシリアルで返すループ再生やコンボ再生にも対応します。Unit AudioPlayer を使用することで、オーディオの再生と柔軟な制御が可能になります。
1. 初期化制御シリアルポートです
audioplayer.begin()
を使用して、ホストとユ Unit AudioPlayer に接続されたシリアルポートを設定し、戻り状態フラグを初期化します。着信パラメータはシリアル番号、信号受信ピン番号、信号送信ピン番号の順です。
2. 播放模式
audioplayer.setplaymode()
で曲の再生モードを設定できます。Unit AudioPlayer は 7 つの再生モードに対応しています,詳細は次の表の通りです:
パターン | 説明 | 数値 |
---|---|---|
AUDIO_PLAYER_MODE_ALL_LOOP | 全ての曲を順番に回していきます | 00 |
AUDIO_PLAYER_MODE_SINGLE_LOOP | シングルループ現在の曲です | 01 |
AUDIO_PLAYER_MODE_FOLDER_LOOP | 現在のフォルダーの全曲を順番にループ再生していきます | 02 |
AUDIO_PLAYER_MODE_RANDOM | 現在のディスクの曲をランダムに再生します | 03 |
AUDIO_PLAYER_MODE_SINGLE_STOP | 現在の曲を 1 回再生します | 04 |
AUDIO_PLAYER_MODE_ALL_ONCE | 順番に全曲を 1 回ずつ再生します | 05 |
AUDIO_PLAYER_MODE_FOLDER_ONCE | 現在のフォルダの全曲を 1 回で再生します | 06 |
audioplayer.selectaudionum()
を使用すると、指定した音楽を再生できます,現在の Unit AudioPlayer では、インデックス番号による曲選択のみサポートされています。
サンプルプログラム:
#include <M5Unified.h>
#include <M5GFX.h>
#include <unit_audioplayer.hpp>
AudioPlayerUnit audioplayer;
m5::touch_detail_t touchDetail;
LGFX_Button button_pre, button_play, button_next;
void setup()
{
auto cfg = M5.config();
cfg.serial_baudrate = 115200;
M5.begin(cfg);
M5.Power.setExtOutput(true);
M5.Lcd.fillScreen(WHITE);
M5.Lcd.setTextFont(&fonts::DejaVu18);
M5.Lcd.setTextColor(TFT_BLACK);
M5.Display.drawString("Unit AudioPlayer Example", 0, 0);
int8_t port_a_pin1 = -1, port_a_pin2 = -1;
port_a_pin1 = M5.getPin(m5::pin_name_t::port_a_pin1);
port_a_pin2 = M5.getPin(m5::pin_name_t::port_a_pin2);
Serial.printf("getPin: RX:%d TX:%d\n", port_a_pin1, port_a_pin2);
//To change the serial port, please modify this section.
while (!audioplayer.begin(&Serial1, port_a_pin1, port_a_pin2)) {//Default UART Num: 1,
delay(1000);
}
Serial.println("Unit AudioPlayer is ready");
audioplayer.setPlayMode(AUDIO_PLAYER_MODE_SINGLE_STOP);//Default Play Mode: single stop
audioplayer.playAudio();
audioplayer.selectAudioNum(1);//Default Audio Num: 1
M5.Display.drawString("Audio Num:1", 0, 80);
audioplayer.setVolume(25);
button_pre.initButton(&M5.Lcd, 47, 215, 60, 60, TFT_WHITE, TFT_PINK, TFT_BLACK, "<", 1, 1);
button_pre.drawButton();
button_play.initButton(&M5.Lcd, 157, 215, 60, 60, TFT_WHITE, TFT_PINK, TFT_BLACK, ">\\||", 1, 1);
button_play.drawButton();
button_next.initButton(&M5.Lcd, 267, 215, 60, 60, TFT_WHITE, TFT_PINK, TFT_BLACK, ">", 1, 1);
button_next.drawButton();
}
void loop()
{
static uint8_t lastPlayStatus = 255;
static uint8_t lastAudioNum = 0, lastVolume = 0;
static bool refreshAudioNum = false;
uint8_t playStatus = audioplayer.checkPlayStatus();
uint8_t volume = audioplayer.getVolume();
uint8_t audioNum = 0;
if (refreshAudioNum) {
audioNum = audioplayer.getCurrentAudioNumber();
refreshAudioNum = false;
} else {
audioNum = lastAudioNum;
}
if (playStatus != lastPlayStatus) {
static String playStatusStr;
if (playStatus == AUDIO_PLAYER_STATUS_PAUSED) {
playStatusStr = "Paused";
} else if (playStatus == AUDIO_PLAYER_STATUS_STOPPED) {
playStatusStr = "Stopped";
} else if (playStatus == AUDIO_PLAYER_STATUS_PLAYING) {
playStatusStr = "Playing";
}
M5.Display.fillRect(0, 40, 320, 20, WHITE);
M5.Display.drawString("Play Status:" + playStatusStr, 0, 40);
lastPlayStatus = playStatus;
}
if (volume != lastVolume) {
M5.Display.fillRect(0, 120, 320, 20, WHITE);
M5.Display.drawString("Volume:" + String(volume), 0, 120);
lastVolume = volume;
}
if (audioNum != lastAudioNum && audioNum != AUDIO_PLAYER_STATUS_ERROR) {
M5.Display.fillRect(0, 80, 320, 20, WHITE);
M5.Display.drawString("Audio Num:" + String(audioNum), 0, 80);
lastAudioNum = audioNum;
}
M5.update();
touchDetail = M5.Touch.getDetail();
if (touchDetail.isPressed()) {
if(button_pre.contains(touchDetail.x, touchDetail.y)){
Serial.println("Btn_pre pressed");
audioplayer.previousAudio();
refreshAudioNum = true;
}
else if(button_play.contains(touchDetail.x, touchDetail.y)){
Serial.println("Btn_play pressed");
if (playStatus == AUDIO_PLAYER_STATUS_PLAYING) {
audioplayer.pauseAudio();
Serial.println("pause_audio");
} else {
audioplayer.playAudio();
Serial.println("play_audio");
}
}
else if(button_next.contains(touchDetail.x, touchDetail.y)){
Serial.println("Btn_next pressed");
audioplayer.nextAudio();
refreshAudioNum = true;
}
}
}
1. ダウンロードモード:異なるデバイスにプログラムを書き込む前に、ダウンロードモードにする必要があります。この手順は使用するメインコントロールデバイスによって異なる場合があります。詳細については、Arduino IDE の始め方チュートリアルページの下部にあるデバイス用のプログラムダウンロード方法を参照してください。
CoreS3 では、リセットボタンを長押し(約 2 秒)して内部の緑色 LED が点灯したら、ボタンを放します。この時点でデバイスはダウンロードモードに入り、プログラムの書き込みを待機します。