准备做一个能够将口头哼唱旋律转换成乐谱音符的应用,首先就需要能够识别出录音中各个时点声音的频率音高,还好有librosa,可以实现音频的功率谱和频率谱、音色谱的提取和可视化。
import librosa
import librosa.display
import numpy as np
y,sr=librosa.load(r"d:\test.wav")
print(y.shape)
print(sr)
plt.plot(y)
#音色谱
chroma_stft = librosa.feature.chroma_stft(y=y, sr=sr,n_chroma=12, n_fft=4096)
#另一种常数Q音色谱
chroma_cq = librosa.feature.chroma_cqt(y=y, sr=sr)
#功率归一化音色谱
chroma_cens = librosa.feature.chroma_cens(y=y, sr=sr)
print(chroma_cens.shape)
plt.figure(figsize=(15,15))
plt.subplot(3,1,1)
librosa.display.specshow(chroma_stft, y_axis='chroma')
plt.title('chroma_stft')
plt.colorbar()
plt.subplot(3,1,2)
librosa.display.specshow(chroma_cq, y_axis='chroma', x_axis='time')
plt.title('chroma_cqt')
plt.colorbar()
plt.subplot(3,1,3)
librosa.display.specshow(chroma_cens, y_axis='chroma', x_axis='time')
plt.title('chroma_cens')
plt.colorbar()
plt.tight_layout()