本页面介绍了实时语音克隆系统的语音数据预处理流程。数据预处理是关键步骤,它将原始音频文件转换为适合系统三个核心组件:说话人编码器(Speaker Encoder)、合成器(Synthesizer)和声码器(Vocoder)进行训练和推理的格式。
有关预处理后模型训练的信息,请参阅 训练模型。
预处理流程包括几个步骤,为SV2TTS框架的每个组件准备数据。每个组件都需要不同形式的预处理数据。
来源:encoder_preprocess.py1-71 synthesizer_preprocess_audio.py1-47 synthesizer_preprocess_embeds.py1-25
系统在整个过程中使用多种音频预处理操作来标准化音频输入。
第一步是加载音频文件并将其标准化到一致的采样率。
对音频进行归一化以确保一致的音量水平。
移除音频中的长静音以提高训练效率。
静音修剪算法使用WebRTC VAD(语音活动检测)来识别发声片段。
将音频波形转换为梅尔频谱图,这更适合神经网络处理。
来源:encoder/audio.py53-65 vocoder/audio.py45-81 synthesizer/audio.py51-65
说话人编码器需要来自语音样本的梅尔频谱图来学习说话人的特征。
python encoder_preprocess.py <datasets_root> [options]
此命令预处理LibriSpeech、VoxCeleb1和VoxCeleb2等数据集的音频。
对于每个说话人
对于VoxCeleb数据集,会执行额外的过滤步骤,仅选择英语说话人。
来源:encoder/preprocess.py58-184
合成器需要对齐的文本和音频数据,以学习从文本到梅尔频谱图的映射。
# Step 1: Preprocess audio and text
python synthesizer_preprocess_audio.py <datasets_root> [options]
# Step 2: Create embeddings using the trained encoder
python synthesizer_preprocess_embeds.py <synthesizer_root> -e <encoder_model>
合成器预处理有两个主要路径:
对于两条路径,后续步骤是相似的:
音频预处理后,第二步使用训练好的编码器模型创建说话人嵌入。
来源:synthesizer/preprocess.py13-226 synthesizer_preprocess_audio.py1-47 synthesizer_preprocess_embeds.py1-25
声码器需要配对的音频和梅尔频谱图,以学习从频谱图映射回波形的模型。
声码器使用在合成器预处理阶段创建的梅尔频谱图和相应的音频文件。其他处理可能包括:
来源:vocoder/audio.py19-107 vocoder_train.py1-53
控制预处理行为的关键参数在配置文件中定义。
| 参数 | 描述 | 默认值 | 用途 |
|---|---|---|---|
sample_rate | 音频采样率 | 16000 赫兹 | 所有组件 |
n_fft | 频谱图的 FFT 大小 | 800 | 合成器、声码器 |
num_mels | 梅尔频带数 | 80 | 合成器、声码器 |
hop_size | 帧移(采样点) | 200 | 合成器、声码器 |
win_size | 窗口大小(采样点) | 800 | 合成器、声码器 |
mel_n_channels | 梅尔频带数 | 40 | 编码器 |
mel_window_length | 窗口长度(毫秒) | 25 | 编码器 |
mel_window_step | 窗口步长(毫秒) | 10 | 编码器 |
silence_min_duration_split | 分割时的最小静音时长(秒) | 0.4 | 合成器 |
utterance_min_duration | 保留的最小发音时长(秒) | 1.6 | 合成器 |
vad_window_length | VAD 窗口长度(毫秒) | 30 | 编码器 |
vad_moving_average_width | VAD 平滑宽度 | 8 | 编码器 |
vad_max_silence_length | 保留的最大静音帧数 | 6 | 编码器 |
audio_norm_target_dBFS | 归一化的目标 dB 值 | -30 | 编码器 |
trim_silence | 是否修剪静音 | True | 合成器 |
clip_mels_length | 是否裁剪频谱图 | True | 合成器 |
来源:encoder/params_data.py(推断),synthesizer/hparams.py21-89
预处理后,数据按以下结构组织:
<datasets_root>/SV2TTS/
├── encoder/
│ ├── <speaker_id>/
│ │ ├── <utterance_id>.npy # Mel spectrograms for encoder training
│ │ └── _sources.txt # Source file references
│ └── Log_*.txt # Processing logs
├── synthesizer/
│ ├── mels/
│ │ └── mel-<utterance_id>.npy # Mel spectrograms for synthesizer
│ ├── audio/
│ │ └── audio-<utterance_id>.npy # Processed audio
│ ├── embeds/
│ │ └── embed-<utterance_id>.npy # Speaker embeddings
│ └── train.txt # Metadata for training
└── vocoder/
└── ... # Vocoder training data
来源:encoder_preprocess.py55-60 synthesizer_preprocess_audio.py37-42 synthesizer/preprocess.py22-27
按照此序列的预处理和训练步骤,为完整的语音克隆系统做好准备。
来源: encoder_preprocess.py1-71 synthesizer_preprocess_audio.py1-47 synthesizer_preprocess_embeds.py1-25 encoder_train.py1-44 synthesizer_train.py1-36 vocoder_train.py1-53