自从几年前发现,CATIA/Excel VBA可以调用蜂鸣器来演奏音乐后,突然发现一个诀窍:
每年出现一首比较火的歌的时候,都能用同样的方式蹭一波热度!
没错,今天咱们还是硬蹭!
要说今年春节期间的热点,没有“春山学”我是不信的。虽然没看春晚,但这首朗朗上口的歌莫名其妙就会了。
在看了B站各个大神用各种神奇的方式演奏这首歌之后,小狼也跃跃欲试,于是便有了今天这篇文章。
看成品视频之前,我决定有必要秀一下这张“十字绣”风格的Excel画作!这可是小狼一个单元格一个单元格填充画出来的(至于上春山打成了上春上,诶我就不改!你难不难受)
然后,是最终效果演示视频!
然后,咱们来解释原理:
首先,CATIA和Excel里都有VBA,在VBA里。我们通过声明,就可以引用win api中的Beep函数,控制电脑的蜂鸣器发声。
该函数有两个参数,第一个是发音频率,频率越高,音调越高。我们可以从网络上轻松地查到不同音阶对应的频率值。
第二个参数是发音的长度,单位是ms。假设一首歌的bpm(beat per minute)是120,那么表示它的速度是每分钟120拍,也就是1拍时间为500ms。
音乐的一个神奇之处是:两个差八度的音,频率值是二倍的关系。再加上《上春山》这首歌,只用到了“宫商角徵羽”,也就是12356五个音阶,因此,我们在程序里,只需定义一个八度内的这5个音的频率,其他八度的音阶通过乘/除2就可以得到。
然后,我们在Excel的表格里写出这样的程序能认识的曲谱:
就可以把这些参数传入自定义的函数,通过Beep演奏出来啦!
完整代码如下:
当然,包含代码和像素图的Excel源文件也为大家准备好啦!