From fe05cf5d74272eb6f06b1962142c4452e1172b30 Mon Sep 17 00:00:00 2001 From: Xin Wang Date: Mon, 9 Feb 2026 15:17:13 +0800 Subject: [PATCH] Remove fade-in on sentence beginning --- engine/core/duplex_pipeline.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/engine/core/duplex_pipeline.py b/engine/core/duplex_pipeline.py index 0df9c39..49c46c1 100644 --- a/engine/core/duplex_pipeline.py +++ b/engine/core/duplex_pipeline.py @@ -555,11 +555,9 @@ class DuplexPipeline: }) first_audio_sent = True - # Keep very short fade-in for non-first sentence to preserve consonant attack. - fade_in_ms = 2 if spoken_sentence_count == 0 else 1 await self._speak_sentence( sentence, - fade_in_ms=fade_in_ms, + fade_in_ms=0, fade_out_ms=8, ) spoken_sentence_count += 1 @@ -585,10 +583,9 @@ class DuplexPipeline: ) }) first_audio_sent = True - fade_in_ms = 2 if spoken_sentence_count == 0 else 1 await self._speak_sentence( remaining_text, - fade_in_ms=fade_in_ms, + fade_in_ms=0, fade_out_ms=8, ) @@ -683,7 +680,7 @@ class DuplexPipeline: return False - async def _speak_sentence(self, text: str, fade_in_ms: int = 2, fade_out_ms: int = 8) -> None: + async def _speak_sentence(self, text: str, fade_in_ms: int = 0, fade_out_ms: int = 8) -> None: """ Synthesize and send a single sentence. @@ -744,7 +741,7 @@ class DuplexPipeline: sample_rate: int, fade_in: bool = False, fade_out: bool = False, - fade_in_ms: int = 2, + fade_in_ms: int = 0, fade_out_ms: int = 8, ) -> bytes: """Apply short edge fades to reduce click/pop at sentence boundaries.""" @@ -756,7 +753,7 @@ class DuplexPipeline: if samples.size == 0: return pcm_bytes - if fade_in: + if fade_in and fade_in_ms > 0: fade_in_samples = int(sample_rate * (fade_in_ms / 1000.0)) fade_in_samples = max(1, min(fade_in_samples, samples.size)) samples[:fade_in_samples] *= np.linspace(0.0, 1.0, fade_in_samples, endpoint=True)