Transformers.js 文档
utils/音频
并获得增强的文档体验
开始
utils/音频
用于音频处理的辅助模块。
这些函数和类仅在内部使用,意味着最终用户无需访问此处的任何内容。
- utils/音频
- 静态
- .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() ⇒ ArrayBuffer
将音频转换为 wav 文件缓冲区。
类型:RawAudio 的实例方法
返回:ArrayBuffer
- WAV 文件。
rawAudio.toBlob() ⇒ Blob
将音频转换为 blob。
类型:RawAudio 的实例方法
rawAudio.save(path)
将音频保存到 wav 文件。
类型:RawAudio 的实例方法
参数 | 类型 |
---|---|
路径 | 字符串 |
utils/audio.read_audio(url, sampling_rate) ⇒ Promise. < Float32Array >
用于从路径/URL 读取音频的辅助函数。
类型:utils/audio 的静态方法
返回:Promise.<Float32Array>
- 解码后的音频,类型为 Float32Array。
参数 | 类型 | 描述 |
---|---|---|
url | 字符串 | URL | 从中加载音频的路径/URL。 |
采样率 | 数字 | 解码音频时使用的采样率。 |
read_audio~audio : Float32Array
类型:read_audio 的内部属性
utils/audio.hanning(M) ⇒ Float64Array
生成长度为 M 的 Hanning 窗口。有关更多信息,请参阅 https://numpy.com.cn/doc/stable/reference/generated/numpy.hanning.html。
类型:utils/audio 的静态方法
返回:Float64Array
- 生成的 Hanning 窗口。
参数 | 类型 | 描述 |
---|---|---|
M | 数字 | 要生成的 Hanning 窗口的长度。 |
utils/audio.hamming(M) ⇒ Float64Array
生成长度为 M 的 Hamming 窗口。有关更多信息,请参阅 https://numpy.com.cn/doc/stable/reference/generated/numpy.hamming.html。
类型:utils/audio 的静态方法
返回:Float64Array
- 生成的 Hamming 窗口。
参数 | 类型 | 描述 |
---|---|---|
M | 数字 | 要生成的 Hamming 窗口的长度。 |
utils/audio.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 > >
创建一个频率 bin 转换矩阵,用于获得梅尔频谱图。这被称为梅尔滤波器组,存在各种实现方式,它们在滤波器数量、滤波器形状、滤波器间距、滤波器带宽以及频谱扭曲方式上有所不同。这些特性的目标是近似人类对音高随频率变化的非线性感知。
类型:utils/audio 的静态方法
返回:Array.<Array<number>>
- 三角形滤波器组矩阵,它是一个形状为 (num_frequency_bins
, num_mel_filters
) 的二维数组。这是一个从频谱图到梅尔频谱图的投影矩阵。
参数 | 类型 | 描述 |
---|---|---|
num_frequency_bins | 数字 | 用于计算频谱图的频率数量(应与 stft 中的频率数量相同)。 |
num_mel_filters | 数字 | 要生成的梅尔滤波器数量。 |
min_frequency | 数字 | 感兴趣的最低频率,单位为 Hz。 |
max_frequency | 数字 | 感兴趣的最高频率,单位为 Hz。这不应超过 |
采样率 | 数字 | 音频波形的采样率。 |
[norm] | 字符串 | 如果为 |
[mel_scale] | 字符串 | 要使用的梅尔频率尺度, |
[triangularize_in_mel_space] | 布尔值 | 如果启用此选项,则三角形滤波器将在梅尔空间而不是频率空间中应用。应将其设置为 |
utils/audio.spectrogram(waveform, window, frame_length, hop_length, options) ⇒ Promise. < Tensor >
使用短时傅里叶变换计算一个波形的频谱图。
此函数可以创建以下类型的频谱图
- 幅度频谱图 (
power = 1.0
) - 功率频谱图 (
power = 2.0
) - 复数值频谱图 (
power = None
) - 对数频谱图(使用 log_mel 参数)
- 梅尔频谱图(提供 mel_filters)
- 对数梅尔频谱图(提供 mel_filters 和 log_mel)
在此实现中,假定窗口经过零填充,使其大小与分析帧相同。填充窗口可以从 window_function() 获得。FFT 输入缓冲区可能大于分析帧,通常为下一个 2 的幂。
类型:utils/audio 的静态方法
返回:Promise.<Tensor>
- 形状为 (num_frequency_bins, length)
(常规频谱图)或形状为 (num_mel_filters, length)
(梅尔频谱图)的频谱图。
参数 | 类型 | 默认 | 描述 |
---|---|---|---|
波形 | Float32Array | Float64Array | 形状为 | |
窗口 | Float32Array | Float64Array | 要应用的窗口函数,形状为 | |
帧长 | 数字 | 分析帧的长度,以样本为单位(又名 | |
hop_length | 数字 | 连续分析帧之间的步幅,以样本为单位。 | |
选项 | 对象 | ||
[options.fft_length] | 数字 |
| FFT 缓冲区的大小,以样本为单位。这决定了频谱图将有多少个频率 bin。为了获得最佳速度,这应为 2 的幂。如果为 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"" | 当 center 为 true 时使用的填充模式。可能的值包括: |
[options.onesided] | 布尔值 | true | 如果为 |
[options.preemphasis] | 数字 |
| 用于在 DFT 之前应用预加重的低通滤波器的系数。 |
[options.mel_filters] | Array.<Array<number>> |
| 形状为 |
[options.mel_floor] | 数字 | 1e-10 | 梅尔滤波器组的最小值。 |
[options.log_mel] | 字符串 | null | 如何将频谱图转换为对数刻度。可能的选项包括: |
[options.reference] | 数字 | 1.0 | 设置对应于 0 dB 的输入频谱图值。例如,使用 max(spectrogram)[0] 将最响亮的部分设置为 0 dB。必须大于零。 |
[options.min_value] | 数字 | 1e-10 | 在转换为分贝之前,频谱图将被裁剪为此最小值,以避免取 log(0)。对于功率频谱图,默认值 |
[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) ⇒ Float64Array
返回一个包含指定窗口的数组。
类型:utils/audio 的静态方法
返回值:Float64Array
- 形状为 (window_length,)
或 (frame_length,)
的窗口。
参数 | 类型 | 默认 | 描述 |
---|---|---|---|
window_length | 数字 | 窗口的长度,以采样点为单位。 | |
name | 字符串 | 窗口函数的名称。 | |
选项 | 对象 | 附加选项。 | |
[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
的内部方法
参数 | 类型 | 默认 |
---|---|---|
freq | T | |
[mel_scale] | 字符串 | "htk" |
utils/audio~mel_to_hertz(mels, [mel_scale]) ⇒ <code> T </code>
类型:utils/audio
的内部方法
参数 | 类型 | 默认 |
---|---|---|
mels | 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 bins 的离散频率,单位为 Hz,形状为 |
filter_freqs | Float64Array | 要创建的三角滤波器的中心频率,单位为 Hz,形状为 |
utils/audio~linspace(start, end, num) ⇒
返回在指定间隔内均匀间隔的数字。
类型:utils/audio
的内部方法
返回值:num
个均匀间隔的采样点,在 [start, stop]
区间内计算得出。
参数 | 类型 | 描述 |
---|---|---|
start | 数字 | 序列的起始值。 |
end | 数字 | 序列的结束值。 |
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
的内部方法
参数 | 类型 |
---|---|
spectrogram | T |
factor | 数字 |
reference | 数字 |
min_value | 数字 |
db_range | 数字 |
utils/audio~amplitude_to_db(spectrogram, [reference], [min_value], [db_range]) ⇒ <code> T </code>
将振幅谱图转换为分贝刻度。 这会计算 20 * log10(spectrogram / reference)
,并使用基本的对数属性来保证数值稳定性。 注意:此操作是原地操作。
在(梅尔)频谱图上应用对数函数的动机是人类不是在线性尺度上感知声音响度的。 通常,要使声音的感知音量加倍,我们需要投入 8 倍的能量。 这意味着,如果声音一开始就很大,那么能量的巨大变化听起来可能并没有那么大的不同。 这种压缩操作使得(梅尔)频谱图特征更接近人类实际听到的声音。
类型:utils/audio
的内部方法
返回值:T
- 修改后的分贝谱图。
参数 | 类型 | 默认 | 描述 |
---|---|---|---|
spectrogram | 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
- 修改后的分贝谱图。
参数 | 类型 | 默认 | 描述 |
---|---|---|---|
spectrogram | 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 音频缓冲区。
参数 | 类型 | 描述 |
---|---|---|
samples | Float32Array | 音频采样点。 |
rate | 数字 | 采样率。 |
< > Update on GitHub