Transformers.js 文档
utils/audio
并获得增强的文档体验
开始使用
utils/audio
用于音频处理的辅助模块。
这些函数和类仅供内部使用,这意味着最终用户无需访问此处。
- utils/audio
- 静态
- .RawAudio
new RawAudio(audio, sampling_rate).toWav()⇒ArrayBuffer.toBlob()⇒Blob.save(path)
.read_audio(url, sampling_rate)⇒Promise.<Float32Array>~audio:Float32Array
.hanning(M)⇒Float64Array.hamming(M)⇒Float64Array.mel_filter_bank(num_frequency_bins, num_mel_filters, min_frequency, max_frequency, sampling_rate, [norm], [mel_scale], [triangularize_in_mel_space])⇒Array.<Array<number>>.spectrogram(waveform, window, frame_length, hop_length, options)⇒Promise.<Tensor>.window_function(window_length, name, options)⇒Float64Array
- .RawAudio
- 内部
~generalized_cosine_window(M, a_0)⇒Float64Array~hertz_to_mel(freq, [mel_scale])⇒T~mel_to_hertz(mels, [mel_scale])⇒T~_create_triangular_filter_bank(fft_freqs, filter_freqs)⇒Array.<Array<number>>~linspace(start, end, num)⇒~padReflect(array, left, right)⇒T~_db_conversion_helper(spectrogram, factor, reference, min_value, db_range)⇒T~amplitude_to_db(spectrogram, [reference], [min_value], [db_range])⇒T~power_to_db(spectrogram, [reference], [min_value], [db_range])⇒T~encodeWAV(samples, rate)⇒ArrayBuffer
- 静态
utils/audio.RawAudio
类型:utils/audio 的静态类
- .RawAudio
new RawAudio(audio, sampling_rate).toWav()⇒ArrayBuffer.toBlob()⇒Blob.save(path)
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。
| 参数量 | 类型 | 描述 |
|---|---|---|
| url | string | 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 的数量(应与 |
| num_mel_filters | 数字 | 要生成的梅尔滤波器数量。 |
| min_frequency | 数字 | 感兴趣的最低频率,单位为赫兹。 |
| max_frequency | 数字 | 感兴趣的最高频率,单位为赫兹。这不应超过 |
| 采样率 | 数字 | 音频波形的采样率。 |
| [norm] | 字符串 | 如果为 |
| [mel_scale] | 字符串 | 要使用的梅尔频率刻度, |
| [triangularize_in_mel_space] | 布尔值 | 如果启用此选项,则在梅尔空间而不是频率空间应用三角滤波器。为了获得与 |
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_filters和log_mel)
在此实现中,假定窗口被零填充以使其与分析帧大小相同。可以通过 window_function() 获取填充的窗口。FFT 输入缓冲区可能大于分析帧,通常是下一个二次幂。
类型:utils/audio 的静态方法
返回:Promise.<Tensor> - 形状为 (num_frequency_bins, length)(常规频谱图)或形状为 (num_mel_filters, length)(梅尔频谱图)的频谱图。
| 参数量 | 类型 | 默认 | 描述 |
|---|---|---|---|
| waveform | Float32Array | Float64Array | 形状为 | |
| window | Float32Array | Float64Array | 要应用的窗函数,形状为 | |
| frame_length | 数字 | 分析帧的长度(以样本为单位,即 | |
| hop_length | 数字 | 连续分析帧之间的步幅(以样本为单位)。 | |
| 选项 | 对象 | ||
| [options.fft_length] | 数字 | | FFT 缓冲区的样本大小。这决定了频谱图将有多少个频率 bin。为了获得最佳速度,这应该是一个二次幂。如果为 |
| [options.power] | 数字 | 1.0 | 如果为 1.0,则返回振幅频谱图。如果为 2.0,则返回功率频谱图。如果为 |
| [options.center] | 布尔值 | true | 是否填充波形,使帧 |
| [options.pad_mode] | 字符串 | “reflect” | 当 |
| [options.onesided] | 布尔值 | true | 如果为 |
| [options.preemphasis] | 数字 | | 在 DFT 之前应用预加重低通滤波器的系数。 |
| [options.preemphasis_htk_flavor] | 布尔值 | true | 是否以 HTK 风格应用预加重滤波器。 |
| [options.mel_filters] | Array.<Array<number>> | | 形状为 |
| [options.mel_floor] | 数字 | 1e-10 | 梅尔频率组的最小值。 |
| [options.log_mel] | 字符串 | null | 如何将频谱图转换为对数刻度。可能的选项是: |
| [options.reference] | 数字 | 1.0 | 设置对应于 0 dB 的输入频谱图值。例如,使用 |
| [options.min_value] | 数字 | 1e-10 | 频谱图在转换为分贝之前将被裁剪到此最小值,以避免取 |
| [options.db_range] | 数字 | | 设置以分贝表示的最大动态范围。例如,如果 |
| [options.remove_dc_offset] | 布尔值 | | 从每个帧的波形中减去平均值,在预加重之前应用。为了获得与 |
| [options.max_num_frames] | 数字 | | 如果提供,则将计算的帧数限制为此值。 |
| [options.min_num_frames] | 数字 | | 如果提供,则确保计算的帧数至少为此值。 |
| [options.do_pad] | 布尔值 | true | 如果为 |
| [options.transpose] | 布尔值 | false | 如果为 |
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] | 数字 | | 分析帧的长度(以样本为单位)。如果窗口小于帧长度,请提供 |
| [options.center] | 布尔值 | true | 是否将窗口置于 FFT 缓冲区中心。仅当提供 |
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_freqs | Float64Array | FFT bin 的离散频率,单位为赫兹,形状为 |
| filter_freqs | Float64Array | 要创建的三角滤波器的中心频率,单位为赫兹,形状为 |
utils/audio~linspace(start, end, num) ⇒
在指定区间内返回均匀分布的数字。
类型:utils/audio 的内部方法
返回:num 个均匀分布的样本,在区间 [start, stop] 内计算。
| 参数量 | 类型 | 描述 |
|---|---|---|
| 开始 | 数字 | 序列的起始值。 |
| 结束 | 数字 | 序列的结束值。 |
| num | 数字 | 要生成的样本数。 |
utils/audio~padReflect(array, left, right) ⇒ <code> T </code>
类型:utils/audio 的内部方法
返回:T - 填充后的数组。
| 参数量 | 类型 | 描述 |
|---|---|---|
| array | T | 要填充的数组。 |
| left | 数字 | 左侧要添加的填充量。 |
| right | 数字 | 右侧要添加的填充量。 |
utils/audio~_db_conversion_helper(spectrogram, factor, reference, min_value, db_range) ⇒ <code> T </code>
计算 amplitude_to_db 和 power_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 的输入频谱图值。例如,使用 |
| [min_value] | 数字 | 1e-5 | 频谱图在转换为分贝之前将被裁剪到此最小值,以避免取 |
| [db_range] | 数字 | | 设置以分贝表示的最大动态范围。例如,如果 |
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 的输入频谱图值。例如,使用 |
| [min_value] | 数字 | 1e-10 | 频谱图在转换为分贝之前将被裁剪到此最小值,以避免取 |
| [db_range] | 数字 | | 设置以分贝表示的最大动态范围。例如,如果 |
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 上更新