schreibfaul1/ESP32-audioI2S · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈
ESP32-audioI2S
:warning: 该库仅适用于 ESP32-S3、ESP32-S31 和 ESP32-P4 等多核芯片。
ESP32 仅在有限程度上适用。
它不适用于 ESP32-S2、ESP32-C3 等 :warning:
支持的编解码器:wav, mp3, aac, flac, opus, vorbis
采样率:16–48 kHz
每样本位数:8, 16, 24, 32
容器格式:ogg, mp4, m3u8
如果外部 I²S 设备要求,输出采样率可以设置为 44.1 或 48 kHz 的固定值
适用于 MAX98357A(带 DAC 的 3 瓦放大器),将三条线(DOUT, BLCK, LRC)连接到 I2S。无论输入源如何,I2S 输出频率始终为 48kHz,因此也可以毫无问题地连接蓝牙设备。 立体声需要两个 MAX98357A。AudioI2S 适用于 UDA1334A(Adafruit I2S 立体声解码器开发板)、PCM5102A 和 CS4344。 其他硬件可能可用,但未经测试。还可以播放 icy-streams、GoogleTTS 和 OpenAIspeech。可以使用 Arduino IDE 编译。WIKI
#include "Arduino.h"
#include "WiFi.h"
#include "Audio.h"
// Digital I/O used
#define I2S_DOUT 25
#define I2S_BCLK 27
#define I2S_LRC 26
String ssid = "*******";
String password = "*******";
Audio audio;
// callbacks
void my_audio_info(Audio::msg_t m) {
Serial.printf("%s: %s\n", m.s, m.msg);
}
void setup() {
Audio::audio_info_callback = my_audio_info; // optional
Serial.begin(115200);
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
audio.connecttohost("http://stream.antennethueringen.de/live/aac-64/stream.antennethueringen.de/");
}
void loop(){
audio.loop();
vTaskDelay(1);
}
您可以在这里找到更多示例:https://github.com/schreibfaul1/ESP32-audioI2S/tree/master/examples
// detailed cb output
void my_audio_info(Audio::msg_t m) {
switch(m.e){
case Audio::evt_info: Serial.printf("info: ....... %s\n", m.msg); break;
case Audio::evt_eof: Serial.printf("end of file: %s\n", m.msg); break;
case Audio::evt_bitrate: Serial.printf("bitrate: .... %s\n", m.msg); break; // icy-bitrate or bitrate from metadata
case Audio::evt_icyurl: Serial.printf("icy URL: .... %s\n", m.msg); break;
case Audio::evt_id3data: Serial.printf("ID3 data: ... %s\n", m.msg); break; // id3-data or metadata
case Audio::evt_lasthost: Serial.printf("last URL: ... %s\n", m.msg); break;
case Audio::evt_name: Serial.printf("station name: %s\n", m.msg); break; // station name or icy-name
case Audio::evt_streamtitle: Serial.printf("stream title: %s\n", m.msg); break;
case Audio::evt_icylogo: Serial.printf("icy logo: ... %s\n", m.msg); break;
case Audio::evt_icydescription: Serial.printf("icy descr: .. %s\n", m.msg); break;
case Audio::evt_image: for(int i = 0; i < m.vec.size(); i += 2){
Serial.printf("cover image: segment %02i, pos %07lu, len %05lu\n", i / 2, m.vec[i], m.vec[i + 1]);} break; // APIC
case Audio::evt_lyrics: Serial.printf("sync lyrics: %s\n", m.msg); break;
case Audio::evt_log : Serial.printf("audio_logs: %s\n", m.msg); break;
default: Serial.printf("message:..... %s\n", m.msg); break;
}
}
接线
脉冲图
