diff --git a/components/lightsnapcast/player.c b/components/lightsnapcast/player.c index 23da32d..6b5371e 100644 --- a/components/lightsnapcast/player.c +++ b/components/lightsnapcast/player.c @@ -29,7 +29,7 @@ #include -#define SYNC_TASK_PRIORITY (configMAX_PRIORITIES - 2) +#define SYNC_TASK_PRIORITY (configMAX_PRIORITIES - 1) #define SYNC_TASK_CORE_ID 1 // tskNO_AFFINITY static const char *TAG = "PLAYER"; @@ -77,6 +77,8 @@ static void tg0_timer_init(void); static void tg0_timer_deinit(void); static void player_task(void *pvParameters); +extern esp_err_t audio_set_mute(bool mute); + /* #define CONFIG_MASTER_I2S_BCK_PIN 5 #define CONFIG_MASTER_I2S_LRCK_PIN 25 @@ -879,11 +881,11 @@ int32_t allocate_pcm_chunk_memory(pcm_chunk_message_t **pcmChunk, #elif CONFIG_SPIRAM ret = allocate_pcm_chunk_memory_caps(*pcmChunk, bytes, 0); #else - // if allocation fails we try again x times after waiting for chunks to finish - // playback - // TODO: find a sane value for i, 4 seems to work well to prevent allocation - // errors - for (int i = 0; i < 4; i++) { + // TODO: x should probably be dynamically calculated as a fraction of buffer + // size if allocation fails we try again every 1ms for max. x ms waiting for + // chunks to finish playback + uint32_t x = 200; + for (int i = 0; i < x; i++) { ret = allocate_pcm_chunk_memory_caps(*pcmChunk, bytes, MALLOC_CAP_32BIT | MALLOC_CAP_EXEC); if (ret < 0) { @@ -900,8 +902,7 @@ int32_t allocate_pcm_chunk_memory(pcm_chunk_message_t **pcmChunk, } if (ret < 0) { - // TODO: insert actual chunk duration here - vTaskDelay(pdMS_TO_TICKS(26)); + vTaskDelay(pdMS_TO_TICKS(1)); } else { break; } @@ -1015,6 +1016,8 @@ static void player_task(void *pvParameters) { initialSync = 0; + audio_set_mute(true); + while (1) { // ESP_LOGW( TAG, "32b f %d b %d", heap_caps_get_free_size //(MALLOC_CAP_8BIT), heap_caps_get_largest_free_block (MALLOC_CAP_8BIT)); @@ -1058,7 +1061,10 @@ static void player_task(void *pvParameters) { adjust_apll(0); i2s_custom_set_clk(I2S_NUM_0, __scSet.sr, __scSet.bits, __scSet.ch); + initialSync = 0; + + audio_set_mute(true); } if ((__scSet.buf_ms != scSet.buf_ms) || @@ -1257,6 +1263,10 @@ static void player_task(void *pvParameters) { initialSync = 1; + // TODO: use a timer to un-mute non blocking + vTaskDelay(pdMS_TO_TICKS(2)); + audio_set_mute(scSet.muted); + ESP_LOGI(TAG, "initial sync age: %lldus, chunk duration: %lldus", age, chkDur_us); @@ -1298,6 +1308,8 @@ static void player_task(void *pvParameters) { initialSync = 0; + audio_set_mute(true); + i2s_custom_stop(I2S_NUM_0); continue; @@ -1357,6 +1369,8 @@ static void player_task(void *pvParameters) { initialSync = 0; + audio_set_mute(true); + continue; } @@ -1384,20 +1398,22 @@ static void player_task(void *pvParameters) { usec = diff2Server - sec * 1000000; msec = usec / 1000; usec = usec % 1000; - // ESP_LOGI (TAG, "%d, %lldus, %lldus %llds, %lld.%lldms", dir, age, - // avg, sec, msec, usec); - // ESP_LOGI(TAG, "%d, %lldus, %lldus, %lldus, q:%d", dir, avg, - // shortMedian, miniMedian, uxQueueMessagesWaiting(pcmChkQHdl)); - // ESP_LOGI( TAG, "8b f %d b %d", - // heap_caps_get_free_size(MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL), - // heap_caps_get_largest_free_block - // (MALLOC_CAP_8BIT | - // MALLOC_CAP_INTERNAL)); - // ESP_LOGI( TAG, "32b f %d b %d", - // heap_caps_get_free_size(MALLOC_CAP_32BIT | MALLOC_CAP_EXEC), - // heap_caps_get_largest_free_block - // (MALLOC_CAP_32BIT | - // MALLOC_CAP_EXEC)); + // ESP_LOGI (TAG, "%d, %lldus, %lldus %llds, %lld.%lldms", + // dir, age, avg, sec, msec, usec); ESP_LOGI(TAG, "%d, + // %lldus, %lldus, %lldus, q:%d", dir, avg, shortMedian, + // miniMedian, uxQueueMessagesWaiting(pcmChkQHdl)); + // ESP_LOGI( TAG, "8b f %d b %d", + // heap_caps_get_free_size(MALLOC_CAP_8BIT | + // MALLOC_CAP_INTERNAL), + // heap_caps_get_largest_free_block + // (MALLOC_CAP_8BIT | + // MALLOC_CAP_INTERNAL)); + // ESP_LOGI( TAG, "32b f %d b %d", + // heap_caps_get_free_size(MALLOC_CAP_32BIT | + // MALLOC_CAP_EXEC), + // heap_caps_get_largest_free_block + // (MALLOC_CAP_32BIT | + // MALLOC_CAP_EXEC)); } dir = 0; @@ -1475,6 +1491,8 @@ static void player_task(void *pvParameters) { initialSync = 0; + audio_set_mute(true); + i2s_custom_stop(I2S_NUM_0); } } diff --git a/main/main.c b/main/main.c index 2ca00d5..c96cba5 100644 --- a/main/main.c +++ b/main/main.c @@ -75,7 +75,7 @@ SemaphoreHandle_t decoderWriteSemaphore = NULL; const char *VERSION_STRING = "0.0.2"; -#define HTTP_TASK_PRIORITY (configMAX_PRIORITIES - 1) // 9 +#define HTTP_TASK_PRIORITY (configMAX_PRIORITIES - 2) // 9 #define HTTP_TASK_CORE_ID 1 // 1 // tskNO_AFFINITY #define OTA_TASK_PRIORITY 6 @@ -628,6 +628,13 @@ void flac_task(void *pvParameters) { } } +/** + * + */ +esp_err_t audio_set_mute(bool mute) { + return audio_hal_set_mute(board_handle->audio_hal, mute); +} + /** * */ diff --git a/sdkconfig b/sdkconfig index a554914..4345033 100644 --- a/sdkconfig +++ b/sdkconfig @@ -529,7 +529,7 @@ CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=0 CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM=8 # CONFIG_ESP32_WIFI_CSI_ENABLED is not set CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y -CONFIG_ESP32_WIFI_TX_BA_WIN=32 +CONFIG_ESP32_WIFI_TX_BA_WIN=8 CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y CONFIG_ESP32_WIFI_RX_BA_WIN=16 CONFIG_ESP32_WIFI_NVS_ENABLED=y @@ -761,9 +761,9 @@ CONFIG_LWIP_TCP_SYNMAXRTX=12 CONFIG_LWIP_TCP_MSS=1460 CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 -CONFIG_LWIP_TCP_SND_BUF_DEFAULT=65534 -CONFIG_LWIP_TCP_WND_DEFAULT=65534 -CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 +CONFIG_LWIP_TCP_SND_BUF_DEFAULT=11680 +CONFIG_LWIP_TCP_WND_DEFAULT=11680 +CONFIG_LWIP_TCP_RECVMBOX_SIZE=10 CONFIG_LWIP_TCP_QUEUE_OOSEQ=y CONFIG_LWIP_TCP_SACK_OUT=y # CONFIG_LWIP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set @@ -1310,9 +1310,9 @@ CONFIG_TCP_MAXRTX=12 CONFIG_TCP_SYNMAXRTX=12 CONFIG_TCP_MSS=1460 CONFIG_TCP_MSL=60000 -CONFIG_TCP_SND_BUF_DEFAULT=65534 -CONFIG_TCP_WND_DEFAULT=65534 -CONFIG_TCP_RECVMBOX_SIZE=6 +CONFIG_TCP_SND_BUF_DEFAULT=11680 +CONFIG_TCP_WND_DEFAULT=11680 +CONFIG_TCP_RECVMBOX_SIZE=10 CONFIG_TCP_QUEUE_OOSEQ=y # CONFIG_ESP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set CONFIG_TCP_OVERSIZE_MSS=y diff --git a/sdkconfig.old b/sdkconfig.old index 874ef03..465c921 100644 --- a/sdkconfig.old +++ b/sdkconfig.old @@ -143,12 +143,7 @@ CONFIG_ESP_LYRAT_V4_3_BOARD=y # # ESP32 DSP processor config # -CONFIG_USE_DSP_PROCESSOR=y -CONFIG_SNAPCLIENT_DSP_FLOW_STEREO=y -# CONFIG_SNAPCLIENT_DSP_FLOW_BASSBOOST is not set -# CONFIG_SNAPCLIENT_DSP_FLOW_BIAMP is not set -CONFIG_USE_BIQUAD_ASM=y -CONFIG_SNAPCLIENT_USE_SOFT_VOL=y +# CONFIG_USE_DSP_PROCESSOR is not set # end of ESP32 DSP processor config # @@ -534,7 +529,7 @@ CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=0 CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM=8 # CONFIG_ESP32_WIFI_CSI_ENABLED is not set CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y -CONFIG_ESP32_WIFI_TX_BA_WIN=32 +CONFIG_ESP32_WIFI_TX_BA_WIN=8 CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y CONFIG_ESP32_WIFI_RX_BA_WIN=16 CONFIG_ESP32_WIFI_NVS_ENABLED=y @@ -549,7 +544,7 @@ CONFIG_WIFI_LOG_DEFAULT_LEVEL_INFO=y # CONFIG_WIFI_LOG_DEFAULT_LEVEL_DEBUG is not set # CONFIG_WIFI_LOG_DEFAULT_LEVEL_VERBOSE is not set # CONFIG_ESP32_WIFI_IRAM_OPT is not set -# CONFIG_ESP32_WIFI_RX_IRAM_OPT is not set +CONFIG_ESP32_WIFI_RX_IRAM_OPT=y CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y # CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set # CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE is not set @@ -766,9 +761,9 @@ CONFIG_LWIP_TCP_SYNMAXRTX=12 CONFIG_LWIP_TCP_MSS=1460 CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 -CONFIG_LWIP_TCP_SND_BUF_DEFAULT=65534 -CONFIG_LWIP_TCP_WND_DEFAULT=65534 -CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 +CONFIG_LWIP_TCP_SND_BUF_DEFAULT=11680 +CONFIG_LWIP_TCP_WND_DEFAULT=11680 +CONFIG_LWIP_TCP_RECVMBOX_SIZE=10 CONFIG_LWIP_TCP_QUEUE_OOSEQ=y CONFIG_LWIP_TCP_SACK_OUT=y # CONFIG_LWIP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set @@ -1315,9 +1310,9 @@ CONFIG_TCP_MAXRTX=12 CONFIG_TCP_SYNMAXRTX=12 CONFIG_TCP_MSS=1460 CONFIG_TCP_MSL=60000 -CONFIG_TCP_SND_BUF_DEFAULT=65534 -CONFIG_TCP_WND_DEFAULT=65534 -CONFIG_TCP_RECVMBOX_SIZE=6 +CONFIG_TCP_SND_BUF_DEFAULT=11680 +CONFIG_TCP_WND_DEFAULT=11680 +CONFIG_TCP_RECVMBOX_SIZE=10 CONFIG_TCP_QUEUE_OOSEQ=y # CONFIG_ESP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set CONFIG_TCP_OVERSIZE_MSS=y