大家好:
在python上做音樂分析時,遇到了兩個問題想請教
from __future__ import print_function
import numpy as np
import matplotlib.pyplot as plt # matplotlib for displaying the output
%matplotlib inline
import IPython.display # IPython.display for audio output
import librosa # Librosa for audio
import librosa.display # display module for visualization
y, sr = librosa.load('\abc.wav')
y_harmonic, y_percussive = librosa.effects.hpss(y)
C = librosa.feature.chroma_cqt(y=y_harmonic, sr=sr, bins_per_octave=36)
我試跑了一下,觀察了librosa.feature.chroma_cqt
回傳的結果,看起來是一個二維的陣列,總共12個元素。12這個數字應該很明顯。每個元素也是一個陣列,而且長度都一樣,所以這個長度應該是代表時間。不過我看不出時間單位怎麼算就是了。
陣列的值是從0到1,越高可能是該音頻的音量統計值越高,bins_per_octave設越大,看起來會凸顯這個值,可以減少泛音的干擾。
跟圖對照的話,可以發現12個元素,第一個是C,第二個是C#,第三個是D...
https://librosa.github.io/librosa/generated/librosa.feature.chroma_cqt.html
從這裡看到 bins_per_octave : int > 0
Number of bins per octave in the CQT. Default: matches n_chroma
Octave -> 8.
然後查看 CQT
https://en.wikipedia.org/wiki/Constant-Q_transform
這裡有一些解釋與公式
https://dsp.stackexchange.com/questions/54883/how-can-i-calculate-the-number-of-bins-per-octave
這裡有人問與你類似的問題
https://dsp.stackexchange.com/questions/26927/what-is-a-frequency-bin
這裡討論了 bin.
之前有幫友寫了這篇
https://ithelp.ithome.com.tw/articles/10195763
你可以向他請教.我只是搬運工而已,幫你google.