# Python音乐信号处理和理论可视化

{% tabs %}
{% tab title="关键词" %}
Python | 音乐信号 | 数学 | Numpy | scipy | Matplotlib | 傅里叶变换
{% endtab %}

{% tab title="梗概" %}
### 音乐信号处理 | 声音定义

如何发出声音？ 您可以鼓掌，敲门或唱歌以发出声音，所有这些动作都会引起某种形式的振动。 振动以波的形式通过介质（空气，水等）传播到我们的耳朵中。 但是，我们无法听到所有振动，因为某些频率不在我们的听觉范围内。 我们将较高的频率视为较高的音调，并且不同的音符具有不同的频率。 下面显示了C调和D调的声波。

如您所见，D波完成一个周期所花费的时间更少，因此具有更高的频率。

#### Python造音

为了使声音具有特定的音调，我们需要知道频率。 维基百科上有一张很棒的表，可将钢琴上的琴键映射到频率。 通常，如果我们使用C调上方的A的频率为440Hz（备受争议的音乐会音高）的约定，则可以使用以下公式得出任何音符：

其中n是键的等级（A4是第49个键）。

这篇文章有很棒的示例代码，说明如何计算音符频率并产生声波。这里的代码非常相似，只是扩展到88个键，而不是一个八度：

上面的函数返回一个字典，该字典将音符名称映射到相应的频率（以赫兹为单位）。现在，我们要C调中间波：

这里的持续时间以秒为单位，采样率决定声音的质量，振幅决定音量。消费类音频非常常见的采样率为44.1KHz（每秒44,100个采样）。

使用上面的两个函数以及Scipy的wavfile模块，我们可以创建一个中音C调的.wav文件。

这是输出音频。

#### 逼真声音

至少可以说，上面的音频很无聊，没有一个合适的人会认为它是音乐。 它缺乏将乐器的声音与之关联的许多特征，而且在整个过程中都过于一致。 首先，我们将其与实际钢琴上演奏的中音C调进行比较。

由于音色（音质或特性），同一音符在钢琴上的演奏与在小提琴上的演奏有所不同。 当我们按下钢琴上的琴键时，它不仅会发出一种声音（或一种波形），还会产生我们称为泛音（谐波）的许多其他声音。 不同的乐器会产生不同的泛音，因此会产生音色，即使在演奏相同音符的情况下，我们也可以将一种乐器与另一种乐器区分开。

再次使用Scipy，我们将加载钢琴音频并使用Matplotlib绘制声波。

即使它们应该具有相同的音调，这看起来也完全不像第一部分中的纯正弦波！它不是那么平滑，并且幅度会发生变化。

由于存在泛音，该波不是“平滑的”。 上面的声波实际上是频率为中音C的倍数（包括音符本身，包括1）的波的组合。在这种情况下，中音C是我们的基本音符。 这些泛音是什么？ 结果表明，高于（C5）一个八度的C频率恰好是中C频率的两倍，因此这是我们的候选者之一。 实际上，所有C的频率都是彼此的倍数。 但是，当我们按下中间的C键时，听起来并不像我们同时按下所有C键。 这是因为泛音比基本音要模糊得多。 为了模仿钢琴的声音，我们将需要知道如何将这些泛音应用到基础上。

将信号中不同频率的信号与一个输入信号（我们的声波是信号的离散版本）分开的一种信号处理常用技术是傅立叶变换。现在，仅将其视为可让我们按频率对声波进行分类的操作。 我们将在钢琴音频上应用快速傅立叶变换（FFT）并绘制频谱图。

频谱图显示了略高于250Hz的最高峰值（我们最突出的信号）。 这是有道理的，因为中间C的频率约为261.65Hz。 下一个频率刚好高于500Hz（C5的频率约为〜523.25Hz），依此类推。 它们的间隔也均匀，这与我之前所说的泛音频率是基本频率的倍数相符。

下面的代码段计算了钢琴采样中每个泛音与基音之间的幅度比，以便我们可以将其应用于纯正弦波。

现在，我们将这些比率应用于基本注释及其泛音。

我们离得很近，但是声音在整个过程中仍然太一致（音量保持不变）。 当我们按下实际的钢琴键时，它开始亮起，然后迅速变大，并且声音随着时间而减弱。 描述声音如何变化的一种模型是ADSR（攻击，衰减，维持和释放）。 从本质上讲，它描述了声音经历了四个阶段：倾斜的初始阶段，然后下降到较低的水平，在那里保持一会儿，然后逐渐减小到零。 ADSR对某些工具的建模要优于其他工具，但在我们的案例中应该足够了。 以下是我采用指数权重实现ADSR的效果，以实现更平滑，更逼真的声音。 当然，您可以根据需要使用简单的线性权重。

来自同一乐器的声音在不同房间中会发生变化，因此ADSR阶段可能会有所不同。 此外，如果我们知道声音如何在音乐厅中弹跳，理论上讲，我们可以将其建模并应用到剪辑中，使其听起来就像我们在音乐厅中弹钢琴一样。 更正式地说，当我们播放声音时，给定位置中特定的声学特性称为脉冲响应（IRF），如果我们将IRF与输入声波进行卷积，就可以得到输出声音，就像我们在所述位置中播放一样。

#### 整合

现在，我们将泛音和ADSR权重应用于上面产生的纯正弦波。

#### 源代码

### 理论可视化

我将探讨为什么我们将某些声音与甜美和淡淡联系在一起，而另一些却使我们感到紧张。我还将在上述的合成钢琴中添加延音踏板，以使其听起来更逼真。

#### 谐音与不谐音

#### 不完美的谐音

#### 不谐音

#### 延音踏板

#### 源代码
{% endtab %}
{% endtabs %}

{% content-ref url="../zhi-dian-mi-jin-brief" %}
[zhi-dian-mi-jin-brief](../zhi-dian-mi-jin-brief)
{% endcontent-ref %}
