【11.4修复】csmsc数据集制作快捷工具

csmsc数据集制作快捷工具——保姆级教程

  • 【更新日志】
  • 11.4对音频采样率声道数进行调整,以解决GPU爆炸的问题

用途

在训练自定义语音合成模型时,需要仿照标准格式制作自己的数据集
(这个项目是针对[类似csmsc的数据集])

然而关于如何制作数据集的教程却少之又少,数据集的标准也时常让初学者摸不着头脑,

为了以上问题并提高制作数据集的效率,这个项目应运而生。

使用方法

制作完数据集之后直接按要求上传到这个项目↓↓↓根据提示运行就能简单完成语音克隆了

PaddleSpeech自定义语音克隆

数据集需要【wav音频】+【labels.txt】(具体在下文展开)

1.音频标准化

1.1转换音频为wav格式

开始制作前请准备好需要转换的音频,请自行将格式转换为wav格式

  • 如何查看音频格式?
  • 请打开搜索引擎输入“如何查看文件后缀”并加上你的电脑系统(比如win7 win10)
  • 如果你不知道自己的电脑系统是什么,请搜索“如何查看电脑型号”
  • 如何转换音频格式?
  • 如果你具有python基础可以尝试使用FFmpeg,或其他方式
  • 如果你不具备编程基础,可以尝试使用格式工厂
  • 如果你不明白如何操作,请搜索“如何转换音频格式 格式工厂”,或“如何转换音频格式 ffmpeg”

1.2上传wav文件

请将准备好的wav文件压缩后上传到work文件夹下

  • 如何压缩文件?(请打开搜索引擎……)
  • 如何上传压缩包?

    当压缩包大小小于150M时

    左侧操作栏进入work文件夹,搜索框上方第三个按钮,点击后上传压缩包,然后右键解压


    当压缩包大小大于150M时

    不能直接上传,因此把压缩包上传至数据集,再挂载到当前项目即可

    具体操作如下:

    1.返回AI Studio数据集(←直接点这个蓝色的字就能前往)

    2.点击【创建数据集】,把压缩包上传到数据集里,数据集是不公开的所有可以放心上传,话说AI Studio的上传下载速度是某盘的十几倍……

    3.然后返回个人中心

    4.点击【项目】→【创建和fork的项目】→选择本项目点击进入

    5.点击右上角【修改】→【下一步】→【添加数据集】

    6.重新进入项目,能够在左侧工具栏【数据集】看到刚才添加的数据集,有时看不到那是因为操作太快了平台没跟上,等待一会儿就好

现在可以运行以下代码了,只要点击左上角的按钮就可以了
在这里插入图片描述

work文件夹下可以存在多个文件夹,但是只能识别到第一层的音频文件

1.3修改音频采样率

音频采样率24000

# 解压数据集【解压过的不用运行】
# !unzip -oq 【数据集路径】 -d 【解压路径】
# 解压到work文件夹下!!!不要在data下会被刷新!!!
!unzip /home/aistudio/data/data175242/ceshi.zip -d work/try

在终端中粘贴以下代码

cd work/try

rm -rf .ipynb_checkpoints

步骤如下:

在这里插入图片描述
【11.4修复】csmsc数据集制作快捷工具_第1张图片
【11.4修复】csmsc数据集制作快捷工具_第2张图片
【11.4修复】csmsc数据集制作快捷工具_第3张图片

# 查看音频参数
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)
    

2.生成labels.txt

# 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)

此文章为搬运
原项目链接

你可能感兴趣的:(ffmpeg)