ITADN
schreibfaul1/ESP32-audioI2S
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;
    }
}


接线 schematic


脉冲图 Impulse diagram