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, return_complex: bool = False)[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}\) 的中心。 (默认值:True)pad_mode (string, optional) – 控制当
center为True时使用的填充方法。(默认值:"reflect")onesided (bool, optional) – 控制是否返回一半的结果以避免冗余(默认值:
True)return_complex (bool, 可选) – 表示结果的复数张量是否应使用本机复数数据类型(如torch.cfloat和torch.cdouble)表示,还是使用额外维度模拟实部和虚部的实数数据类型。 此参数仅在
power=None时有效。 另请参见torch.view_as_real。
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, 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)momentum (float, optional) – 快速 Griffin-Lim 的动量参数。 将其设置为 0 可恢复原始的 Griffin-Lim 方法。 接近 1 的值可以导致更快的收敛,但大于 1 可能无法收敛。(默认值:
0.99)length (int, optional) – 预期输出的数组长度。(默认值:
None)rand_init (bool, optional) – 如果为 True,则随机初始化相位;否则初始化为零。(默认值:
True)
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, mel_scale: str = 'htk')[source]¶ 使用转换矩阵将普通 STFT 转换为梅尔频率 STFT。此方法采用三角形滤波器组。
用户可以控制滤波器组(fb)所在的设备(例如,fb.to(spec_f.device))。
- Parameters
n_mels (int, optional) – 梅尔滤波器组的数量。(默认值:
128)sample_rate (int, optional) – 音频信号的采样率。(默认值:
16000)f_min (float, optional) – 最小频率。(默认值:
0.)n_stft (int, optional) – STFT中的频谱分箱数量。如果未提供,则从第一个输入计算得出。请参见
n_fft在Spectrogram中。(默认:None)norm (可选[str]) – 如果为 'slaney',则按梅尔频带的宽度除以三角形梅尔权重
归一化)。(默认值)((面积) –
None)mel_scale (str, optional) – 要使用的比例:
htk或slaney。(默认值:htk)
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, mel_scale: str = 'htk')[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)mel_scale (str, optional) – 要使用的比例:
htk或slaney。(默认值:htk)
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, mel_scale: str = 'htk')[source]¶ 为原始音频信号创建梅尔频谱图。这是频谱图和梅尔尺度的组合。
- Sources
- Parameters
sample_rate (int, optional) – 音频信号的采样率。(默认值:
16000)n_fft (int, optional) – FFT 的大小,创建
n_fft // 2 + 1个频带。(默认值:400)hop_length (int 或 None, 可选) – STFT 窗口之间的跳跃长度。(默认值:
win_length // 2)f_min (float, optional) – 最小频率。(默认值:
0.)pad (int, optional) – 信号的双边填充。(默认值:
0)n_mels (int, optional) – 梅尔滤波器组的数量。(默认值:
128)window_fn (Callable[.., Tensor], optional) – 一个用于创建窗口张量的函数,该函数将应用于/乘以每个帧/窗口。(默认值:
torch.hann_window)power (float, optional) – 幅度谱的指数, (必须 > 0),例如:1 表示能量,2 表示功率等。(默认值:
2)normalized (bool, optional) – 是否在 stft 后按幅度进行归一化。(默认值:
False)wkwargs (Dict[.., ..] 或 None,可选) – 窗口函数的参数。(默认值:
None)center (bool, optional) – 是否在两侧填充
waveform,以便第 \(t\) 帧位于时间 \(t \times \text{hop\_length}\) 的中心。 (默认值:True)pad_mode (string, optional) – 控制当
center为True时使用的填充方法。(默认值:"reflect")onesided (bool, optional) – 控制是否返回一半的结果以避免冗余。(默认值:
True)norm (可选[str]) – 如果为 ‘slaney’,则将三角形梅尔权重除以梅尔频带的宽度(面积归一化)。(默认值:
None)mel_scale (str, optional) – 要使用的比例:
htk或slaney。(默认值:htk)
- 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¶
重采样¶
-
class
torchaudio.transforms.Resample(orig_freq: float = 16000, new_freq: float = 16000, resampling_method: str = 'sinc_interpolation', lowpass_filter_width: int = 6, rolloff: float = 0.99, beta: Optional[float] = None, *, dtype: Optional[torch.dtype] = None)[source]¶ 将信号从一个频率重采样到另一个频率。可以指定一种重采样方法。
注意
如果对精度高于 float32 的波形进行重采样,可能会出现轻微的精度损失,因为内核仅以 float32 格式缓存一次。如果您的应用对高精度重采样至关重要,函数形式将保留更高的精度,但由于不缓存内核,运行速度会较慢。或者,您可以重写一个变换来缓存更高精度的内核。
- Parameters
orig_freq (float, 可选) – 信号的原始频率。 (默认:
16000)new_freq (float, 可选) – 所需的频率。 (默认:
16000)resampling_method (str, optional) – 要使用的重采样方法。 选项:[
sinc_interpolation,kaiser_window](默认值:'sinc_interpolation')lowpass_filter_width (int, optional) – 控制滤波器的锐度,值越大越锐利但效率越低。(默认值:
6)rolloff (float, optional) – 滤波器的滚降频率,表示为奈奎斯特频率的分数。 较低的值会减少抗混叠效果,但也会降低部分最高频率。(默认值:
0.99)dtype (torch.device, optional) – 确定重采样核的预计算和缓存精度。如果未提供,则使用
torch.float64计算核并缓存为torch.float32。如果需要更高的精度,请提供torch.float64,此时预计算的核将作为torch.float64进行计算和缓存。如果您需要使用较低精度的 resample,请不要提供此参数,而是使用Resample.to(dtype),以便核生成仍在torch.float64上执行。
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)
- Reference:
参考文献¶
- 1
Brian McFee, Colin Raffel, Dawen Liang, Daniel P.W. Ellis, Matt McVicar, Eric Battenberg, 和 Oriol Nieto。Librosa:使用 Python 进行音频和音乐信号分析。收录于 Kathryn Huff 和 James Bergstra 编辑的《第 14 届 Python 科学会议论文集》中,第 18 – 24 页。2015 年。doi:10.25080/Majora-7b98e3ed-003.
- 2
Nathanaël Perraudin, Peter Balazs, 和 Peter L. Søndergaard。一种快速的Griffin-Lim算法。发表于 2013 IEEE 信号处理在音频与声学中的应用研讨会,卷,1–4。2013。 doi:10.1109/WASPAA.2013.6701851。
- 3
D. Griffin 和 Jae Lim. 基于修正短时傅里叶变换的信号估计。收录于 ICASSP ‘83. IEEE 声学、语音与信号处理国际会议,第 8 卷,804–807 页。1983 年。doi:10.1109/ICASSP.1983.1172092。