音乐信号音符/乐谱提取

本文介绍了使用短时傅里叶变换(STFT)进行音乐信号音符提取的方法。通过设置合适的窗口长度,对10s、8kHz的双声道音乐信号进行时频分析,提取出各个时刻的主频率,进一步转化为对应的音符。实验结果显示了每个帧的主频及提取的音符,并分析了存在的误差来源。代码部分展示了如何实现这一过程。
摘要由CSDN通过智能技术生成

1 音符提取方法和基本原理

本实验使用时频分析的方法完成音乐信号的音符提取。时频分析选择短时傅里叶变换(STFT)完成。其具体方法是将信号用一定长度的窗进行分割成若干帧,对每一帧分别作傅里叶变换,得到它们的频率信息,而每一帧对应的位置表示了该帧所在的时间信息,由此可以实现时频分析的功能。

STFT的局限性在于,频率分辨率和时间分辨率的耦合关系。即,频率分辨率的上升会带来时间分辨率的下降,反之亦然,两者不能同时达到最高,分辨率取决于窗口长度。针对这一问题,本次实验需要设定合适的窗口长度,使之能够尽量同时满足频率和时间分辨率的要求。

对需要处理的音乐信号特征进行分析可以得到,该信号为时长为10s,采样频率为8kHz的双声道信号,两个声道的信号差别不大。针对音乐的节奏和采样频率,可以使用窗口长度为1000的矩形窗,即将信号分为80帧,每帧信号为125ms。然后将每帧信号做fft,再求模平方得到功率谱。求功率谱中能量最大值所对应的频率点,该频率即为这一时间段对应的住频率,由于每帧信号时间足够短,可以认为该频率对应的音符为这一时间段的主要音符,将其提取出即可。

在得到了各个时刻主频之后,要利用音符音高对应的基频获得主频对应的音符。由于实验者对吉他一窍不通,对钢琴有一定的涉猎,本实验以钢琴琴键为准提取音符。钢琴的中央C基频约为261.63Hz,唱“do”。根据国际标准,相邻的半个音(即钢琴相邻键)的基频相差2^(1/12)倍。由此标准可以通过将获得的主频和261.63求比例,再求以2^(1/12)为底的对数,获得其对应音符与中央C相差的键数,正值为更高,负值为更低。

钢琴一个八度的12个琴键本别可以表示为如下形式:

Do  Do#  Re  Re#  Mi  Fa  Fa#  Sol  Sol#  La  La#  Si

其中“#”表示比该音符高半个音的黑键。

为了表示不同八度的音符,用在该音符后面紧跟的数字表示。正数表示高若干八度,负数表示低若干八度。音符持续的时间用“*”后面的数字表示,数字代表持续的帧数,在时间上,即为该数字乘以125ms

用该方法表示的钢琴音符谱较为完备。

2实验结果

本次实验获得的每帧主频以及从信号中提取的音乐音符如下:

STEP 8:

the main frequency of each frame are:

[96.0, 1680.0, 376.0, 376.0, 1776.0, 1776.0, 888.0, 1776.0, 888.0,1680.0, 1680.0, 1680.0, 1864.0, 888.0, 888.0, 1656.0, 888.0, 368.0, 376.0,368.0, 368.0, 376.0, 296.0, 296.0, 888.0, 296.0, 296.0, 296.0, 1752.0, 888.0

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值