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
>ビットレートの変更などは必要でしょうか
試してみればいいのではないでしょうか。
試しに、https://online-audio-converter.com/ja/ こちらのサイトで32kbpsに変換してみたのですが、症状が変わりませんでした。他に何か対応方法などありますでしょうか?
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);”を削除してみたら正常に再生されることを確認しました。
回答1件
あなたの回答
tips
プレビュー