Python 音訊訊號處理庫 librosa

Galois發表於2020-05-27

librosa 庫官網
LibROSA 是一個用於音樂和音訊分析的python包。它提供了建立音樂資訊檢索系統所需的構建塊。
這篇部落格就不展開說明了,為了方便日後隨用隨查,這裡只是記錄下 librosa 庫的情況,細節還是看官方文件。

$ pip install librosa

庫函式結構

原始檔 功能介紹
librosa.beat 用於估計節拍和檢測節拍事件
librosa.core 核心功能包括從磁碟載入音訊、計算各種譜圖表示以及各種常用的音樂分析工具。為了方便起見,這個子模組中的所有功能都可以直接從頂層 librosa.* 名稱空間訪問。
librosa.decompose 利用 scikit-learn 中實現的矩陣分解方法實現諧波衝擊源分離(HPSS) 和通用譜圖分解功能。
librosa.display 使用 matplotlib 的視覺化。
librosa.effects 時域音訊處理,如音高移動和時間拉伸。這個子模組還為分解子模組提供時域包裝器。
librosa.feature 特徵提取和操作。這包括低層次特徵提取,如彩色公音、偽常量q(對數頻率)變換、Mel 光譜圖、MFCC 和調優估計。此外,還提供了特性操作方法,如 delta 特性、記憶體嵌入和事件同步特性對齊。
librosa.filters 過濾庫生成(chroma、偽CQT、CQT等)。這些主要是librosa的其他部分使用的內部函式。
librosa.onset 起跳檢測和起跳強度計算。
librosa.output 文字和波形檔案輸出。
librosa.segment 用於結構分割的函式,如遞迴矩陣構造、時滯表示和順序約束聚類。
librosa.sequence 用於順序建模的函式。各種形式的維特比解碼,以及用於構造轉換矩陣的輔助函式。
librosa.util 輔助實用程式(規範化、填充、居中等)。

Audio processing(音訊處理)

函式 功能
load() 從檔案載入音訊資料,貌似沒有格式限制,而且可以透過引數設定是否保留雙聲道,取樣率,重取樣型別。
to_mono() 把音訊資料降至單聲道。
resample() 重取樣,也可以稱之為降取樣。
get_duration() 計算音訊時間序列、特徵矩陣或檔名的持續時間(以秒為單位)。從檔案路徑讀取時間長度更快一些。
autocorrelate() 計算自相關。
zero_crossings() 找到過零點的位置。
clicks() 在訊號指定的位置放置click訊號。可以透過引數設定click訊號的頻率等屬性。
tone() 生成一個 tone 訊號,即一個簡單的正弦波。
chirp() 生成一個 chirp 訊號。

Spectral representations(譜表示)

函式 功能
stft() 短時傅立葉變換。預設引數:sr=22050, n_fft=2048, hob_length=512
istft() 短時傅立葉逆變換。
ifgram() 計算得到的瞬時頻率(作為取樣率的比例)作為復譜相位的時間導數。
cqt() 常數Q變換。
icqt() 常數Q逆變換。
hybrid_cqt() 計算音訊訊號的混合常量- q變換。
pseudo_cqt() 計算音訊訊號的偽常量- q變換。
iirt() 使用IIR濾波器的時頻表示。
fmt() 快速梅林變換(FMT)
interp_harmonics() 計算諧波處的能量。
salience() 諧波突出功能。
phase_vocoder() 階段聲碼器。給定一個 STFT 矩陣 D,將速度提高一個因子。
magphase() 計算複數圖譜的幅度值和相位值。

Magnitude scaling(幅度標度)

函式 功能
amplitude_to_db() 將振幅譜圖轉換為 db _scale 譜圖。|
db_to_amplitude() 將 db 譜圖轉為普通振幅譜圖。|
power_to_db() 功率譜轉換。|
db_to_power() 功率譜轉換。|
perceptual_weighting() 功率譜圖的感知加權。|
A_weighting() 計算一組頻率的 a 加權。|
pcen() 該函式透過自動增益控制對時頻表示 S 進行歸一化,然後進行非線性壓縮。|

Time and frequency conversion(時間和頻率轉換)

函式 功能
frames_to_sample() 將幀索引轉換為音訊樣本索引。
frames_to_time() 將幀數轉換為時間(秒)。
samples_to_frames() 將樣本索引轉換為 STFT 幀。
samples_to_time() 將 STFT 幀轉換為樣本索引。
time_to_frames() 將時間戳轉換為 STFT 幀。
time_to_samples() 將時間戳(以秒為單位)轉換為樣本索引。
hz_to_note() 將一個或多個頻率(以Hz為單位)轉換為最近的音符名稱。
hz_to_midi() 獲取給定頻率的 MIDI 音符編號。
midi_to_hz() 獲取 將一個或多個 MIDI 數轉換為音符串。MIDI 音符的頻率(Hz)
midi_to_note() 將一個或多個 MIDI 數轉換為音符串。
note_to_hz() 將一個或多個音符名稱轉換為頻率(Hz)
note_to_midi() 將一個或多個拼寫音符轉換為 MIDI 數字。
hz_to_mel() 將Hz轉換為 Mels。
hz_to_octs() 將頻率(Hz)轉換為(分數)倍頻程數。
mel_to_hz() 將 mel 頻率轉換為頻率
octs_to_hz() 將八度數轉換為頻率。
fft_frequencies() np.fft.fftfreq 的替代實現。
cqt_frequencies() 計算 Constant-Q 箱的中心頻率。
mel_frequencies() 計算調整到梅爾音階的聲學頻率陣列。
tempo_frequencies() 計算對應於起始自相關或臨時圖矩陣的頻率(以每分鐘節拍數為單位)。
samples_like() 返回一組樣本索引以匹配特徵矩陣中的時間軸。
times_like() 返回一組時間值以匹配特徵矩陣中的時間軸。

Pitch and tuning(音調和調諧)

函式 功能
estimate_tuning() 估計音訊序列的音調或者頻譜輸入。
pitch_tuning() 給定一個集合,估計其調諧偏移(一個 bin 的分數)相對於A440 = 440.0Hz。
piptrack() 閾值拋物線插值 STFT 上的節距跟蹤。

Deprecated(moved)(不推薦(移動))

函式 功能
dtw() 動態時間扭曲。
fill_off_diagonal() 將一個矩陣的所有細胞設定為給定的值,如果它們位於約束區域之外。

Display(顯示)

透過 librosa.display.* 訪問函式。

函式 功能
specshow() Display a spectrogram/chromagram/cqt/etc.
waveplot() 繪製波形的振幅包絡。
camp() 從給定的資料中獲取預設的顏色對映。
TimeFormatter() 時間軸的刻度格式化程式。
NoteFormatter() Notes 的刻度格式。
LogHzFormatter() 用於對數頻率的製表程式。
ChromaFormatter() 色度軸的格式化程式。
TonnetzFormatter() tonnetz 軸的格式化程式。

Feature extraction(特徵提取)

透過 librosa.feature.* 訪問函式。

Spectral features(光譜特徵)

函式 功能
chroma_stft() 從 stft 的結果計算色譜圖
chroma_cqt 常數 Q 色譜圖。
chroma_cens() 色譜能量歸一化。
melspectrogram() 計算梅爾頻譜。
mfcc() 梅爾倒頻譜系數。
rms() 譜的均方根。
spectral_centroid() 譜中心
spectral_bandwidth() 譜頻寬。
spectral_contrast() 譜對比度。
spectral_flatness() 頻譜平坦度。
spectral_rolloff() 滾降頻率。
poly_feature() 求一個 n 階多項式與譜圖列的擬合係數。
tonnetz() 計算色調質心特徵(tonnetz)。
zero_crossing_rate() 過零率。

Rhythm features(節奏特徵)

函式 功能
tempogram() 計算模板圖:起始強度包絡線的區域性自相關。

Feature manipulation(特徵操作)

函式 功能
delta() 計算增量特性:對輸入資料沿選定軸的導數進行區域性估計。計算了三角函式的薩維茨基-戈萊濾波。
stack_memory() 短期歷史嵌入:將資料向量或矩陣與自身的延遲副本垂直連線。

Spectrogram decomposition(譜圖分解)

透過 librosa.decompose.* 訪問。

函式 功能
decompose() 分解一個特徵矩陣。
hpss() Median-filtering harmonic percussive source separation (HPSS).
nn_filter() Filtering by nearest-neighbors.

Output(輸出)

透過 librosa.ouput.* 來訪問。

函式 功能
annotation() 儲存 3 列格式的註釋。
time_csv() 按 CSV 格式儲存時間步驟。這可以用來儲存打擊跟蹤器或分割演算法的輸出。
write_wav() 儲存為 wav 檔案格式。

Utilities(實用功能)

透過 librosa.util.* 來訪問。

Array operations(陣列操作)

函式 功能
frame() 將時間序列分割成重疊的幀。
pad_center() 將陣列居中。
fix_length() 將陣列資料的長度固定為精確的大小。
fix_frames 固定一個幀的最大值和最小值。
index_to_slice() 從索引陣列生成切片陣列。
softmask() 魯棒地計算軟掩碼操作。
sync() 邊界之間多維陣列的同步聚合。
axis_sort() 對陣列的行或列進行排序。
normalize() 沿著選定的軸對陣列進行標準化。
roll_sparse() 係數矩陣滾動。
sparsify_rows() 返回一個近似於輸入 x 的行稀疏矩陣。
buf_to_float() 將整數緩衝區轉換為浮點值。
tiny() 計算與輸入資料型別對應的極小值。就是比如輸入資料是int8型別,則返回 int8 型別可以表示的最小的數。

Matching(匹配)

函式 功能
match_intervals() 將一組時間間隔與另一組時間間隔匹配。
match_events() 將一組事件與另一組事件匹配。

Miscellaneous

函式 功能
localmax() 在陣列 x 中找到區域性最大值。
peak_pick() 使用靈活的啟發式演算法選擇訊號中的峰值。

Input Validation(輸入驗證)

函式 功能
valid_audio() 驗證變數是否包含有效的單聲道音訊資料。
valid_int() 確保輸入值是整型的。
valid_intervals() 確保陣列是時間間隔的有效表示。

File operations(檔案操作)

函式 功能
example_audio_file() 獲取包含音訊示例檔案的路徑。
find_files() 獲取目錄或目錄子樹中已排序的(音訊)檔案列表。
本作品採用《CC 協議》,轉載必須註明作者和本文連結
不要試圖用百米衝刺的方法完成馬拉松比賽。

相關文章