質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
M5Stack

M5Stackは、小型のマイコンモジュールです。拡張モジュールが豊富に用意されており、センサと組み合わせることで測定機能を自由に追加することができます。

Q&A

解決済

1回答

5375閲覧

M5Stack Core2でMP3再生を行うと、間延びしたいような音が出てくる。

MaeharaKenji

総合スコア86

M5Stack

M5Stackは、小型のマイコンモジュールです。拡張モジュールが豊富に用意されており、センサと組み合わせることで測定機能を自由に追加することができます。

0グッド

0クリップ

投稿2021/12/07 15:14

編集2021/12/07 22:08

M5Stack Core2で、こちらのサイトのように、SDカードに入ったMP3ファイルを読みだして、内蔵スピーカーに出力してみるプログラムをやっています。

下記のようなプログラムでビルドが成功して、実行してみてもこちらのフリーMP3素材の”パフ”という音声が間延びした音でしか出てきません。

このような現象をコード修正で解消できますでしょうか?
また、MP3ファイルのビットレートが192bpsなのですが、ビットレートの変更などは必要でしょうか?

この現象の解決方法をご教示の程宜しくお願い致します。

全体のソースはこちら

C++

1// https://gist.github.com/mongonta0716/18c28bff2dc533d8b51903c939a66a61 2 3#include <Arduino.h> 4#include <M5Core2.h> 5#include <driver/i2s.h> 6#include "AudioFileSourceSD.h" 7#include "AudioFileSourceID3.h" 8//#include "AudioGeneratorWAV.h" 9#include "AudioGeneratorMP3.h" 10#include "AudioOutputI2S.h" 11#include "sound.h" 12 13//AudioGeneratorWAV *wav = NULL; 14AudioGeneratorMP3 *mp3; 15AudioFileSourceSD *file; 16AudioOutputI2S *out; 17AudioFileSourceID3 *id3; 18 19 20 21#define BCLK_PIN 12 22#define LRCK_PIN 0 23#define SADTA_PIN 2 24#define EXTERNAL_I2S 0 25#define OUTPUT_GAIN 10 26 27void sound_init(void) 28{ 29 M5.begin(); 30 M5.Axp.SetSpkEnable(true); 31 32 file = new AudioFileSourceSD("/mp3/pafu.mp3"); 33 id3 = new AudioFileSourceID3(file); 34 out = new AudioOutputI2S(I2S_NUM_0, EXTERNAL_I2S); // Output to builtInDAC 35 out->SetPinout(BCLK_PIN, LRCK_PIN, SADTA_PIN); 36 out->SetOutputModeMono(true); 37 out->SetGain((float)OUTPUT_GAIN/100.0); 38 mp3 = new AudioGeneratorMP3(); 39 mp3->begin(id3, out); 40 //wav = new AudioGeneratorWAV(); 41 //wav->begin(id3, out); 42} 43 44 45 46void vSoundTask( void *pvParameters ); 47 48void sound_task_init(void) 49{ 50 51 xTaskCreatePinnedToCore( vSoundTask, 52 "sound Task", 53 4096, 54 NULL, 55 4, 56 NULL, 57 0); 58} 59 60 61void vSoundTask( void *pvParameters ) 62{ 63 sound_init(); 64 65 while(1) 66 { 67 #if 1 68 69 if (mp3->isRunning()) 70 { 71 if (!mp3->loop()) mp3->stop(); 72 } 73 else 74 { 75 Serial.printf("MP3 done\n"); 76 delay(1000); 77 sound_init(); 78 //mp3->begin(id3, out); 79 //delay(1000); 80 } 81 #endif 82 vTaskDelay(100); 83 } 84} 85

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1T2R3M4

2021/12/07 23:31

>ビットレートの変更などは必要でしょうか 試してみればいいのではないでしょうか。
guest

回答1

0

自己解決

https://github.com/KenjiMaehara/M5StackTest20211204/blob/M5Core2_SoundTest/src/main.cpp
音声ファイルの再生を単純にloop()に移して、マルチタスクを一旦やめてみたところ、MP3が正常に再生されることがわかりました。

https://github.com/KenjiMaehara/M5StackTest20211204/blob/M5Core2_test/src/sound.cpp
また、なんでマルチタスクでやった場合、MP3音声が崩れるようになったか調べてみたところ、ループ内の”vTaskDelay(100);”を削除してみたら正常に再生されることを確認しました。

投稿2021/12/08 22:20

MaeharaKenji

総合スコア86

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問