(2023-03-30)新的研究方向:8-bit, module music, WaveTable, 音源分离

This article is categorized as "Garbage" . It should NEVER be appeared in your search engine's results.

前置内容


有一部分内容写在上一篇笔记里:

🔗 [(新的研究方向)音频,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文件不行...



 Last Modified in 2024-02-14 

Leave a Comment Anonymous comment is allowed / 允许匿名评论