Transformers.js 文档

utils/audio

您正在查看的是需要从源码安装。如果您希望进行常规 npm 安装,请查看最新稳定版本(v3.0.0)。
Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

utils/audio

用于音频处理的辅助模块。

这些函数和类仅供内部使用,这意味着最终用户无需访问此处。


utils/audio.RawAudio

类型utils/audio 的静态类


new RawAudio(audio, sampling_rate)

创建一个新的 RawAudio 对象。

参数量类型描述
音频Float32Array

音频数据

采样率数字

音频数据的采样率


rawAudio.toWav() ⇒ <code> ArrayBuffer </code>

将音频转换为 wav 文件缓冲区。

类型RawAudio 的实例方法
返回ArrayBuffer - WAV 文件。


rawAudio.toBlob() ⇒ <code> Blob </code>

将音频转换为 Blob。

类型RawAudio 的实例方法


rawAudio.save(path)

将音频保存为 wav 文件。

类型RawAudio 的实例方法

参数量类型
路径字符串

utils/audio.read_audio(url, sampling_rate) ⇒ <code> Promise. < Float32Array > </code>

从路径/URL 读取音频的辅助函数。

类型utils/audio 的静态方法
返回Promise.<Float32Array> - 解码后的音频,类型为 Float32Array

参数量类型描述
urlstring | URL

加载音频的路径/URL。

采样率数字

解码音频时使用的采样率。


read_audio~audio : <code> Float32Array </code>

类型read_audio 的内部属性


utils/audio.hanning(M) ⇒ <code> Float64Array </code>

生成长度为 M 的汉宁窗。更多信息请参见 https://numpy.com.cn/doc/stable/reference/generated/numpy.hanning.html

类型utils/audio 的静态方法
返回Float64Array - 生成的汉宁窗。

参数量类型描述
M数字

要生成的汉宁窗的长度。


utils/audio.hamming(M) ⇒ <code> Float64Array </code>

生成长度为 M 的汉明窗。更多信息请参见 https://numpy.com.cn/doc/stable/reference/generated/numpy.hamming.html

类型utils/audio 的静态方法
返回Float64Array - 生成的汉明窗。

参数量类型描述
M数字

要生成的汉明窗的长度。


utils/audio.mel_filter_bank(num_frequency_bins, num_mel_filters, min_frequency, max_frequency, sampling_rate, [norm], [mel_scale], [triangularize_in_mel_space]) ⇒ <code> Array.<Array<number>> </code>

创建用于获取梅尔频谱图的频率 bin 转换矩阵。这被称为 *梅尔滤波器组*,存在各种实现,它们在滤波器数量、滤波器形状、滤波器间距方式、滤波器带宽以及频谱扭曲方式上有所不同。这些特征的目标是近似人类对音高相对于频率变化的非线性感知。

类型utils/audio 的静态方法
返回Array.<Array<number>> - 三角滤波器组矩阵,这是一个形状为 (num_frequency_bins, num_mel_filters) 的二维数组。这是一个从频谱图到梅尔频谱图的投影矩阵。

参数量类型描述
num_frequency_bins数字

频率 bin 的数量(应与 n_fft // 2 + 1 相同,其中 n_fft 是用于计算频谱图的傅里叶变换的大小)。

num_mel_filters数字

要生成的梅尔滤波器数量。

min_frequency数字

感兴趣的最低频率,单位为赫兹。

max_frequency数字

感兴趣的最高频率,单位为赫兹。这不应超过 sampling_rate / 2

采样率数字

音频波形的采样率。

[norm]字符串

如果为 "slaney",则将三角梅尔权重除以梅尔带的宽度(面积归一化)。

[mel_scale]字符串

要使用的梅尔频率刻度,"htk""slaney"

[triangularize_in_mel_space]布尔值

如果启用此选项,则在梅尔空间而不是频率空间应用三角滤波器。为了获得与 torchaudio 计算梅尔滤波器时相同的结果,应将其设置为 true


utils/audio.spectrogram(waveform, window, frame_length, hop_length, options) ⇒ <code> Promise.<Tensor> </code>

使用短时傅里叶变换计算一个波形的频谱图。

此函数可以创建以下类型的频谱图

  • 振幅频谱图(power = 1.0
  • 功率频谱图(power = 2.0
  • 复值频谱图(power = None
  • 对数频谱图(使用 log_mel 参数)
  • 梅尔频谱图(提供 mel_filters
  • 对数梅尔频谱图(提供 mel_filterslog_mel

在此实现中,假定窗口被零填充以使其与分析帧大小相同。可以通过 window_function() 获取填充的窗口。FFT 输入缓冲区可能大于分析帧,通常是下一个二次幂。

类型utils/audio 的静态方法
返回Promise.<Tensor> - 形状为 (num_frequency_bins, length)(常规频谱图)或形状为 (num_mel_filters, length)(梅尔频谱图)的频谱图。

参数量类型默认描述
waveformFloat32Array | Float64Array

形状为 (length,) 的输入波形。这必须是单个实值、单声道波形。

windowFloat32Array | Float64Array

要应用的窗函数,形状为 (frame_length,),必要时包括零填充。实际的窗口长度可能比 frame_length 短,但我们假定数组已经过零填充。

frame_length数字

分析帧的长度(以样本为单位,即 fft_length)。

hop_length数字

连续分析帧之间的步幅(以样本为单位)。

选项对象
[options.fft_length]数字

FFT 缓冲区的样本大小。这决定了频谱图将有多少个频率 bin。为了获得最佳速度,这应该是一个二次幂。如果为 null,则使用 frame_length

[options.power]数字1.0

如果为 1.0,则返回振幅频谱图。如果为 2.0,则返回功率频谱图。如果为 null,则返回复数。

[options.center]布尔值true

是否填充波形,使帧 t 以时间 t * hop_length 为中心。如果为 false,帧 t 将从时间 t * hop_length 开始。

[options.pad_mode]字符串“reflect”

centertrue 时使用的填充模式。可能的值为:"constant"(用零填充)、"edge"(用边缘值填充)、"reflect"(用镜像值填充)。

[options.onesided]布尔值true

如果为 true,则只计算正频率并返回包含 fft_length // 2 + 1 个频率 bin 的频谱图。如果为 false,则也计算负频率并返回 fft_length 个频率 bin。

[options.preemphasis]数字

在 DFT 之前应用预加重低通滤波器的系数。

[options.preemphasis_htk_flavor]布尔值true

是否以 HTK 风格应用预加重滤波器。

[options.mel_filters]Array.<Array<number>>

形状为 (num_freq_bins, num_mel_filters) 的梅尔滤波器组。如果提供,则应用此滤波器组以创建梅尔频谱图。

[options.mel_floor]数字1e-10

梅尔频率组的最小值。

[options.log_mel]字符串null

如何将频谱图转换为对数刻度。可能的选项是:null(不转换)、"log"(取自然对数)、"log10"(取以 10 为底的对数)、"dB"(转换为分贝)。只能在 power 不为 null 时使用。

[options.reference]数字1.0

设置对应于 0 dB 的输入频谱图值。例如,使用 max(spectrogram)[0] 将最响亮的部分设置为 0 dB。必须大于零。

[options.min_value]数字1e-10

频谱图在转换为分贝之前将被裁剪到此最小值,以避免取 log(0)。对于功率频谱图,默认值 1e-10 对应于 -100 dB 的最小值。对于振幅频谱图,值 1e-5 对应于 -100 dB。必须大于零。

[options.db_range]数字

设置以分贝表示的最大动态范围。例如,如果 db_range = 80,则峰值与最小值之间的差异永远不会超过 80 dB。必须大于零。

[options.remove_dc_offset]布尔值

从每个帧的波形中减去平均值,在预加重之前应用。为了获得与 torchaudio.compliance.kaldi.fbank 计算梅尔滤波器时相同的结果,应将其设置为 true

[options.max_num_frames]数字

如果提供,则将计算的帧数限制为此值。

[options.min_num_frames]数字

如果提供,则确保计算的帧数至少为此值。

[options.do_pad]布尔值true

如果为 true,则将输出频谱图填充为 max_num_frames 帧。

[options.transpose]布尔值false

如果为 true,则返回的频谱图形状为 (num_frames, num_frequency_bins/num_mel_filters)。如果为 false,则返回的频谱图形状为 (num_frequency_bins/num_mel_filters, num_frames)


utils/audio.window_function(window_length, name, options) ⇒ <code> Float64Array </code>

返回包含指定窗口的数组。

类型utils/audio 的静态方法
返回Float64Array - 形状为 (window_length,)(frame_length,) 的窗口。

参数量类型默认描述
window_length数字

窗口的长度(以样本为单位)。

名称字符串

窗函数的名称。

选项对象

其他选项。

[options.periodic]布尔值true

窗口是周期性的还是对称的。

[options.frame_length]数字

分析帧的长度(以样本为单位)。如果窗口小于帧长度,请提供 frame_length 的值,以便将其零填充。

[options.center]布尔值true

是否将窗口置于 FFT 缓冲区中心。仅当提供 frame_length 时使用。


utils/audio~generalized_cosine_window(M, a_0) ⇒ <code> Float64Array </code>

生成广义余弦窗口特殊情况的辅助函数。更多信息请参见 https://www.mathworks.com/help/signal/ug/generalized-cosine-windows.html

类型utils/audio 的内部方法
返回Float64Array - 生成的窗口。

参数量类型描述
M数字

输出窗口中的点数。如果为零或更少,则返回空数组。

a_0数字

广义余弦窗口的偏移量。


utils/audio~hertz_to_mel(freq, [mel_scale]) ⇒ <code> T </code>

类型utils/audio 的内部方法

参数量类型默认
频率T
[mel_scale]字符串"htk"

utils/audio~mel_to_hertz(mels, [mel_scale]) ⇒ <code> T </code>

类型utils/audio 的内部方法

参数量类型默认
梅尔T
[mel_scale]字符串"htk"

utils/audio~_create_triangular_filter_bank(fft_freqs, filter_freqs) ⇒ <code> Array.<Array<number>> </code>

创建三角滤波器组。

改编自 torchaudio 和 librosa。

类型utils/audio 的内部方法
返回Array.<Array<number>> - 形状为 (num_frequency_bins, num_mel_filters)

参数量类型描述
fft_freqsFloat64Array

FFT bin 的离散频率,单位为赫兹,形状为 (num_frequency_bins,)

filter_freqsFloat64Array

要创建的三角滤波器的中心频率,单位为赫兹,形状为 (num_mel_filters,)


utils/audio~linspace(start, end, num) ⇒

在指定区间内返回均匀分布的数字。

类型utils/audio 的内部方法
返回num 个均匀分布的样本,在区间 [start, stop] 内计算。

参数量类型描述
开始数字

序列的起始值。

结束数字

序列的结束值。

num数字

要生成的样本数。


utils/audio~padReflect(array, left, right) ⇒ <code> T </code>

类型utils/audio 的内部方法
返回T - 填充后的数组。

参数量类型描述
arrayT

要填充的数组。

left数字

左侧要添加的填充量。

right数字

右侧要添加的填充量。


utils/audio~_db_conversion_helper(spectrogram, factor, reference, min_value, db_range) ⇒ <code> T </code>

计算 amplitude_to_dbpower_to_db 的辅助函数。

类型utils/audio 的内部方法

参数量类型
频谱图T
因子数字
参考数字
最小值数字
db_range数字

utils/audio~amplitude_to_db(spectrogram, [reference], [min_value], [db_range]) ⇒ <code> T </code>

将振幅频谱图转换为分贝刻度。这会计算 20 * log10(spectrogram / reference),使用基本对数特性以实现数值稳定性。注意:就地操作。

在(梅尔)频谱图上应用对数函数的动机是,人类对响度的感知不是线性刻度。通常,要使声音的感知音量加倍,我们需要将其能量增加 8 倍。这意味着,如果声音本来就很响亮,能量的巨大变化可能听起来并没有太大区别。这种压缩操作使(梅尔)频谱图特征更接近人类实际听到的声音。

类型utils/audio 的内部方法
返回T - 修改后的分贝频谱图。

参数量类型默认描述
频谱图T

输入的振幅(梅尔)频谱图。

[reference]数字1.0

设置对应于 0 dB 的输入频谱图值。例如,使用 np.max(spectrogram) 将最响亮的部分设置为 0 dB。必须大于零。

[min_value]数字1e-5

频谱图在转换为分贝之前将被裁剪到此最小值,以避免取 log(0)。默认值 1e-5 对应于 -100 dB 的最小值。必须大于零。

[db_range]数字

设置以分贝表示的最大动态范围。例如,如果 db_range = 80,则峰值与最小值之间的差异永远不会超过 80 dB。必须大于零。


utils/audio~power_to_db(spectrogram, [reference], [min_value], [db_range]) ⇒ <code> T </code>

将功率频谱图转换为分贝刻度。这会计算 10 * log10(spectrogram / reference),使用基本对数特性以实现数值稳定性。注意:就地操作。

在(梅尔)频谱图上应用对数函数的动机是,人类对响度的感知不是线性刻度。通常,要使声音的感知音量加倍,我们需要将其能量增加 8 倍。这意味着,如果声音本来就很响亮,能量的巨大变化可能听起来并没有太大区别。这种压缩操作使(梅尔)频谱图特征更接近人类实际听到的声音。

基于 librosa.power_to_db 的实现。

类型utils/audio 的内部方法
返回T - 修改后的分贝频谱图。

参数量类型默认描述
频谱图T

输入的功率(梅尔)频谱图。请注意,功率频谱图的振幅已平方!

[reference]数字1.0

设置对应于 0 dB 的输入频谱图值。例如,使用 np.max(spectrogram) 将最响亮的部分设置为 0 dB。必须大于零。

[min_value]数字1e-10

频谱图在转换为分贝之前将被裁剪到此最小值,以避免取 log(0)。默认值 1e-10 对应于 -100 dB 的最小值。必须大于零。

[db_range]数字

设置以分贝表示的最大动态范围。例如,如果 db_range = 80,则峰值与最小值之间的差异永远不会超过 80 dB。必须大于零。


utils/audio~encodeWAV(samples, rate) ⇒ <code> ArrayBuffer </code>

将音频数据编码为 WAV 文件。WAV 文件规范:https://en.wikipedia.org/wiki/WAV#WAV_File_header

改编自 https://npmjs.net.cn/package/audiobuffer-to-wav

类型utils/audio 的内部方法
返回ArrayBuffer - WAV 音频缓冲区。

参数量类型描述
样本Float32Array

音频样本。

速率数字

采样率。


< > 在 GitHub 上更新