一些难以区分的效果器被笼统地归类于此。
多段压缩 / 动态 EQ 是一类允许用户动态地控制特定频段音量大小的效果器,其一般由数字滤波器 结合包络提取 技术动态的调制对应频段的一些参数组成。下图简单的叙述了两者的原理。
flowchart LR
In[输入信号] --> BA[带通 A]
In[输入信号] --> BB[带通 B]
In[输入信号] --> BC[带通 C]
BA --> CA[压缩器 A]
BB --> CB[压缩器 B]
BC --> CC[压缩器 C]
CA --> Out[输出信号]
CB --> Out
CC --> Out
其中三个带通 A , B , C A, B, CA , B , C 对应的截止频率 f A 1 , f A 2 , f B 1 , f B 2 , f C 1 , f C 2 f_{A1}, f_{A2}, f_{B1}, f_{B2}, f_{C1}, f_{C2}f A 1 , f A 2 , f B 1 , f B 2 , f C 1 , f C 2 满足 f A 2 = f B 1 , f B 2 = f C 1 f_{A2} = f_{B1}, f_{B2} = f_{C1}f A 2 = f B 1 , f B 2 = f C 1 ,其中数字较低者代表较低频率。
以一个滤波器为例,设给定的滤波器存在某个可调制参数 a aa
flowchart LR
In[输入信号] --> Filter[滤波器]
In --> BandPass[带通]
BandPass --> Env[生成包络]
Env --调制参数 a--> Filter
Filter --> Out[输出信号]
其中带通滤波器的两个截止频率大致与滤波器可影响的频率范围相当
Vocoder 最开始是用于降低语言通话成本的效果器,后来被用于音效制作。其核心思想为提取原始信号的在不同频段上的包络信息,之后再利用包络信息在载波上重现原始信号。
设输入数字音频流 X [ n ] X[n]X [ n ] 以及存在载波 Z [ n ] Z[n]Z [ n ] 则我们可以形式化地将 Vocoder 算法表述为:
通过多个数字滤波器 将音频流拆分成不同频段的小块 x k [ n ] , k ∈ Z . x_k[n], k\in \mathbb{Z}.x k [ n ] , k ∈ Z .
通过包络提取 方法提取处理后(如使用 LPF { x k [ n ] 2 } \operatorname{LPF}\{x_k[n]^2\}L P F { x k [ n ] 2 } )的小块信号 x k [ n ] x_k[n]x k [ n ] 的包络 e k [ n ] e_k[n]e k [ n ]
用同样的滤波器组拆分载波 z k [ n ] z_k[n]z k [ n ]
重建输出信号 Y [ n ] = ∑ k z k [ n ] e k [ n ] Y[n] = \sum\limits_{k}z_k[n]e_k[n]Y [ n ] = k ∑ z k [ n ] e k [ n ]
不难发现,这样的 Vocoder 会丢失原始信号 X [ t ] X[t]X [ t ] 的相位信息。因此更现代的 Vocoder 会利用 STFT 的额外信息对相位进行修正,具体修正方法可以参考 Phase Vocoder
Formant Shifter 是一种允许用户在不修改原始音频音调的情况下对音频的共振峰进行修改的效果器,其基本原理如下:
设数字音频流 X [ n ] X[n]X [ n ] ,我们记其频域表示为 x [ k ] x[k]x [ k ] 则其频域表示可以分解为
x [ k ] = e [ k ] ⋅ h [ k ] x[k] = e[k] \cdot h[k]
x [ k ] = e [ k ] ⋅ h [ k ]
其中 e [ k ] e[k]e [ k ] 为激励分量,为频谱快变部分,含基频谐波/噪声细节而 h [ k ] h[k]h [ k ] 为包络分量含频谱慢变部分,决定共振峰结构。
因此 Formant Shifter 的主要目标便是只改变 h [ k ] h[k]h [ k ] 信号而不改变 e [ k ] e[k]e [ k ] 信号。
实践中,为了提取 e [ k ] e[k]e [ k ] 信号常用包络提取 方法,尤其是倒谱法,其可以直接提取频域激励分量。之后便可以结合 Phase Vocoder 对 h [ k ] h[k]h [ k ] 进行共振峰移动。但是这样的方法开销较大,因此也有一些非频域方法,下面简要地列举了一些时域方法
线性预测编码(LPC)假定了输入信号可以用过去的 p pp 个样本线性组合表示,形式化的说,LPC 假定了
X [ n ] ≈ ∑ k = 1 p a k X [ n − k ] X[n] \approx \sum\limits_{k = 1}^{p}a_kX[n - k]
X [ n ] ≈ k = 1 ∑ p a k X [ n − k ]
使用均方误差衡量这一近似关系近似的有多好
MSE ( a 1 , ⋯ , a n ) = ∑ n ( X [ n ] − ∑ k = 1 p a k X [ n − k ] ) 2 \operatorname{MSE}(a_1, \cdots ,a_n) = \sum\limits_{n}(X[n] - \sum\limits_{k = 1}^p a_k X[n - k])^2
M S E ( a 1 , ⋯ , a n ) = n ∑ ( X [ n ] − k = 1 ∑ p a k X [ n − k ] ) 2
对其求偏导置 0 00 得到最优情况下 a i a_ia i 满足的方程
[ R ( 0 ) R ( 1 ) ⋯ R ( p − 1 ) R ( 1 ) R ( 0 ) ⋯ R ( p − 2 ) ⋯ ⋯ ⋱ ⋯ R ( p − 1 ) R ( p − 2 ) ⋯ R ( 0 ) ] [ a 1 a 2 ⋯ a p ] = [ R ( 1 ) R ( 2 ) ⋯ R ( n ) ] \begin{bmatrix}
R(0) & R(1) & \cdots & R(p - 1) \\
R(1) & R(0) & \cdots & R(p - 2) \\
\cdots & \cdots & \ddots & \cdots\\
R(p - 1) & R(p - 2) & \cdots & R(0) \\
\end{bmatrix}
\begin{bmatrix}
a_1 \\ a_2 \\ \cdots \\ a_p
\end{bmatrix} =
\begin{bmatrix}
R(1) \\ R(2) \\ \cdots \\ R(n)
\end{bmatrix}
⎣ ⎢ ⎢ ⎢ ⎡ R ( 0 ) R ( 1 ) ⋯ R ( p − 1 ) R ( 1 ) R ( 0 ) ⋯ R ( p − 2 ) ⋯ ⋯ ⋱ ⋯ R ( p − 1 ) R ( p − 2 ) ⋯ R ( 0 ) ⎦ ⎥ ⎥ ⎥ ⎤ ⎣ ⎢ ⎢ ⎢ ⎡ a 1 a 2 ⋯ a p ⎦ ⎥ ⎥ ⎥ ⎤ = ⎣ ⎢ ⎢ ⎢ ⎡ R ( 1 ) R ( 2 ) ⋯ R ( n ) ⎦ ⎥ ⎥ ⎥ ⎤
其中 R ( k ) : = ∑ n X [ n ] X [ n − k ] R(k) := \sum\limits_{n}X[n]X[n - k]R ( k ) : = n ∑ X [ n ] X [ n − k ] 为自相关系数
注意到最开始的近似表达式同时也是一个滤波器的表达式,因此我们取其频域表示得到
x [ z ] = MSE ( a 1 , ⋯ , a n ) m i n 1 − ∑ k = 1 p a k z − k x[z] = \frac{\sqrt{\operatorname{MSE}(a_1, \cdots ,a_n)_{min}}}{1 - \sum\limits_{k = 1}^{p}a_k z^{-k}}
x [ z ] = 1 − k = 1 ∑ p a k z − k M S E ( a 1 , ⋯ , a n ) m i n
即我们可以用 a i a_ia i 近似频谱包络,再将其变换回时域即可提取得到包络信息。从而我们得到激励分量E [ n ] E[n]E [ n ] 和包络分量在时域上的表示
X [ n ] = ∑ k = 1 p a k X [ n − k ] + MSE ( a 1 , ⋯ , a n ) m i n ⋅ E [ n ] X[n] = \sum\limits_{k = 1}^{p}a_kX[n - k] + \sqrt{\operatorname{MSE}(a_1, \cdots ,a_n)_{min}} \cdot E[n]
X [ n ] = k = 1 ∑ p a k X [ n − k ] + M S E ( a 1 , ⋯ , a n ) m i n ⋅ E [ n ]
之后便可结合频率调制类效果器 进行进一步处理
调制域处理直接通过包络提取加上重采样的方式修改共振峰。其一般方法如下:
设提取到的包络为 E [ n ] E[n]E [ n ] 则处理后的包络为 E ′ [ n ] = resample ( E [ n ] , α ) E'[n] = \operatorname{resample}(E[n], \alpha)E ′ [ n ] = r e s a m p l e ( E [ n ] , α ) 其中 α \alphaα 是缩放因子,则输出信号直接为 Y [ n ] = E ′ [ n ] X [ n ] E [ n ] + ϵ Y[n] = E'[n]\frac{X[n]}{E[n] + \epsilon}Y [ n ] = E ′ [ n ] E [ n ] + ϵ X [ n ] 其中 ϵ \epsilonϵ 是防止除零加上的小量
Autotune 是一类实时检测输入信号音调(即使用频率检测方法 )并利用频率调制 方法将输入信号音调归到最近的音调上的效果器。
其一般流程可以概述为:
检测输入信号 X [ n ] X[n]X [ n ] 的频率,并计算距离最近的音符
使用频率调制方法移动输入信号频率,一般使用 OLA 类方法
输出