From da7b6ace9c9fd9975ed9f02fdeaea09643a440d0 Mon Sep 17 00:00:00 2001 From: clement Date: Thu, 18 Jun 2026 18:08:29 +0200 Subject: [PATCH] feat(plip): play greeting from SD pack on pickup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On incoming pickup the GREET state now plays the local clip /sdcard/voice/greet_.wav when present — the phone greets the caller with no gateway and no model in RAM. Falls back to the live gateway greeting (turn_client) only when the pack lacks a clip for that number. --- plip_voice/main/conversation.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/plip_voice/main/conversation.c b/plip_voice/main/conversation.c index 144f18c..438841e 100644 --- a/plip_voice/main/conversation.c +++ b/plip_voice/main/conversation.c @@ -257,12 +257,25 @@ static void conv_task(void *arg) go_idle(); break; } - /* Fetch greeting WAV from gateway and enqueue playback */ - if (turn_client_greeting(s_sid, s_number, - "/spiffs/turn.wav")) { - audio_play_async("/spiffs/turn.wav"); - } else { - ESP_LOGW(TAG, "turn_client_greeting failed — proceeding silent"); + /* Prefer the local SD voice pack (no gateway, no model in RAM): + * play /sdcard/voice/greet_.wav when present. Fall back to + * the live gateway greeting only when the pack has no clip for this + * NPC number (see tools/tts/generate_plip_sd_pack.py). */ + { + char sd_greet[64]; + snprintf(sd_greet, sizeof(sd_greet), + "/sdcard/voice/greet_%s.wav", s_number); + FILE *tf = NULL; + if (audio_ensure_sd() && (tf = fopen(sd_greet, "rb")) != NULL) { + fclose(tf); + audio_play_async(sd_greet); + ESP_LOGI(TAG, "GREET: local SD pack %s", sd_greet); + } else if (turn_client_greeting(s_sid, s_number, + "/spiffs/turn.wav")) { + audio_play_async("/spiffs/turn.wav"); + } else { + ESP_LOGW(TAG, "no SD clip + gateway greeting failed — silent"); + } } s_state = STATE_CONNECTED; ESP_LOGI(TAG, "-> CONNECTED"); -- 2.52.0