🥑Python生成音乐波

Python | 音乐波

我们将看到如何产生不同频率的波,如何制造自己的虚拟钢琴,以及播放歌曲。所有这些,都使用我们最喜欢的编程语言Python。

音符不过是频率

你知道吗? 贝多芬是有史以来最著名的作曲家之一,他的大部分职业都充耳不闻! 他仅凭直觉就能发现与观众共鸣的模式。 他(在潜意识中)将自己的创造力与数学逻辑混合在一起,创作了我们仍然珍爱的音乐。

为了简单起见,我们将使用钢琴作为参考乐器。因此,在开始之前,这里有一些基础知识。

钢琴基础知识

键盘(钢琴/乐器)的结构非常简单。它由多个八度组成。八度是一组12个键的组合-7个白键和5个黑键。

每个琴键在按下时会产生不同频率的声音,我们同时按下多个琴键可弹奏和弦。

白键被命名为C,D,E,F,G,A,B,而黑键则使用两个术语命名-Flat(b)(降号)和Sharp(#)(升号)。

如果黑键位于任何白键的右侧,则称为相应白键的升号。而且,如果它在左侧,则称为相应白键的降号。

例如,C和D之间的黑键有两个名称:C#(C-Sharp)和Db(D-Flat)。这是因为它位于C的右侧,也位于D的左侧。

我们在本文中将使用“ Sharp”术语以避免混淆。另外,“ Notes”和“ Keys”这两个词可以互换使用。

音乐波

您一定在物理课上听说过波浪。诸如电磁波,机械波,声波等之类的波在某个给定频率下围绕平衡反复振荡。

从数学上讲,波可以用如下的波浪方程来描述

其中,

=振幅或峰值

ff=频率

tt=时间

我们可以轻松地在Python中创建一个函数来生成一个关于时间的wave的NumPy数组,如以下代码所示:

您也可以使用某些库(例如matplotlib)绘制此数组,以清晰了解发生的情况。

440Hz的频率表示该波在一秒钟内完成了440个完整周期。换句话说,它在1/440秒内完成一个循环。

由于我们将1秒分为44100个部分,因此根据sample_rate,我们可以通过打印从0到int(44100/440)的元素来绘制一个周期。

import matplotlib.pyplot as plt
plt.plot(a_wave[0:int(44100/440)])
plt.xlabel('time')
plt.ylabel('Amplitude')
plt.show()

注意:如您所见,该周期在图中没有完全完成。理想情况下,此周期在100.227结束,但是由于我们使用的是离散时间间隔(在100),因此它与初始值(即0)略有不同。

虚拟钢琴

演奏音乐

完整代码

🏈page指点迷津 | Brief

Last updated