AI 翻唱

本文记录用 So-vits-svc 4.1 训练模型全过程。

需要用到的工具

UVR:用于人声歌声分离,降噪。 (项目传送门)

Slicer-gui(Audio-Slicer):用于音频裁剪。(项目传送门)

So-vits-svc 4.1:训练模型,GitHub项目中详细介绍了模型使用方法,本文使用 4.1 版本。(项目传送门)

Adobe Audition:后期音频编辑。(天翼云下载)

数据准备

准备一段需要训练的音频文件,说话干声或者是清唱,时间最好在 1-2 小时,如果有伴奏需要进行人声分离。

本次使用锁那的生放送弹唱录音,时长 2.5 小时左右。

 如果有多个音频需要合成一个方便后面处理:

import os
from pydub import AudioSegment
def che_audio(f):if f.endswith('.mp3') or f.endswith('.mp4') or f.endswith('.wav'): return Trueelse: return False
def merge_audio(inf,outf):comb=AudioSegment.empty()files=os.listdir(inf)files.sort(key=lambda x:os.path.getctime(os.path.join(inf,x)))for f in files:if che_audio(f):f_pth=os.path.join(inf,f)x=AudioSegment.from_file(f_pth)comb+=xcomb.export(outf,format="wav")if __name__ == "__main__":inf="D:\\study\\AI\\ai_music\\data"outf="combined.wav"merge_audio(inf,outf)

人声分离

如果音频数据中含有歌曲伴奏,需要进行这一步。

打开 UVR ,选择输入音频就是待处理的音频文件,输出路径,模型选择 Demucs,其他默认设置即可。注意 UVR 的安装目录中不能包含中文名。

Start Processing 后会生成两个文件,后面带有 _(Vocals) 是需要的干声文件,_(Instrumental) 为分离出的伴奏。

降噪

还是使用 UVR ,输入音频换成刚才处理好的干声音频,模型选择 VR Architecture,其他保持默认设置。

 处理结果:

音频切割

这里可以自行写脚本完成,分为两步:一是去除数据集中静音部分,然后把音频分割为时长在 3~15 秒之间的数据段。

import os
from pydub import AudioSegment
from random import randint
from pydub.silence import split_on_silencedef Cut_data(inf,out_dir):audio=AudioSegment.from_wav(inf)# 分割音频去除静音部分,下面参数可以自行修改chunks=split_on_silence(audio,min_silence_len=1000,  # 认为是静音的最小长度,单位为毫秒silence_thresh=-50,    # 静音判断的阈值,单位为dBFSkeep_silence=200       # 保留的静音时长,单位为毫秒)l=3000             # 最小片段时长,单位为毫秒r=10000            # 最大片段时长,单位为毫秒seg=AudioSegment.empty()cnt=0for i in chunks:st=0while st<len(i):k=randint(l,r)ed=st+kif ed>len(i): ed=len(i)seg=i[st:ed]pth=os.path.join(out_dir,f"{cnt}.wav")seg.export(pth,format="wav")cnt+=1st=ed
if __name__ == "__main__":inf="D:\\study\\AI\\ai_music\\data\\1_1_【音频】[鎖那_sana]生放弹唱精选合集_(Vocals)_(Vocals).wav"out_dir="D:\\study\\AI\\ai_music\\data\\cut_data"Cut_data(inf,out_dir)

也可以通过音频切割工具 Audio-Slicer 完成

处理后的数据保存到文件夹中。

模型训练

把数据文件放到 dataset_row 目录下:

打开 启动webui,在训练窗口识别数据集。 

识别出数据集后进行数据预处理,没有报错信息进行下一步

下面根据提示结合本机性能设置参数

写入配置文件后,可以在 configs 文件中的 config.json 查看训练参数和数据参数,也可以直接修改该文件来设置参数

第一次训练选从头开始训练,如果从上一个训练进度继续训练选择继续上一次训练进度。

 设置是每 200 步生成一次 Epoch,主要关注损失值 reference_loss,该值越小越好。在训练的过程中 reference_loss 的值是震荡的。

在文件夹 logs/44k 中保存了G开头的文件为最近的模型文件,后面是步数。

打开脚本文件 启动tensorboard.bat 可以查看训练可视化图形

访问网址,找到 loss 图像,可以选择一个 loss 值较低的模型来使用。

推理

在推理窗口选择推理模型和配置文件,编码器按照默认设置。

上传需要转换的音频,音频也需要是经过处理后的不含伴奏的干声。如果电脑性能不够好的话把音频切割为几个部分再分别推理。

但是还是推荐把音频拆开批量上传,进行推理后把结果合到一起。这样不仅速度快,还可以对产生哑音或者拟合不好的音频段进行单独处理。

推理可以保留静音,不影响推理,也方便后期音频合成

import os
from pydub import AudioSegment
from random import randint
from pydub.silence import split_on_silencedef Cut_data(inf,out_dir):audio=AudioSegment.from_wav(inf)l=5000             # 最小片段时长,单位为毫秒r=10000            # 最大片段时长,单位为毫秒seg=AudioSegment.empty()cnt=0st=0while st<len(audio):k=randint(l,r)ed=st+kif ed>len(audio): ed=len(audio)seg=audio[st:ed]pth=os.path.join(out_dir,f"{cnt}.wav")seg.export(pth,format="wav")cnt+=1st=ed
if __name__ == "__main__":inf="D:\\study\\AI\\ai_music\\Inference\\data\\似水流年\\1_1_【音频】吳若希 Jinny - 似水流年 (劇集 _(Vocals)_(Vocals).wav"out_dir="D:\\study\\AI\\ai_music\\Inference\\data\\似水流年\\cut"Cut_data(inf,out_dir)

如果推理是男转女或者女转男,需要修改变调的值,男声翻唱女声为负值,女生翻唱男生为正值。男转女变调可以设置到 6~10,根据具体情况进行调整。

 

使用批量转换,结果会被保存到 results 文件夹中。

最后把推理出的切片声音整合到一起形成干声,再用 Adobe Audition 调节音频后多轨合成即可。

结果

【AI鎖那】-《似水流年》Cover. 吴若希_哔哩哔哩_bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/3753.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

讲讲⾼可用的原则?

大家好&#xff0c;我是锋哥。今天分享关于【讲讲⾼可用的原则&#xff1f;】面试题。希望对大家有帮助&#xff1b; 讲讲⾼可用的原则&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在当今信息化时代&#xff0c;随着互联网技术的快速发展&#xff0…

Java 基于SpringBoot+Vue 的公交智能化系统,附源码、文档

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

Leetcode 二叉树中的最大路径和

算法思想 这道题要求在一棵二叉树中找到路径和最大的路径。路径可以从树中任意一个节点开始&#xff0c;到任意一个节点结束&#xff0c;但路径上的节点必须是连续的。 算法使用递归的方式来遍历树中的每个节点&#xff0c;并在遍历过程中计算包含当前节点的最大路径和。具体…

《2024中国城市音乐产业发展指数报告》重磅发布

11月4日,《2024中国城市音乐产业发展指数研究报告》(以下简称“报告”)在成都首次公开发布。该报告由中国音像与数字出版协会音乐产业促进工作委员会指导编制,道略产业研究院、四川音乐学院孙洪斌教授团队深度参与。 该指数评价对象涵盖直辖市、副省级城市和省会城市等共36个城…

解锁金融未来,Python带你玩转大数据!

厌倦了复杂的金融报表&#xff0c;想用数据驱动投资决策&#xff0c;却不知从何下手&#xff1f; 别担心&#xff01; 《Python金融大数据分析快速入门与案例详解》带你轻松入门&#xff0c;掌握数据分析利器&#xff0c;成为金融领域的弄潮儿&#xff01; 为什么选择这本书&…

STM32 + CubeMX + 硬件SPI + W5500 +TcpClient

这篇文章记录一下STM32W5500TCP_Client的调试过程&#xff0c;实现TCP客户端数据的接收与发送。 目录 一、W5500模块介绍二、Stm32CubeMx配置三、Keil代码编写1、添加W5500驱动代码到工程&#xff08;添加方法不赘述&#xff0c;驱动代码可以在官网找&#xff09;2、在工程中增…

template advanced

一.仿函数再探 stl_stack/queue-CSDN博客 在priority_queue中&#xff0c;我们介绍了仿函数作为第三个参数来改变堆的类型&#xff0c;而仿函数还有其他的用处。 那么我们是否可以借助优先级队列来对日期类进行排序呢&#xff1f; 答案是可以的&#xff0c;但前提是该日期…

spring源码[spring启动流程]

spring启动流程 AnnotationConfigApplicationContext的构造方法 1.父类构造方法&#xff0c;构造一个DefaultListableBeanFactory 在调用AnnotationConfigApplicationContext的构造方法之前&#xff0c;会调用父类GenericApplicationContext的无参构造方法&#xff0c;会构造…

使用Python做一个微信机器人

使用Python制作微信机器人是一个有趣且实用的项目&#xff0c;它可以让您自动化处理微信消息、监控微信群、甚至实现智能聊天等功能。 请求参数 Header 参数 export interface ApifoxModel {"X-GEWE-TOKEN": string;[property: string]: any; } Body 参数applicat…

Python-创建并调用自定义文件中的模块/函数

背景&#xff1a;在Python编程中&#xff0c;我们常常需要创建自己的专属文件&#xff0c;以便帮助我们更高效&#xff0c;快捷地完成任务。那么在Python中我们怎么创建并调用自己文件中的模块/函数呢? 在Python中调用自定义文件&#xff0c;通常是指调用自己编写的Python模块…

【C++】C++17结构化绑定、std::optional、std::variant、std::any

二十二、C17中的结构化绑定、std::optional、std::variant、std::any 本部分是一个小系列&#xff0c;介绍C17中新引入的、用来解决各种不同返回情况的、标准库新组件。 1、C的结构化绑定 结构化绑定structured bindings是C17中引入的一项特性&#xff0c;它允许开发者方便地…

ntkrnlmp.exe导致蓝屏死机的解决方法

在使用Windows操作系统的过程中&#xff0c;用户可能会遇到由ntkrnlmp.exe文件错误引发的蓝屏死机&#xff08;Blue Screen of Death, BSOD&#xff09;问题&#xff0c;这不仅影响了日常的工作效率&#xff0c;也可能造成数据丢失的风险。本文将为您提供一系列即时排查与修复n…

U3D游戏开发之骨骼动画相关

目录 1 作为U3D程序如何制作骨骼动画 2 骨骼动画程序代码相关 这个内容我在很久之前就想写了&#xff0c;很多项目也与骨骼动画挂钩&#xff0c;今天我们揭秘的是2D骨骼动画。来聊一聊大家可能非常关注的两个问题&#xff1a;作为程序如何制作骨骼动画&#xff1f;接到美术的骨…

java:题目:用Java实现简单的自取取款操作

import java.util.Scanner; public class ATM {public static void main(String[] args){//自主取款主类Scanner scnew Scanner(System.in);System.out.println("请输入账户号码&#xff1a;");String BankAccoutsrsc.nextLine();/BankAccout3 newBankAccoutnew Bank…

VLAN 高级技术 ——QinQ的配置

QinQ的概述&#xff1a; QinQ技术是一种扩展虚拟局域网&#xff08;VLAN&#xff09;数量空间的技术&#xff0c;通过在802.1Q标签报文的基础上再增加一层802.1Q的Tag来实现。以下是对QinQ技术的详细概述&#xff1a; QinQ技术的定义与背景 定义&#xff1a;QinQ&#xff08…

不得不承认供电公司信息宣传向媒体投稿的好方法找到了

初入国网供电公司,我被分配到了信息宣传部门,负责每月的信息宣传投稿任务。这项任务看似简单,实则充满挑战。一开始,我满怀热情,以为只要写出高质量的文章,就能顺利发表。然而,现实给了我当头一棒。传统的邮箱投稿方式,不仅竞争压力大,审核严格,而且周期漫长。每次投稿后,我总是…

『YOLOV5』| 一文搞定训练过程中的意外终止、以及想继续增加训练轮数!

文章目录 情况一&#xff1a;意外训练中断&#xff08;程序未训练完成&#xff0c;想完成目标训练轮数&#xff09;情况二&#xff1a;自动训练完成&#xff08;程序已完成训练&#xff0c;想增加训练轮数&#xff09; 情况一&#xff1a;意外训练中断&#xff08;程序未训练完…

GCC编译器的`-Wall`、`-Wextra`和`-pedantic`选项解读

gcc是广泛使用的开源编译器&#xff0c;-Wall、-Wextra和-pedantic是gcc中用于控制警告信息的选项&#xff0c;以下是详细介绍&#xff1a; -Wall&#xff08;启用大部分警告&#xff09; 功能&#xff1a;-Wall 选项用于启用一系列常用的警告信息&#xff0c;这些警告能帮助…

MMBench-Video:上海 AI Lab 联合多所高校推出长视频理解基准测试工具,全面评估 LVLMs 视频理解的能力

❤️ 如果你也关注大模型与 AI 的发展现状&#xff0c;且对大模型应用开发非常感兴趣&#xff0c;我会快速跟你分享最新的感兴趣的 AI 应用和热点信息&#xff0c;也会不定期分享自己的想法和开源实例&#xff0c;欢迎关注我哦&#xff01; &#x1f966; 微信公众号&#xff…

高频电子线路---调角频谱与频宽

目录 调角频谱(FM单频调制) 带宽 调频方法 直接调频方法与电路 变容二极管 如何提升频偏? 1. 增大调制信号的幅度&#xff08;增大调制深度&#xff09; 2. 提高调制信号的频率 3. 提高调制深度&#xff08;调制指数&#xff09; 4. 增加发射功率 5. 使用特殊的调制…