数字声音是一个序列$\boldsymbol{x}=\left\{x_i\right\}_{i=0}^{N-1}$,对应于记录的a连续声音f的测量值以每秒 $f_s$ 测量的固定速率,即
$$ x_k=f\left(k / f_s\right), \quad \text { 对于 } k=0,1, \ldots, N-1 \text {. } $$
$f_s$ 称为采样频率或采样率。数字声音中的组成部分称为样本,连续样本之间的时间称为采样周期,通常表示为$T_s$。测量声音也称为对声音进行采样。
数字声音的质量通常通过比特率(每秒的位数)来衡量,即采样率与用于存储每个样本的位数(二进制数字)的乘积。 采样率和数字格式都会影响最终声音的质量。 这些被封装在数字声音格式中。
首先,合成是使用各种方法创建声音的行为。 我将重点关注加法合成,即通过将不同信号相加的方式进行合成。
我将使用的库是 Numpy 和 Scipy。 Numpy 是一个用于数值计算的库,而 Scipy 是一个我将用于信号处理并将数据转换为声音文件的库。 我还将安装 matplotlib 来绘制声音信号。 Pydub 是一个用于播放音频的库。 为了安装这些包,我将使用 pip 并创建一个虚拟环境。我使用的是 Python 3.10,因此请调整您的 Python 安装说明。 在终端中,我们首先创建一个目录,然后创建一个 virtualenv 并安装必需的软件包。
请创建一个名为 sound.py 的新文件并在文本编辑器中打开它。这将是我用来合成声音的主文件。现在让我首先添加需要的导入。
import numpy as np
from scipy.io.wavfile import write
from scipy import signal
import matplotlib.pyplot as plt
让我们来回顾一下什么是声音。 声音是空气穿过空间的压力波。 它是一种称为纵波的波,意味着它垂直于传播方向移动。