基于So-VITS-SVC4.1声音克隆音频异常的解决办法

这篇具有很好参考价值的文章主要介绍了基于So-VITS-SVC4.1声音克隆音频异常的解决办法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

通常在使用VITS进行声音克隆的时候出现声音沙哑或者大佐味,就是日本腔调,这个一方面是由于模型训练的问题,如果觉得模型训练没有问题的话就是参数,或者其他原因。这里介绍一个通用的解决办法。

声音预测参数

按照以下图片进行设置获取模型。

基于So-VITS-SVC4.1声音克隆音频异常的解决办法,Python 音频技术,音视频,算法,人工智能
上传好音频之后点击这些选项,然后生成音频。
基于So-VITS-SVC4.1声音克隆音频异常的解决办法,Python 音频技术,音视频,算法,人工智能

音频生成

首先使用微软的TTS进行文本转语音的操作,这里有个技巧就是不要整篇文字扔进去,拆分分段生成音频,然后克隆。具体为什么自己体会吧,这个是我尝试了多少次成功的。

先整理好你的文件目录如图。

基于So-VITS-SVC4.1声音克隆音频异常的解决办法,Python 音频技术,音视频,算法,人工智能

这里面的TTS_apiKey要换成你的,split_and_accumulate方法后面的50是拆分字数间隔。

import http.client
from xml.etree import ElementTree
import wave
import os
import requests
import pandas as pd
import hashlib
import platform
import uuid
import json
from moviepy.editor import *
import re
import time
from moviepy.audio.fx import audio_fadein, audio_fadeout

# 配置文档地址
# https://learn.microsoft.com/zh-cn/azure/cognitive-services/speech-service/language-support?tabs=tts
language = "zh-CN"
# en-US	英语(美国)
# ja-JP	日语(日本)
style = "narration-professional"
gender = "Male"
name = "zh-CN, YunxiNeural"
# name = "zh-CN, XiaochenNeural"
audio_rate = "1.2"
pitch="-10"

txt_save_path = "data.txt"
base_audio_path = "wav_each"

# 获取文件夹中的文件列表
file_list = os.listdir(base_audio_path)

# 删除文件夹中的每个文件
for file_name in file_list:
    file_path = os.path.join(base_audio_path, file_name)
    os.remove(file_path)


def TTS_make_2(text, audio_path):
    TTS_apiKey = ""
    params = ""
    headers = {"Ocp-Apim-Subscription-Key": TTS_apiKey}
    # AccessTokenUri = "https://eastus.api.cognitive.microsoft.com/sts/v1.0/issuetoken";
    path = "/sts/v1.0/issueToken"
    print("正在连接微软服务器以获取文本转语音访问令牌")
    AccessTokenHost = "eastus.api.cognitive.microsoft.com"
    conn = http.client.HTTPSConnection(AccessTokenHost)
    conn.request("POST", path, params, headers)
    response = conn.getresponse()
    print(response.status, response.reason)
    data = response.read()
    conn.close()
    accesstoken = data.decode("UTF-8")
    # print("Access Token: " + accesstoken)
    body = ElementTree.Element('speak', version='1.0')
    body.set('{http://www.w3.org/XML/1998/namespace}lang', '{}'.format(language))
    voice = ElementTree.SubElement(body, 'voice')
    voice.set('{http://www.w3.org/XML/1998/namespace}lang', '{}'.format(language))
    voice.set('{http://www.w3.org/XML/1998/namespace}style', '{}'.format(style))
    voice.set('{http://www.w3.org/XML/1998/namespace}gender', '{}'.format(gender))
    voice.set('name', 'Microsoft Server Speech Text to Speech Voice ({})'.format(name))
    voice.set('rate', audio_rate)
    voice.set('pitch', "medium")
    # 'Microsoft Server Speech Text to Speech Voice (zh-CN, YunxiNeural)'
    print('使用的声音是:{},风格是:{},性别是:{})'.format(name, style, gender))
    voice.text = text
    headers = {"Content-type": "application/ssml+xml",
               "X-Microsoft-OutputFormat": "riff-24khz-16bit-mono-pcm",
               "Authorization": "Bearer " + accesstoken,
               "X-Search-AppId": "07D3234E49CE426DAA29772419F436CA",
               "X-Search-ClientID": "1ECFAE91408841A480F00935DC390960",
               "User-Agent": "TTSForPython"}
    # Connect to server to synthesize the wave
    print("\n连接到服务器以合成音频")
    conn = http.client.HTTPSConnection("eastus.tts.speech.microsoft.com")
    conn.request("POST", "/cognitiveservices/v1", ElementTree.tostring(body), headers)
    response = conn.getresponse()
    # print(response.status, response.reason)
    if response.status == 200:
        # 保存音频文件
        data = response.read()
        conn.close()
        print("验证音频文件波长为: %d" % (len(data)))
        print(audio_path + ".wav")
        f = wave.open(audio_path + ".wav", "wb")
        f.setnchannels(1)  # 单声道
        f.setframerate(24000)  # 采样率
        f.setsampwidth(2)  # sample width 2 bytes(16 bits)
        f.writeframes(data)
        f.close()
        print("字幕:【{}】,音频文件生成成功。\n文件保存位置:{}".format(text, audio_path + ".wav"))
        # 验证音频文件
        try:
            AudioFileClip(audio_path + ".wav")
            print("验证音频通过,文件为 {}".format(audio_path + ".wav"))
        except:
            print("验证音频失败,文件为 {}".format(audio_path + ".wav"))
            print("正在重新生成音频,{}".format(audio_path + ".wav"))
            TTS_make_2(audio_path, text)
        print("字幕:【{}】,音频文件生成成功。\n文件保存位置:{}".format(text, audio_path + ".wav"))
    else:
        print("字幕:【{}】,音频文件生成失败,尝试重新生成")
        TTS_make_2(audio_path, text)
    print("-" * 50)


# 切分文字函数
def read_text_file(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        lines = file.readlines()
        lines = [str(i).replace("\n", "") for i in lines]
        lines = [str(i).replace("。。", "。") for i in lines]
        lines = [str(i).replace("*", "") for i in lines]
        lines = [str(i).replace("#", "") for i in lines]
        lines = [i for i in lines if i != ""]
    return lines


def split_and_accumulate(lines, max_length):
    result = []
    current_sentence = ''
    current_length = 0

    for line in lines:
        sentences = line.strip().split('。')
        for sentence in sentences:
            sentence += '。'  # 加上切分时去除的句号
            sentence_length = len(sentence)

            if current_length + sentence_length <= max_length:
                current_sentence += sentence
                current_length += sentence_length
            else:
                result.append(current_sentence)
                current_sentence = sentence
                current_length = sentence_length

    if current_sentence:
        result.append(current_sentence)

    return result


# TTS_make_2(text,audio_path)


# lines 为洗稿后文档读取的文字数据
lines = read_text_file(txt_save_path)
new_elements = split_and_accumulate(lines, 50)
# print(new_elements)

n = 1
for text in new_elements:
    audio_path = os.path.join(base_audio_path,str(n))
    TTS_make_2(text, audio_path)
    n = n + 1

# 拼接音频
wav_list = os.listdir(base_audio_path)
sorted_filenames = sorted(wav_list, key=lambda x: int(re.search(r'\d+', x).group()))
# print(sorted_filenames)
audio_clips = []
for filename in sorted_filenames:
    filepath = os.path.join(base_audio_path, filename)
    # print(filepath)
    audio_clip = AudioFileClip(filepath)
    audio_clip = audio_clip.audio_fadein(0.2)
    audio_clips.append(audio_clip)

final_clip = concatenate_audioclips(audio_clips)
final_clip.write_audiofile("result.wav")  # 保存拼接后的音频文件

选择wav_each文件夹下的音频文件批量批量上传预测就可以了。

基于So-VITS-SVC4.1声音克隆音频异常的解决办法,Python 音频技术,音视频,算法,人工智能
最终将音频文件在合成一个或者不合成都无所谓了。文章来源地址https://www.toymoban.com/news/detail-566144.html

到了这里,关于基于So-VITS-SVC4.1声音克隆音频异常的解决办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AI孙燕姿爆火背后:语音转换技术so-vits-svc

    AIGC的风最近终于吹到了语音生成领域。上面视频中\\\"孙燕姿\\\"翻唱周杰伦的《七里香》,该歌是AI歌唱,并非孙燕姿本人。背后核心技术来自声音转换,voice convertion,而不是之前我们讲过的声音克隆,voice clone。 语音转换,voice convertion,简称VC。简单来说,就是把一个人的声音

    2024年02月12日
    浏览(53)
  • Bert-VITS-2 效果挺好的声音克隆工具

    持中日英三语训练和推理。内置干声分离,切割和标注工具,开箱即用。请点下载量右边的符号查看镜像所对应的具体版本号。 教程地址: sjj​​​​​​​CodeWithGPU | 能复现才是好算法 CodeWithGPU | GitHub AI算法复现社区,能复现才是好算法 https://www.codewithgpu.com/i/fishaudio/Ber

    2024年02月21日
    浏览(44)
  • 民谣女神唱流行,基于AI人工智能so-vits库训练自己的音色模型(叶蓓/Python3.10)

    流行天后孙燕姿的音色固然是极好的,但是目前全网都是她的声音复刻,听多了难免会有些审美疲劳,在网络上检索了一圈,还没有发现民谣歌手的音色模型,人就是这样,得不到的永远在骚动,本次我们自己构建训练集,来打造自己的音色模型,让民谣女神来唱流行歌曲,

    2024年02月04日
    浏览(53)
  • 基于达摩院modelscope语音模型, 实现20句话声音克隆合成

    基于达摩院modelscope语音模型, 实现20句话声音克隆合成

    2024年02月06日
    浏览(46)
  • 基于LSTM实现乐器声音音频识别

    大家好,我是阿光。 本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10 语言环境:python3.7 编译器:PyCharm PyTorch版本:

    2023年04月20日
    浏览(61)
  • 本地训练,立等可取,30秒音频素材复刻霉霉讲中文音色基于Bert-VITS2V2.0.2

    之前我们使用Bert-VITS2V2.0.2版本对现有的原神数据集进行了本地训练,但如果克隆对象脱离了原神角色,我们就需要自己构建数据集了,事实上,深度学习模型的性能和泛化能力都依托于所使用的数据集的质量和多样性,本次我们在本地利用Bert-VITS2V2.0.2对霉霉讲中文的音色进

    2024年02月05日
    浏览(38)
  • 声音克隆,精致细腻,人工智能AI打造国师“一镜到底”鬼畜视频,基于PaddleSpeech(Python3.10)

    电影《满江红》上映之后,国师的一段采访视频火了,被无数段子手恶搞做成鬼畜视频,诚然,国师的这段采访文本相当经典,他生动地描述了一个牛逼吹完,大家都信了,结果发现自己没办法完成最后放弃,随后疯狂往回找补的过程。 最离谱的是,他这段采访用极其丰富的

    2024年02月08日
    浏览(42)
  • AIGC:语音克隆模型Bert-VITS2-2.3部署与实战

    单阶段文本到语音模型最近被积极研究,其结果优于两阶段管道系统。以往的单阶段模型虽然取得了较大的进展,但在间歇性非自然性、计算效率、对音素转换依赖性强等方面仍有改进的空间。本文提出VITS2,一种单阶段的文本到语音模型,通过改进之前工作的几个方面,有

    2024年04月17日
    浏览(60)
  • DDSP-SVC-3.0完全指南:一步步教你用AI声音开启音乐之旅

    本教程教你怎么使用工具训练数据集推理出你想要转换的声音音频,并且教你处理剪辑伴奏和训练后的音频合并一起,在文章的最后有用我自己声音处理的歌曲,哎哟,还怪不好意思的~,哈哈,快来试试看把! DDSP-SVC3.0训练推理克隆声音,超物有所值,训练完毕有伴奏处理教

    2024年02月03日
    浏览(41)
  • AIGC:使用bert_vits2实现栩栩如生的个性化语音克隆

    单阶段文本到语音模型最近被积极研究,其结果优于两阶段管道系统。以往的单阶段模型虽然取得了较大的进展,但在间歇性非自然性、计算效率、对音素转换依赖性强等方面仍有改进的空间。本文提出VITS2,一种单阶段的文本到语音模型,通过改进之前工作的几个方面,有

    2024年02月05日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包