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.org/doc/stable/reference/generated/numpy.hanning.html。
型別:utils/audio
的靜態方法
返回:Float64Array
- 生成的漢寧窗。
引數量 | 型別 | 描述 |
---|---|---|
M | 數字 | 要生成的漢寧窗的長度。 |
utils/audio.hamming(M) ⇒ <code> Float64Array </code>
生成長度為 M 的漢明窗。更多資訊請參見 https://numpy.org/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://www.npmjs.com/package/audiobuffer-to-wav
型別:utils/audio
的內部方法
返回:ArrayBuffer
- WAV 音訊緩衝區。
引數量 | 型別 | 描述 |
---|---|---|
樣本 | Float32Array | 音訊樣本。 |
速率 | 數字 | 取樣率。 |
< > 在 GitHub 上更新