ChatTTS 中文文档 下载 App

保存音频文件——torchaudio.save 与其他格式

波形数组格式

chat.infer() 返回的每条音频都是一个一维 numpy 数组:

用 torchaudio 保存 WAV

import torch
import torchaudio

wav = wavs[0]  # 取第一条
tensor = torch.from_numpy(wav)  # numpy → tensor
if tensor.dim() == 1:
    tensor = tensor.unsqueeze(0)  # 单声道需要加 batch 维度
torchaudio.save("output.wav", tensor, 24000)

注意 unsqueeze(0)——torchaudio.save 期望输入是 (channels, samples) 二维张量,单声道就是 (1, samples)。

用 soundfile 保存

import soundfile as sf
sf.write("output.wav", wavs[0], 24000)

soundfile 库对一维数组直接支持,不需要手动加维度。

在 Notebook 里直接播放

from IPython.display import Audio
Audio(wavs[0], rate=24000, autoplay=True)

转成 MP3

ChatTTS 原生只生成 WAV。转 MP3 需要额外工具:

pip install pydub
from pydub import AudioSegment
import io

wav_bytes = io.BytesIO()
torchaudio.save(wav_bytes, tensor, 24000, format="wav")
wav_bytes.seek(0)

audio = AudioSegment.from_wav(wav_bytes)
audio.export("output.mp3", format="mp3")

保存多条音频的批量写法

for i, wav in enumerate(wavs):
    tensor = torch.from_numpy(wav).unsqueeze(0)
    torchaudio.save(f"output_{i}.wav", tensor, 24000)

常见报错

错误原因修复
torchaudio.save dimension error没加 unsqueeze(0)手动把一维转二维
soundfile.LibsndfileError格式不支持用 .wav 后缀
WAV 文件无法播放采样率或字节序问题确认第三个参数传了 24000