torchaudio.transforms¶
Transforms 是常见的音频变换。它们可以使用 torch.nn.Sequential 链接在一起
频谱图¶
-
class
torchaudio.transforms.Spectrogram(n_fft: int = 400, win_length: Optional[int] = None, hop_length: Optional[int] = None, pad: int = 0, window_fn: Callable[[...], torch.Tensor] = <built-in method hann_window of type object>, power: Optional[float] = 2.0, normalized: bool = False, wkwargs: Optional[dict] = None, center: bool = True, pad_mode: str = 'reflect', onesided: bool = True)[source]¶ 从音频信号创建频谱图。
- Parameters
n_fft (int, optional) – FFT 的大小,创建
n_fft // 2 + 1个频带。(默认值:400)hop_length (int 或 None, 可选) – STFT 窗口之间的跳跃长度。(默认值:
win_length // 2)pad (int, optional) – 信号的双边填充。(默认值:
0)window_fn (Callable[.., Tensor], optional) – 一个用于创建窗口张量的函数,该函数将应用于/乘以每个帧/窗口。(默认值:
torch.hann_window)power (float 或 None, 可选) – 幅度谱图的指数, (必须 > 0),例如:1 表示能量,2 表示功率等。 如果为 None,则返回复数频谱。(默认值:
2)normalized (bool, optional) – 是否在 stft 后按幅度进行归一化。(默认值:
False)center (bool, optional) – 是否对
waveform两侧进行填充,使得第 \(t\) 帧位于时间 \(t \times \text{hop\_length}\) 的中心。 默认值:Truepad_mode (string, optional) – 控制当
center为True时使用的填充方法。默认值:"reflect"单边 (bool, 可选) – 控制是否返回一半的结果以避免冗余 默认值:
True
GriffinLim¶
-
class
torchaudio.transforms.GriffinLim(n_fft: int = 400, n_iter: int = 32, win_length: Optional[int] = None, hop_length: Optional[int] = None, window_fn: Callable[[...], torch.Tensor] = <built-in method hann_window of type object>, power: float = 2.0, normalized: bool = False, wkwargs: Optional[dict] = None, momentum: float = 0.99, length: Optional[int] = None, rand_init: bool = True)[source]¶ 使用 Griffin-Lim 变换从线性尺度幅度谱图计算波形。
- Parameters
n_fft (int, optional) – FFT 的大小,创建
n_fft // 2 + 1个频带。(默认值:400)n_iter (int, optional) – 相位恢复过程的迭代次数。(默认值:
32)hop_length (int 或 None, 可选) – STFT 窗口之间的跳跃长度。(默认值:
win_length // 2)window_fn (Callable[.., Tensor], optional) – 一个用于创建窗口张量的函数,该函数将应用于/乘以每个帧/窗口。(默认值:
torch.hann_window)power (float, optional) – 幅度谱的指数, (必须 > 0),例如:1 表示能量,2 表示功率等。(默认值:
2)normalized (bool, optional) – 是否在 stft 后按幅度进行归一化。(默认值:
False)momentum (float, optional) – 快速 Griffin-Lim 的动量参数。 将其设置为 0 可恢复原始的 Griffin-Lim 方法。 接近 1 的值可以导致更快的收敛,但大于 1 可能无法收敛。(默认值:
0.99)length (int, optional) – 预期输出的数组长度。(默认值:
None)rand_init (bool, optional) – 如果为 True,则随机初始化相位;否则初始化为零。(默认值:
True)
参考文献
- 1
- 麦克菲,布莱恩,科林·拉斐尔,戴文·梁,丹尼尔·PW·埃利斯,马特·麦克维克,埃里克·巴滕贝格,奥里奥尔·内托。“ librosa:用 Python 进行音频和音乐信号分析。”在第十四届科学计算中的Python会议论文集,第18-25页,2015年。
- 2
- 佩拉东,N.,巴拉茨,P.,& 森德gaard,P. L.“一个快速的 Griffin-Lim 算法”,IEEE 信号处理在音频与声学应用 workshop (第 1-4 页),2013年10月。
- 3
- D. W. Griffin 和 J. S. Lim,“基于修改后的短时傅里叶变换的信号估计”IEEE 信号处理汇刊,第32卷,第2期,第236-243页,1984年4月。
AmplitudeToDB¶
-
class
torchaudio.transforms.AmplitudeToDB(stype: str = 'power', top_db: Optional[float] = None)[source]¶ 将张量从功率/幅度尺度转换为分贝尺度。
此输出取决于输入张量中的最大值,因此对于分割成片段与完整片段的音频剪辑,可能会返回不同的值。
- Parameters
-
forward(x: torch.Tensor) → torch.Tensor[source]¶ 来自 Librosa 的数值稳定实现。
https://librosa.org/doc/latest/generated/librosa.amplitude_to_db.html
- Parameters
x (Tensor) – 转换为分贝刻度之前的输入张量。
- Returns
以分贝刻度输出的张量。
- Return type
张量
MelScale¶
-
class
torchaudio.transforms.MelScale(n_mels: int = 128, sample_rate: int = 16000, f_min: float = 0.0, f_max: Optional[float] = None, n_stft: Optional[int] = None, norm: Optional[str] = None)[source]¶ 使用转换矩阵将普通 STFT 转换为梅尔频率 STFT。此方法采用三角形滤波器组。
用户可以控制滤波器组(fb)所在的设备(例如,fb.to(spec_f.device))。
- Parameters
InverseMelScale¶
-
class
torchaudio.transforms.InverseMelScale(n_stft: int, n_mels: int = 128, sample_rate: int = 16000, f_min: float = 0.0, f_max: Optional[float] = None, max_iter: int = 100000, tolerance_loss: float = 1e-05, tolerance_change: float = 1e-08, sgdargs: Optional[dict] = None, norm: Optional[str] = None)[source]¶ 使用转换矩阵,从梅尔频率 STFT 求解普通 STFT。此方法采用三角滤波器组。
它使用 SGD 最小化输入梅尔频谱图与估计频谱图和滤波器组乘积之间的欧几里得范数。
- Parameters
n_stft (int) – STFT 中的频带数量。参见
n_fft在Spectrogram。n_mels (int, optional) – 梅尔滤波器组的数量。(默认值:
128)sample_rate (int, optional) – 音频信号的采样率。(默认值:
16000)f_min (float, optional) – 最小频率。(默认值:
0.)max_iter (int, optional) – 优化迭代的最大次数。(默认值:
100000)tolerance_loss (float, optional) – 停止优化时的损失值。(默认:
1e-5)tolerance_change (float, optional) – 停止优化时的损失差异。(默认值:
1e-8)norm (可选[str]) – 如果为 'slaney',则按梅尔频带的宽度除以三角形梅尔权重
归一化)。(默认值)((面积) –
None)
MelSpectrogram¶
-
class
torchaudio.transforms.MelSpectrogram(sample_rate: int = 16000, n_fft: int = 400, win_length: Optional[int] = None, hop_length: Optional[int] = None, f_min: float = 0.0, f_max: Optional[float] = None, pad: int = 0, n_mels: int = 128, window_fn: Callable[[...], torch.Tensor] = <built-in method hann_window of type object>, power: Optional[float] = 2.0, normalized: bool = False, wkwargs: Optional[dict] = None, center: bool = True, pad_mode: str = 'reflect', onesided: bool = True, norm: Optional[str] = None)[source]¶ 为原始音频信号创建梅尔频谱图。这是频谱图和梅尔尺度的组合。
- Sources
- Parameters
sample_rate (int, optional) – 音频信号的采样率。(默认值:
16000)hop_length (int 或 None, 可选) – STFT 窗口之间的跳跃长度。(默认值:
win_length // 2)n_fft (int, optional) – FFT 的大小,创建
n_fft // 2 + 1个频带。(默认值:400)f_min (float, optional) – 最小频率。(默认值:
0.)pad (int, optional) – 信号的双边填充。(默认值:
0)n_mels (int, optional) – 梅尔滤波器组的数量。(默认值:
128)window_fn (Callable[.., Tensor], optional) – 一个用于创建窗口张量的函数,该函数将应用于/乘以每个帧/窗口。(默认值:
torch.hann_window)wkwargs (Dict[.., ..] 或 None,可选) – 窗口函数的参数。(默认值:
None)center (bool, optional) – 是否对
waveform两侧进行填充,使得第 \(t\) 帧位于时间 \(t \times \text{hop\_length}\) 的中心。 默认值:Truepad_mode (string, optional) – 控制当
center为True时使用的填充方法。默认值:"reflect"onesided (bool, optional) – 控制是否返回一半的结果以避免冗余。默认值:
Truenorm (可选[str]) – 如果为 'slaney',则按梅尔频带的宽度除以三角形梅尔权重
归一化)。(默认值)((面积) –
None)
- Example
>>> waveform, sample_rate = torchaudio.load('test.wav', normalization=True) >>> mel_specgram = transforms.MelSpectrogram(sample_rate)(waveform) # (channel, n_mels, time)
MFCC¶
-
class
torchaudio.transforms.MFCC(sample_rate: int = 16000, n_mfcc: int = 40, dct_type: int = 2, norm: str = 'ortho', log_mels: bool = False, melkwargs: Optional[dict] = None)[source]¶ 从音频信号创建梅尔频率倒谱系数。
默认情况下,此函数会在以分贝缩放的梅尔频谱上计算 MFCC。 这并非教科书式的实现,但在此处采用该方式是为了与 librosa 保持一致。
该输出取决于输入频谱图中的最大值,因此对于分割成片段与完整音频剪辑的同一音频,可能会返回不同的值。
MuLawEncoding¶
MuLawDecoding¶
重采样¶
ComplexNorm¶
ComputeDeltas¶
TimeStretch¶
淡出¶
FrequencyMasking¶
TimeMasking¶
卷¶
SlidingWindowCmn¶
-
class
torchaudio.transforms.SlidingWindowCmn(cmn_window: int = 600, min_cmn_window: int = 100, center: bool = False, norm_vars: bool = False)[source]¶ 对每个语音片段应用滑动窗口倒谱均值(以及可选的方差)归一化。
- Parameters
cmn_window (int, optional) – 用于计算运行平均CMN的帧数窗口(int,默认值 = 600)
min_cmn_window (int, optional) – 解码开始时使用的最小 CMN 窗口(仅在开始时增加延迟)。 仅当 center == false 时适用,如果 center==true 则被忽略(int,默认值 = 100)
center (bool, optional) – 如果为 true,则使用以当前帧为中心的窗口(在可能的情况下,模去端点效应)。如果为 false,则窗口位于左侧。(bool,默认值 = false)
norm_vars (bool, optional) – 如果为 true,则将方差归一化为 1。(bool,默认值 = false)
SpectralCentroid¶
-
class
torchaudio.transforms.SpectralCentroid(sample_rate: int, n_fft: int = 400, win_length: Optional[int] = None, hop_length: Optional[int] = None, pad: int = 0, window_fn: Callable[[...], torch.Tensor] = <built-in method hann_window of type object>, wkwargs: Optional[dict] = None)[source]¶ 沿时间轴计算每个通道的频谱质心。
频谱质心定义为频率值的加权平均值,权重为其幅度。
- Parameters
- Example
>>> waveform, sample_rate = torchaudio.load('test.wav', normalization=True) >>> spectral_centroid = transforms.SpectralCentroid(sample_rate)(waveform) # (channel, time)
语音活动检测¶
-
class
torchaudio.transforms.Vad(sample_rate: int, trigger_level: float = 7.0, trigger_time: float = 0.25, search_time: float = 1.0, allowed_gap: float = 0.25, pre_trigger_time: float = 0.0, boot_time: float = 0.35, noise_up_time: float = 0.1, noise_down_time: float = 0.01, noise_reduction_amount: float = 1.35, measure_freq: float = 20.0, measure_duration: Optional[float] = None, measure_smooth_time: float = 0.4, hp_filter_freq: float = 50.0, lp_filter_freq: float = 6000.0, hp_lifter_freq: float = 150.0, lp_lifter_freq: float = 2000.0)[source]¶ 语音活动检测器。实现方式与 SoX 类似。 旨在从语音录音的开头和结尾处修剪静音及安静的背景声音。 该算法目前使用简单的倒谱功率测量来检测语音, 因此可能会被其他声音(尤其是音乐)所误导。
该效果仅能从音频前端进行修剪,因此若要从后端修剪,还必须使用反向效果。
- Parameters
sample_rate (int) – 音频信号的采样率。
trigger_level (float, optional) – 用于触发活动检测的测量级别。 根据噪声水平、信号水平以及输入音频的其他特性,可能需要对此进行调整。(默认值:7.0)
trigger_time (float, optional) – 时间常数(单位:秒),用于帮助忽略短促的声脉冲。(默认值:0.25)
search_time (float, optional) – 在检测到的触发点之前,要搜索以包含更安静或更短音频片段的时长(以秒为单位)。(默认值:1.0)
allowed_gap (float, optional) – 在检测到触发点之前,允许包含的较安静/较短音频片段之间的间隔(以秒为单位)。(默认值:0.25)
pre_trigger_time (float, optional) – 在触发点及任何发现的更安静/更短突发之前要保留的音频量(以秒为单位)。(默认值:0.0)
boot_time (float, optional) 算法(内部)– 用于检测所需音频开始的估计/缩减。此选项设置初始噪声估计的时间。(默认值:0.35)
noise_up_time (float, optional) – 用于噪声水平增加时。(默认值:0.1)
noise_down_time (float, optional) – 用于噪声水平下降时。(默认值:0.01)
noise_reduction_amount (float, optional) – 检测算法(例如 0, 0.5, …)。(默认值:1.35)
measure_freq (float, 可选) – 处理/测量。(默认值:20.0)
measure_duration – (float, 可选) 测量持续时间。 (默认值:测量周期的两倍;即存在重叠。)
measure_smooth_time (float, 可选) – 频谱测量。(默认值:0.4)
hp_filter_freq (float, optional) – 在检测算法的输入端。(默认值:50.0)
lp_filter_freq (float, optional) – 在检测算法的输入端。 (默认值: 6000.0)
hp_lifter_freq (float, 可选) – 在检测器算法中。(默认值:150.0)
lp_lifter_freq (float, 可选) – 在检测器算法中。(默认值:2000.0)
参考文献