diff --git a/tasmota/tasmota_xdrv_driver/xdrv_42_7_i2s_webradio_idf51.ino b/tasmota/tasmota_xdrv_driver/xdrv_42_7_i2s_webradio_idf51.ino index bddb7d12f..941ce2329 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_42_7_i2s_webradio_idf51.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_42_7_i2s_webradio_idf51.ino @@ -43,9 +43,14 @@ bool I2SWebradio(const char *url, uint32_t decoder_type) { wr_tasksize = 26000; } + size_t finalBufferSize = preallocateBufferSize; + if(CanUsePSRAM()){ + size_t targetsize = (ESP_getMaxAllocPsram()/4) * 3; // use up to 3/4 of available PSRAM + finalBufferSize = targetsize; + } // allocate buffers if not already done if (audio_i2s_mp3.preallocateBuffer == NULL) { - audio_i2s_mp3.preallocateBuffer = special_malloc(preallocateBufferSize); + audio_i2s_mp3.preallocateBuffer = special_malloc(finalBufferSize); } if (audio_i2s_mp3.preallocateCodec == NULL) { audio_i2s_mp3.preallocateCodec = special_malloc(preallocateCodecSize); @@ -65,6 +70,7 @@ bool I2SWebradio(const char *url, uint32_t decoder_type) { } Audio_webradio.ifile = new AudioFileSourceICYStream(); + Audio_webradio.ifile->SetReconnect(5, 5); Audio_webradio.ifile->RegisterMetadataCB(I2sMDCallback, NULL); Audio_webradio.ifile->RegisterStatusCB(I2SWrStatusCB, NULL); if(!Audio_webradio.ifile->open(url)){ @@ -73,7 +79,7 @@ bool I2SWebradio(const char *url, uint32_t decoder_type) { AddLog(LOG_LEVEL_INFO, "I2S: did connect to %s",url); I2SAudioPower(true); - audio_i2s_mp3.buff = new AudioFileSourceBuffer(Audio_webradio.ifile, audio_i2s_mp3.preallocateBuffer, preallocateBufferSize); + audio_i2s_mp3.buff = new AudioFileSourceBuffer(Audio_webradio.ifile, audio_i2s_mp3.preallocateBuffer, finalBufferSize); if(audio_i2s_mp3.buff == nullptr){ goto i2swr_fail; }