Table of Contents
前置内容
有一部分内容写在上一篇笔记里:
🔗 [(新的研究方向)音频,DSP硬件,AI风格迁移,开发板 - Truxton's blog] https://truxton2blog.com/2023-03-29-research-idea-audio-dsp_hardward-ai_music/
也有可能含有其他内容,不一定完全符合本笔记的题目
ffmpeg遍历wav转换为mp3
ffmpeg组合命令,用于遍历一个文件夹下的所有.wav文件,用ffmpeg把它们变成.mp3文件(.wav文件会被删除),暂时不考虑对音频流的质量要求:
(chatgpt帮我写的)
find /path/to/folder -type f -name "*.wav" -exec sh -c 'ffmpeg -i "$0" -codec:a libmp3lame -qscale:a 2 "${0%.wav}.mp3" && rm "$0"' {} \;
但这样生成的mp3文件比较大。也可以试试默认参数:
find /path/to/folder -type f -name "*.wav" -exec sh -c 'ffmpeg -i "$0" "${0%.wav}.mp3" && rm "$0"' {} \;
OpenMPT
OpenMPT
🔗 [OpenMPT - Discover the music inside… | OpenMPT - Open ModPlug Tracker] https://openmpt.org/
Polymath
介绍
试用了一下polymath:🔗 [samim23/polymath: Convert any music library into a music production sample-library with ML] https://github.com/samim23/polymath
放colab上面跑了(因为懒得配tensorflow和cuda环境)
注:2024年我把它丢到ubuntu主机上跑,结果似乎有所改善,可能是某个组件库进行了优化:见下面的笔记
效果挺好的,但有些地方不太适合直接拿来用,可能要改一改:
无论是什么歌曲放进去,它都默认生成这些文件:(其实是wav,这里改成了mp3)
对于某些乐曲(下面有演示),这6个分离音频里面可能会有2~3个音频文件是几乎空的。
如果你把这6个音频丢到logic pro里面同时播放,会发现有些曲目的6个音频可以很好的还原original audio。我测试了星之卡比的几首音乐,以及东方永夜抄的一首音乐,实际证明效果都还不错。
星之卡比-彩虹之路
我现在要用polymath处理GBA module music,所以我先找了首星之卡比进去试试。(kirby the amazing mirror)
下面举例的kirby the amazing mirror - 彩虹之路只需要3个分离音频文件就可以很好的还原:
注意:2024年整理这篇笔记并把去年的音频文件找出来的时候,我发现不知为什么polymath分出的音频总是原曲长度的2倍。似乎是某个环节出了问题,导致同一个音频文件被重复了一遍。(以下面的音频为例,原曲只有1分22秒)
原曲:
bass.mp3:
other.mp3:
drums.mp3:
其他的3个文件(piano.mp3, vocals.mp3, guitar.mp3)基本上是空音频。
然后在在logic pro里面把上面那3个最重要的音频分离文件(bass, other, drums)放在一起播放:
复原效果还不错:
polymath的原理
这是为什么呢?我先把我的猜想写下来:
也就是说,polymath当然不知道我丢进去的是module music,所以按正常的深度学习算法来处理我的音频文件。
当然,Blind Signal Separation本身就是一个难的不行的研究方向,只是我现在要处理的是module music,所以我要把场景简化很多。
我现在的期望是,我丢一个module music的wav文件进去,并告诉它我丢进去的是module music,它用MIDI(或者其他结构的Tracker)和一堆波表文件(Wavetable)来回复我,而且波表文件要尽可能简洁。在这个基础上,如果我发现它回复的内容又简洁(体积小)又好用(还原程度高),说明我丢进去的wav文件确实应该来自于module music的播放采样。
所以这种方法也可以用来判断一首音乐是否具有改写为module music的潜质。
夜雀的歌声
再看看《东方永夜抄-夜雀的歌声》
有2个音频文件几乎是空的(bass.wav和vocals.wav,所以下面的合并混音只会使用drums.wav, guitar.wav, other.wav, piano.wav):
直接放结果好了:
由于这篇笔记是我2024年整理的,所以我首先把去年刚写这篇笔记时跑的polymath音频文件找出来:
原曲:
polymath的4个分离文件在logic pro里面的混音:
注意听42秒~1分钟的那一部分,可以发现polymath没有做到100%还原,声音小了很多。
但情况发生了一些变化。2024年我不知为什么打算重新把polymath环境装上(不是colab)然后重新跑这几个音频,结果发现情况有所不同了:
(2024年重新跑)polymath的4个分离文件在logic pro里面的混音:
42秒~1分钟的那一部分明显有所改善(现在听起来非常接近原曲了)
把2023年的分离音频拿出来对比了一下,发现应该是2024年对 piano.wav 的分离效果改善了:如下图所示,上面的音轨是2024年的piano.wav,下面的音轨是2023年的wav(这里显示的是《夜雀的歌声》42秒开始的那一部分片段的波形),可以明显看出2024年分离出了更为完整的钢琴音频:
2024年分离的piano.wav:
2023年分离的piano.wav:
(2024)Logic pro的混音效果优于ffmpeg(均为默认配置)
(本条为2024补充)顺便我还发现了ffmpeg叠加音轨的效果不知为什么不如logic pro:
ffmpeg叠加音轨我用的是这个教程里的命令:🔗 [how to merge audio using ffmpeg, not concat - Super User] https://superuser.com/questions/644768/how-to-merge-audio-using-ffmpeg-not-concat
ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex amix=inputs=3:duration=first:dropout_transition=3 OUTPUT
以上面的《夜雀的歌声》为例,同样是6个polymath的分离音频(2024年重新制作),
ffmpeg命令的结果:
logic pro的结果(也就是上面这个音频):
Serum/血清/WaveTable
现在来学习下Wavetable
Serum/血清:
🔗 [Serum: Advanced Wavetable Synthesizer] https://xferrecords.com/products/serum
介绍视频:
🔗 [如何正确使用Serum_哔哩哔哩_bilibili] https://www.bilibili.com/video/BV19s4y1W7s9/
截图:
好像明白了一些。自己自定义信号的形状,生成不同奇特的声音效果。当然,如果自定义的信号不是简单的函数,那么生成的波表文件就会比较大。简单的函数举例有:sawtooth
所以回到之前的问题。要想之前的那个module music解析器效果好,它需要生成一个结构相对简单的波表文件,这样才比较“复古”,否则就不能很好的衡量音乐的某些特质(成为复古module音乐的潜质)了。当然,如果生成的波表文件就是简化不了,说明wav文件不行...