Penta 3 недель назад
Родитель
Сommit
5778497929
1 измененных файлов с 11 добавлено и 12 удалено
  1. 11 12
      chatbot.py

+ 11 - 12
chatbot.py

@@ -191,22 +191,21 @@ class STTSink(Sink):
 conversation_history = []
 conversation_history = []
 
 
 def discord_pcm_to_whisper_int16(pcm_bytes: bytes) -> bytes:
 def discord_pcm_to_whisper_int16(pcm_bytes: bytes) -> bytes:
-    audio = np.frombuffer(pcm_bytes, dtype=np.int16).astype(np.float32)
+    # PCM 48 kHz int16 -> numpy
+    audio_48k = np.frombuffer(pcm_bytes, dtype=np.int16)
+    if audio_48k.size == 0:
+        return b""
 
 
-    # normalisation RMS
-    rms = np.sqrt(np.mean(audio**2) + 1e-8)
-    audio = audio / max(rms, 5000)
+    # int16 -> float32 pour resample
+    audio_float32 = audio_48k.astype(np.float32) / 32768.0
 
 
-    # passe-bas léger avant downsample
-    audio = audio / 32768.0
+    # resample 48kHz -> 16kHz
+    audio_16k = resample_poly(audio_float32, up=1, down=3)
 
 
-    # resample 48k → 16k
-    audio_16k = resample_poly(audio, up=1, down=3, window=('kaiser', 5.0))
+    # float32 -> int16 (CE QUE WHISPER ATTEND)
+    audio_16k_int16 = np.clip(audio_16k * 32768.0, -32768, 32767).astype(np.int16)
 
 
-    # clip sécurité
-    audio_16k = np.clip(audio_16k, -1.0, 1.0)
-
-    return (audio_16k * 32767).astype(np.int16).tobytes()
+    return audio_16k_int16.tobytes()
 
 
 def filter_message(message):
 def filter_message(message):
     """Filtre le contenu d'un retour de modèle de language, comme pour enlever les pensées dans le cas par exemple de DeepSeek"""
     """Filtre le contenu d'un retour de modèle de language, comme pour enlever les pensées dans le cas par exemple de DeepSeek"""