- 【更新日志】
- 11.4对音频采样率声道数进行调整,以解决GPU爆炸的问题
在训练自定义语音合成模型时,需要仿照标准格式制作自己的数据集
(这个项目是针对[类似csmsc的数据集]),
然而关于如何制作数据集的教程却少之又少,数据集的标准也时常让初学者摸不着头脑,
为了以上问题并提高制作数据集的效率,这个项目应运而生。
制作完数据集之后直接按要求上传到这个项目↓↓↓根据提示运行就能简单完成语音克隆了
PaddleSpeech自定义语音克隆
数据集需要【wav音频】+【labels.txt】(具体在下文展开)
开始制作前请准备好需要转换的音频,请自行将格式转换为wav格式
请将准备好的wav文件压缩后上传到work文件夹下
work文件夹下可以存在多个文件夹,但是只能识别到第一层的音频文件
音频采样率24000
# 解压数据集【解压过的不用运行】
# !unzip -oq 【数据集路径】 -d 【解压路径】
# 解压到work文件夹下!!!不要在data下会被刷新!!!
!unzip /home/aistudio/data/data175242/ceshi.zip -d work/try
在终端中粘贴以下代码
cd work/try
rm -rf .ipynb_checkpoints
# 查看音频参数
import wave
import os
wavpath="work/try/" #填写音频文件路径
wavelist = os.listdir(wavpath)
def samp(wavFile):
f = wave.open(wavFile)
SampleRate = f.getframerate()
Channels = f.getnchannels()
print(wavFile,"采样率(SampleRate):", SampleRate,"通道数(Channels):", Channels)
for n in wavelist:
wavFile = wavpath+n
samp(wavFile)
根据上一条代码显示的采样率修改下一条代码的sr
- 当采样率为XXX时,sr=XXX
- target_sr=你想要转化到的采样率(推荐为24000)
- 然后接着运行
# 修改采样率为24000
import wave
import os
import librosa
import soundfile
wavpath="work/try/" #填写音频文件路径
wavelist = os.listdir(wavpath)
def chang(filename,newFilename):
y, sr = librosa.load(filename, sr= ) # sr=现在的采样率
y_16 = librosa.resample(y, orig_sr=sr, target_sr=24000) # 采样率转化
soundfile.write(newFilename, y_16, 24000) # 重新采样的音频文件保存
for i in wavelist:
wavname = i
filename = wavpath + wavname # 源文件
newFilename = wavpath+ wavname # 新采样率保存的文件
chang(filename,newFilename)
wavFile = wavpath + i
samp(wavFile)
# PaddleSpeech安装
!pip install paddlespeech --upgrade pip
# 安装auditok模块
!pip install auditok --upgrade pip
# 安装xpinyin模块
!pip install xpinyin --upgrade pip
# 会有报错但是没有关系,直接忽略
from paddlespeech.cli.asr.infer import ASRExecutor
import csv
import moviepy.editor as mp
import auditok
import os
import paddle
import soundfile
import librosa
from xpinyin import Pinyin
import warnings
warnings.filterwarnings('ignore')
# 语音转文本【报错没关系只要不停止运行,运行不了就重启整个项目】
asr_executor = ASRExecutor()
# 实例拼音转换对象
p = Pinyin()
itemlist = os.listdir("./work")
def audio2txt(path):
# 返回path下所有文件构成的一个list列表
print(f"path: {path}")
wavlist = os.listdir(path)
# 保证读取按照文件的顺序
wavlist.sort()
# 遍历输出每一个文件的名字和类型
for file in wavlist:
text = asr_executor(
audio_file=path + '/' + file,
device=paddle.get_device(), force_yes=True) # force_yes参数需要注意
textpinyin = p.get_pinyin(text,tone_marks='numbers',splitter=' ')
words.append(file.split('.')[0] + "|" + textpinyin + "\n")
print(file)
out.writelines(words)
out.flush()
return words
for item in itemlist:
print(item)
if(item.endswith(".zip")):
continue
else:
dirname = item.split('.')[0]
outtxt = dirname+'.txt'
out = open(outtxt, 'w', encoding='utf8')
path = "./work/"+dirname
words = []
audio2txt(path)
此文章为搬运
原项目链接