From 1af817ea4cdf3bdffc125d7bd6b130f671c85f46 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Sun, 25 May 2025 17:53:12 +0800 Subject: [PATCH] bugfix --- app/f5tts.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/app/f5tts.py b/app/f5tts.py index cbad15a..a4baeed 100644 --- a/app/f5tts.py +++ b/app/f5tts.py @@ -53,6 +53,20 @@ ode_method = "euler" sway_sampling_coef = -1.0 speed = 1.0 +def audio_ndarray_to_base64(waveform: np.ndarray, sample_rate: int = 16000) -> str: + # 如果是单通道,确保 shape 为 (samples, 1) + if waveform.ndim == 1: + waveform = waveform.reshape(-1, 1) + + # 写入内存 buffer(WAV 格式) + buffer = io.BytesIO() + sf.write(buffer, waveform, samplerate=sample_rate, format='WAV') + buffer.seek(0) + + # base64 编码 + b64_audio = base64.b64encode(buffer.read()).decode('utf-8') + return b64_audio + def write_wav_buffer(wav, nchannels, framerate): fs = FileStorage() fn = fs._name2path(f'{getID()}.wav', userid='tmp') @@ -182,7 +196,7 @@ class F5TTS: async def inference_stream(self, prompt, speaker, speed_factor=1.0): for d in self._inference_stream(prompt, speaker, speed_factor=speed_factor) - audio_b64=sound_ndarray2b64(d['audio'], d['sample_rate']) + audio_b64=audio_ndarray_to_base64(d['audio'], d['sample_rate']) d['audio'] = audio_b64 yield d