เล่นไฟล์ mp3, m4a และ wav จากการ์ด SD ผ่าน I2S ด้วยฮาร์ดแวร์ภายนอก มีตัวถอดรหัส HELIX-mp3 และ -aac รวมอยู่ด้วย นอกจากนี้ยังมีตัวถอดรหัส OPUS สำหรับ Fullband, ตัวถอดรหัส VORBIS และตัวถอดรหัส FLAC ใช้งานได้กับ MAX98357A (แอมพลิฟายเออร์ 3 วัตต์พร้อม DAC) ที่เชื่อมต่อสามบรรทัด (DOUT, BLCK, LRC) เข้ากับ I2S สำหรับสเตอริโอจำเป็นต้องมี MAX98357A สองตัว AudioI2S ทำงานร่วมกับ UDA1334A (Adafruit I2S Stereo Decoder Breakout Board), PCM5102A และ CS4344 HW อื่นๆ อาจทำงานได้แต่ไม่ได้ทดสอบ เล่นสตรีมน้ำแข็งและ GoogleTTS ด้วย สามารถคอมไพล์ด้วย Arduino IDE ได้ วิกิ
# include " Arduino.h "
# include " WiFi.h "
# include " Audio.h "
# include " SD.h "
# include " FS.h "
// Digital I/O used
# define SD_CS 5
# define SPI_MOSI 23
# define SPI_MISO 19
# define SPI_SCK 18
# define I2S_DOUT 25
# define I2S_BCLK 27
# define I2S_LRC 26
Audio audio;
String ssid = " ******* " ;
String password = " ******* " ;
void setup () {
pinMode (SD_CS, OUTPUT); digitalWrite (SD_CS, HIGH);
SPI. begin (SPI_SCK, SPI_MISO, SPI_MOSI);
Serial. begin ( 115200 );
SD. begin (SD_CS);
WiFi. disconnect ();
WiFi. mode (WIFI_STA);
WiFi. begin (ssid. c_str (), password. c_str ());
while (WiFi. status () != WL_CONNECTED) delay ( 1500 );
audio. setPinout (I2S_BCLK, I2S_LRC, I2S_DOUT);
audio. setVolume ( 21 ); // default 0...21
// or alternative
// audio.setVolumeSteps(64); // max 255
// audio.setVolume(63);
//
// *** radio streams ***
audio. connecttohost ( " http://stream.antennethueringen.de/live/aac-64/stream.antennethueringen.de/ " ); // aac
// audio.connecttohost("http://mcrscast.mcr.iol.pt/cidadefm"); // mp3
// audio.connecttohost("http://www.wdr.de/wdrlive/media/einslive.m3u"); // m3u
// audio.connecttohost("https://stream.srg-ssr.ch/rsp/aacp_48.asx"); // asx
// audio.connecttohost("http://tuner.classical102.com/listen.pls"); // pls
// audio.connecttohost("http://stream.radioparadise.com/flac"); // flac
// audio.connecttohost("http://stream.sing-sing-bis.org:8000/singsingFlac"); // flac (ogg)
// audio.connecttohost("http://s1.knixx.fm:5347/dein_webradio_vbr.opus"); // opus (ogg)
// audio.connecttohost("http://stream2.dancewave.online:8080/dance.ogg"); // vorbis (ogg)
// audio.connecttohost("http://26373.live.streamtheworld.com:3690/XHQQ_FMAAC/HLSTS/playlist.m3u8"); // HLS
// audio.connecttohost("http://eldoradolive02.akamaized.net/hls/live/2043453/eldorado/master.m3u8"); // HLS (ts)
// *** web files ***
// audio.connecttohost("https://github.com/schreibfaul1/ESP32-audioI2S/raw/master/additional_info/Testfiles/Pink-Panther.wav"); // wav
// audio.connecttohost("https://github.com/schreibfaul1/ESP32-audioI2S/raw/master/additional_info/Testfiles/Santiano-Wellerman.flac"); // flac
// audio.connecttohost("https://github.com/schreibfaul1/ESP32-audioI2S/raw/master/additional_info/Testfiles/Olsen-Banden.mp3"); // mp3
// audio.connecttohost("https://github.com/schreibfaul1/ESP32-audioI2S/raw/master/additional_info/Testfiles/Miss-Marple.m4a"); // m4a (aac)
// audio.connecttohost("https://github.com/schreibfaul1/ESP32-audioI2S/raw/master/additional_info/Testfiles/Collide.ogg"); // vorbis
// audio.connecttohost("https://github.com/schreibfaul1/ESP32-audioI2S/raw/master/additional_info/Testfiles/sample.opus"); // opus
// *** local files ***
// audio.connecttoFS(SD, "/test.wav"); // SD
// audio.connecttoFS(SD_MMC, "/test.wav"); // SD_MMC
// audio.connecttoFS(SPIFFS, "/test.wav"); // SPIFFS
// audio.connecttospeech("Wenn die Hunde schlafen, kann der Wolf gut Schafe stehlen.", "de"); // Google TTS
}
void loop (){
audio. loop ();
vTaskDelay ( 1 );
}
// optional
void audio_info ( const char *info){
Serial. print ( " info " ); Serial. println (info);
}
void audio_id3data ( const char *info){ // id3 metadata
Serial. print ( " id3data " );Serial. println (info);
}
void audio_eof_mp3 ( const char *info){ // end of file
Serial. print ( " eof_mp3 " );Serial. println (info);
}
void audio_showstation ( const char *info){
Serial. print ( " station " );Serial. println (info);
}
void audio_showstreamtitle ( const char *info){
Serial. print ( " streamtitle " );Serial. println (info);
}
void audio_bitrate ( const char *info){
Serial. print ( " bitrate " );Serial. println (info);
}
void audio_commercial ( const char *info){ // duration in sec
Serial. print ( " commercial " );Serial. println (info);
}
void audio_icyurl ( const char *info){ // homepage
Serial. print ( " icyurl " );Serial. println (info);
}
void audio_lasthost ( const char *info){ // stream URL played
Serial. print ( " lasthost " );Serial. println (info);
}
void audio_eof_speech ( const char *info){
Serial. print ( " eof_speech " );Serial. println (info);
}
ตัวแปลงสัญญาณ | อีเอสพี32 | ESP32 PSRAM | ESP32-S3 พีแรม | |
---|---|---|---|---|
mp3 | ย | ย | ย | |
เอเอซี | n | ย | ย | |
เอเอซีพี | n | ใช่ (โมโน) | ใช่ (+SBR, +PS) | |
คลื่น | ย | ย | ย | |
แฟลค | n | ย | ย | บล็อกขนาดสูงสุด 8192 ไบต์ |
วอร์บิส | n | ย | ย | <=196กิโลบิต/วินาที |
ม4เอ | n | ย | ย | |
บทประพันธ์ | n | ย | ย | เซลท์เท่านั้น |
เขียงหั่นขนม สายไฟแผนภาพแรงกระตุ้น
Yellobyte ได้พัฒนาบอร์ดแบบครบวงจร ประกอบด้วย ESP32-S3 N8R2, 2x MAX98357 และอะแดปเตอร์การ์ด SD สามารถดูเอกสารประกอบ แผนภาพวงจร และตัวอย่างได้ที่นี่: https://github.com/yellobyte/ESP32-DevBoards-Getting-Started