Tao 的个人资料iNT@Leon照片日志列表更多 ![]() | 帮助 |
|
iNT@Leon弥介不知归处,桃花岛上人家 8月30日 [伪技术流] 音乐分析之分形方法(1)这大概会是一个无承诺系列文章[伪技术流],写到不想写或者实现方案为止。纯技术流的请当民科一笑置之,众闲官不妨当无良人无事呻吟,唯博君一笑尔。
同时,也当除草……
看到一个很有意思的说法,说是一般的音乐满足1/f^n噪声分布——取相邻音符的音程(两音阶之差)作统计,其出现的几率f和其音程d成反比。即
f = C/d^n
这一规律对于诸如classical、jazz之类旋律感较强的音乐满足得较好,而对于heavy metal、dark之类现代无调音乐差一些。
从这一角度说,音乐也符合一种分形规律。改写上式可得
log(f) = log(C) - n*log(d)
按照Mandelbrot的定义,这是一个Hausdoff维数为n的分形空间,当n>1时成立。
想起一段时间以前和人讨论过音乐分类的问题。当时猜想,对于音乐的分类可以通过简单的FFT进行。以谷歌音乐的挑歌功能为例:
(1)声调:对全曲作FFT,取音频范围(一般100Hz~20kHz)后,得到的频谱可近似看成仅包含音符信息的分布。对频谱做grey处理,仅取强度最强的一部分频率(例如10%),以除去高次谐波的影响,由此得到的信息近似为基频信息,由此反映了乐曲的音阶。再次对这些频率的强度求histogram,寻峰,则峰的中心位置代表了声调的高低,而峰宽反映了误差范围。
(2)音色:首先与上一步相同,取出频谱信息,并计算基频信息备用。分别对全音域及基频部分的频谱做0-1处理,消除强度的影响,得到两个histogram黑白图。现在,先用基频分布作为mask,对全音域频谱做AND运算;再将基频图的频率值翻倍(即得到二倍频),再次和全频域频谱AND;如是反复,得到三倍频、四倍频……对前述各倍频的分布取OR运算,再次0-1化。然后,取基频范围内的各频率及其对应的倍频求histogram,将其看做模式,对不同频率进行模式匹配,找出不同的模式数,则该信息代表了音色的丰富程度。
(3)节奏:回到原始的频谱分布(仅进行FFT所得),抽取低频部分(一般0.1Hz~10Hz),则该频谱反映了乐曲的旋律变化。对该频谱进行类似声调分析的处理,其中频率范围取0.3Hz~3Hz,基频选择阈值提高到2/3,则此时得到的的“声调”指标反映了乐曲的节奏。
未完待续…… |
||||
|
|