PyTorch Audio 教程:使用加法合成技术生成波形
引言
在音频信号处理领域,合成技术是创造各种音色的重要手段。本教程将重点介绍如何使用 PyTorch Audio 的 DSP 功能实现加法合成(Additive Synthesis)技术。加法合成通过组合多个基本波形来创造复杂的音色,是数字音频合成中最基础也最直观的方法之一。
技术背景
加法合成原理
加法合成的核心思想是傅里叶理论——任何周期性波形都可以表示为一系列正弦波的叠加。通过控制这些正弦波的频率、振幅和相位关系,我们可以创造出各种不同的音色特征。
PyTorch Audio 的 DSP 功能
PyTorch Audio 提供了一套强大的数字信号处理原型功能,包括:
oscillator_bank
:生成多种波形(正弦波、方波等)adsr_envelope
:创建 ADSR 包络(攻击、衰减、保持、释放)extend_pitch
:扩展基频以创建谐波或非谐波部分
准备工作
首先需要设置基本参数和辅助函数:
import torch
import torchaudio
from torchaudio.prototype.functional import adsr_envelope, extend_pitch, oscillator_bank
import matplotlib.pyplot as plt
# 基本参数
PI = torch.pi
PI2 = 2 * torch.pi
F0 = 344.0 # 基频(Hz)
DURATION = 1.1 # 持续时间(秒)
SAMPLE_RATE = 16000 # 采样率(Hz)
NUM_FRAMES = int(DURATION * SAMPLE_RATE)
谐波合成
锯齿波合成
锯齿波包含所有整数倍谐波,其数学表示为:
y_t = \sum_{k=1}^{K} -\frac{(-1)^k}{kπ} \sin(2πkf_0t)
实现代码:
def sawtooth_wave(freq0, amp0, num_pitches, sample_rate):
freq = extend_pitch(freq0, num_pitches)
mults = [-((-1)**i)/(PI*i) for i in range(1, 1+num_pitches)]
amp = extend_pitch(amp0, mults)
return oscillator_bank(freq, amp, sample_rate=sample_rate)
方波合成
方波仅包含奇次谐波:
y_t = \sum_{k=0}^{K-1} \frac{4}{(2k+1)π} \sin(2π(2k+1)f_0t)
实现代码:
def square_wave(freq0, amp0, num_pitches, sample_rate):
freq_mults = [2.0*i + 1.0 for i in range(num_pitches)]
amp_mults = [4/(PI*(2.0*i + 1.0)) for i in range(num_pitches)]
freq = extend_pitch(freq0, freq_mults)
amp = extend_pitch(amp0, amp_mults)
return oscillator_bank(freq, amp, sample_rate=sample_rate)
三角波合成
三角波同样只包含奇次谐波,但振幅衰减更快:
y_t = \sum_{k=0}^{K-1} (-1)^k \frac{8}{((2k+1)π)^2} \sin(2π(2k+1)f_0t)
非谐波合成
真实乐器音色往往包含非整数倍谐波。以钟声为例:
# 钟声参数
num_tones = 9
mults = [0.56, 0.92, 1.19, 1.71, 2, 2.74, 3.0, 3.76, 4.07] # 非整数倍频
freq = extend_pitch(freq0, mults)
amp = adsr_envelope(
num_frames=num_frames,
attack=0.002,
decay=0.998,
sustain=0.0,
release=0.0,
n_decay=2
)
amp = torch.stack([amp * (0.5**i) for i in range(num_tones)], dim=-1)
waveform = oscillator_bank(freq, amp, sample_rate=SAMPLE_RATE)
可视化与分析
教程提供了 plot()
函数来可视化生成的波形和频谱特性,包括:
- 振荡器频率变化
- 振幅包络
- 波形时域图
- 频谱图
应用建议
- 音乐合成:组合不同波形创造丰富音色
- 声音设计:通过调整谐波结构模拟真实乐器
- 音频研究:作为理解声音构成的工具
总结
PyTorch Audio 的 DSP 功能为音频合成提供了强大而灵活的工具。通过本教程,我们学习了如何使用加法合成技术生成各种基础波形和复杂音色。这些技术可以进一步扩展,结合滤波器和其他效果处理,创造出更加丰富的音频体验。
对于想要深入音频合成的开发者,建议尝试:
- 混合不同波形类型
- 实验非标准谐波结构
- 结合包络调制创造动态音色变化
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考