[音乐学习] AI音乐向100分迈进,钢琴曲音质修复
[音乐学习] AI音乐向100分迈进,钢琴曲音质修复
[音乐学习] AI音乐向100分迈进,钢琴曲音质修复 [音乐学习] AI音乐向100分迈进,钢琴曲音质修复 Created on April 11, 2024 19420 Original Audio or video is not supported Enhanced Audio or video is not supported 输入 Code block Bash Copy python .\start.py 在cmd环境运行 原始的start.py代码里是默认cuda运行的 如果用cpu跑,还得把里面的cuda改成cpu,有点麻烦,我做了个简单的条件语句,这样可以在判定cuda不可用时自动转为cpu模式。 Code block Bash Copy from piano transcription inference import PianoTranscription, sample rate, load audio import os import torch directory = './Input' file lists = os.listdir(directory) music num = len(file lists) print("转换的歌曲数量:" + str(music num)) device preference = 'cuda' if torch.cuda.is available() else 'cpu' for i in file lists: file path = './Input/' + i output path = './Output/' + i[: 4] + ".mid" (audio, ) = load audio(file path, sr=sample rate, mono=True) Transcriptor transcriptor = PianoTranscription(device=device preference) 'cuda' | 'cpu' Transcribe and write out to MIDI file transcribed dict = transcriptor.transcribe(audio, output path) print("已转换完成全部音乐!") 转谱完成后,在output文件夹找到对应的mid文件 检查乐谱 目前测试下来,主旋律基本都是可以还原的,但也会出现一些问题,比如AI音乐里的噪声可能会识别成音符,形成一些错误信息,这个时候需要具备一定乐理知识去修复(这部分我后续会找些办法解决更新)。 测试下来整体完成度大概90%,音乐的旋律基本没问题,不过还有一些细节需要改进,后面我会有进展后持续更新,可以听听转置完成的音效,比AI生成的要好多了。 重奏输出 修谱和重奏软件可以去下载一个Musehub,里面的Muse Score是一个轻量级的乐谱编辑工具,可以实时修改乐谱,试听,以及按照高清音效进行输出 支持导出乐谱,音频,Midi,XML等常用的音频编辑格式,支持最高320kbps,32000 44800Hz的高清输出 下面是转录过后(还没有修谱)的demo,耳机的差异会更明显 转谱 Unable to preview. Please download the file. 待解决的问题 1. 有延长音的部分,可能会抢节奏 2. 因为我转的示例是爵士乐,会有很多临时的升降号,可能会导致判断混乱 3. 高音和低音的符点会相互影响,目前测试下来,低音的影响会更多一些 4. 基础的修谱是保留主旋律,去除杂音,但结果可能是旋律太单调,容易被平台拒审,听起来也缺少立体感 优化的方向(测试中) 超参数调整 脚本文件config.py • sample rate = 16000: 采样率设置为16000 Hz。这对于语音处理足够,但对于复杂的音乐转换可能会损失一些细节。一种状态可以考虑调低采样率,获得更好的主旋律(比如8000),一种是提升采样率(比如44100)获得更好的细节捕捉。 • classes num = 88: 这指的是钢琴的88个键。这个设置通常不需要更改。 • begin note = 21: MIDI钢琴中最低音的编号,无需更改。 • segment seconds = 10: 指定了处理的音频片段长度为10秒。调整此长度可能会影响模型的输入,可以根据曲子的BPM做调整,尽可能整小节的处理。 • hop seconds = 1: 这是窗口的跳跃时间,调整这个参数可以改变生成的MIDI的时间分辨率。如果识别率不佳,可以调整到更细的时间(比如0.5)增加识别精度,但相应会提升计算量。 • frames per second = 100: 每秒的帧数,影响时间上的细节。对于比较复杂的音乐,可以用更高的帧数(比如200)来提升事件的捕捉效率,但也会增加计算量。 • velocity scale = 128: 力度范围,通常是MIDI标准,不需要调整。 按音高区分高低音分类 MID文件一共有128个音高符号,分别对应0 127,MIDI编号60通常对应中央C(C4),每增加一个数字,音高就上升半音。所以在inference.py里增加一段分类逻辑来辅助高低音的分配: Code block Python Copy 定义高音区和低音区的MIDI编号范围 Musehub Original Audio or video is not supported Original Audio or video is not supported Enhanced Audio or video is not supported Enhanced Audio or video is not supported 输入 在cmd环境运行 原始的start.py代码里是默认cuda运行的 如果用cpu跑,还得把里面的cuda改成cpu,有点麻烦,我做了个简单的条件语句,这样可以在判定cuda不可用时自动转为cpu模式。 转谱完成后,在output文件夹找到对应的mid文件 检查乐谱 目前测试下来,主旋律基本都是可以还原的,但也会出现一些问题,比如AI音乐里的噪声可能会识别成音符,形成一些错误信息,这个时候需要具备一定乐理知识去修复(这部分我后续会找些办法解决更新)。 测试下来整体完成度大概90%,音乐的旋律基本没问题,不过还有一些细节需要改进,后面我会有进展后持续更新,可以听听转置完成的音效,比AI生成的要好多了。 重奏输出 修谱和重奏软件可以去下载一个Musehub,里面的Muse Score是一个轻量级的乐谱编辑工具,可以实时修改乐谱,试听,以及按照高清音效进行输出 Musehub 支持导出乐谱,音频,Midi,XML等常用的音频编辑格式,支持最高320kbps,32000 44800Hz的高清输出 下面是转录过后(还没有修谱)的demo,耳机的差异会更明显 转谱 Unable to preview. Please download the file. 转谱 Unable to preview. Please download the file. 待解决的问题 1. 有延长音的部分,可能会抢节奏 2. 因为我转的示例是爵士乐,会有很多临时的升降号,可能会导致判断混乱 3. 高音和低音的符点会相互影响,目前测试下来,低音的影响会更多一些 4. 基础的修谱是保留主旋律,去除杂音,但结果可能是旋律太单调,容易被平台拒审,听起来也缺少立体感 优化的方向(测试中) 超参数调整 脚本文件config.py • sample rate = 16000: 采样率设置为16000 Hz。这对于语音处理足够,但对于复杂的音乐转换可能会损失一些细节。一种状态可以考虑调低采样率,获得更好的主旋律(比如8000),一种是提升采样率(比如44100)获得更好的细节捕捉。 • classes num = 88: 这指的是钢琴的88个键。这个设置通常不需要更改。 • begin note = 21: MIDI钢琴中最低音的编号,无需更改。 • segment seconds = 10: 指定了处理的音频片段长度为10秒。调整此长度可能会影响模型的输入,可以根据曲子的BPM做调整,尽可能整小节的处理。 • hop seconds = 1: 这是窗口的跳跃时间,调整这个参数可以改变生成的MIDI的时间分辨率。如果识别率不佳,可以调整到更细的时间(比如0.5)增加识别精度,但相应会提升计算量。 • frames per second = 100: 每秒的帧数,影响时间上的细节。对于比较复杂的音乐,可以用更高的帧数(比如200)来提升事件的捕捉效率,但也会增加计算量。 • velocity scale = 128: 力度范围,通常是MIDI标准,不需要调整。 按音高区分高低音分类 MID文件一共有128个音高符号,分别对应0 127,MIDI编号60通常对应中央C(C4),每增加一个数字,音高就上升半音。所以在inference.py里增加一段分类逻辑来辅助高低音的分配: 前阵子Suno特别火,有大佬出了一个用Suno去网易云投稿成为音乐人的攻略,但Suno有个问题就是,生成的音乐音质太差,不仅噪音多,而且会出现无法修复的粘连音,随便听听可能还行,但经不起仔细推敲。于是就有了扒谱重置的想法。 网易云音乐投稿需要320kbps,44.1kHz的母带要求,所以要成为音乐人的级别,对于没有乐理基础的普通人(比如我),还有很长的路要走。选择钢琴曲做实验,本身钢琴相对初学者比较好控制,键盘乐也相对好辨认,大佬们可以交流下其他乐器。 最简单的音质修复 一开始试了试线上已经有的啥瓜音质修复工具,比如这个团子ai,六块钱一首,修复完的确能有一些降噪,但是一些粘连音还是无法解决。 团子ai 原始音频听起来会很糊,每个键都听不清楚。 修复以后相对清晰了很多,但仍然有不少瑕疵,比如粘连音,高音会破音等问题,且要氪金。。。 我自己也写了个提升音质的模型,支持44.1khz采样率,320kbps码率转化,性能还会调优,Colab免费用 https://colab.research.google.com/drive/1y0kyNoVNDbs1VNKR6kxAr2wsV QWVu0 扒谱的模型和代码准备 将音乐转成MIDI五线谱,然后通过成熟的合成器重新演奏,目前看是最稳定的合成方式了。字节已经在Github发布了古典钢琴曲数据集GiantMIDI Piano,可以拿来抄作业,用钢琴转谱技术识别音频,并转换成可编辑的MIDI格式重新演奏。 GiantMIDI Piano 知乎专栏上的大佬在这个项目上做了些改进,可以批量转谱,很方便。下面是代码包和钢琴模型包,直接下载即可 链接: https://pan.baidu.com/s/1aqnlgfFCjB0KIlPEB8RcRg 提取码: xubj https://pan.baidu.com/s/1aqnlgfFCjB0KIlPEB8RcRg 百度要会员比较麻烦,我另外传了个wps:https://kdocs.cn/join/gezxr3f 注意里面包含了训练好的模型,ffmpeg和python安装包,为了避免多个python版本冲突,建议大家自己安装python,用pip安装ffmpeg库。 运行环境 以Windows为例: Python:由于实用到了f string,至少要python 3.6以上版本,推荐现在比较流行的python 3.10 ffmpeg:需要把ffmpeg里bin文件夹设置path环境变量,让python可以正常调用 在cmd界面运行 ffmpeg,可以查看到版本信息,就是变量设置成功了 cuda:如果使用GPU来处理音频,可以用cuda提速,我是3050显卡,一首歌半分钟就转完了 pytorch:一定要对应cuda对应的支持版本,否则程序无法正确运行 目前cuda官网最新的版本是12.4,对应找到配套的Pytorch版本,cuda12.1,实测可以匹配cuda 12.4 12.4 Pytorch 下载完以后默认安装就可以 本地运行 完成安装 如果没有N卡,可以用cpu代替cuda进行运算处理,缺点就是速度慢一些,代码中可以做一些相应调整(后面会讲到) 生成MID文件 把源文件放在input文件夹(支持MP3,WAV) 可以直接用vs code运行start.py,也可以右键点击文件夹空白,打开Powershell窗口