我用这段代码创建了一个谱图:
D = librosa.amplitude_to_db(librosa.stft(y), ref=np.max)
librosa.display.specshow(D, y_axis='linear', x_axis='time')
plt.colorbar(format='%+2.0f dB')
plt.title('Log-frequency power spectrogram')
plt.savefig('sp.png')
plt.show()
如何从此图表中提取时间数组和数据库数组? (.csv输出需要它)
答案 0 :(得分:1)
您可以使用与librosa相同的函数绘制频谱图以获得沿轴的阵列。 D
已经是" db数组"。
import librosa
import librosa.display
import matplotlib.pyplot as plt
import numpy as np
y, sr = librosa.load(librosa.util.example_audio_file())
#sr = 22050 #default sampling rate
D = librosa.amplitude_to_db(librosa.stft(y), ref=np.max)
# yaxis
n = D.shape[0]
yout = librosa.fft_frequencies(sr=sr, n_fft=1+(2 * (n - 1)) )
print yout, yout.min(), yout.max()
#xaxis
m = D.shape[1]
hop_length=512
xout = librosa.frames_to_time(np.arange(m+1), sr=sr, hop_length=hop_length)
print xout, xout.min(), xout.max()
librosa.display.specshow(D, sr=sr, hop_length=hop_length, y_axis='linear', x_axis='time')
plt.colorbar(format='%+2.0f dB')
plt.title('Log-frequency power spectrogram')
plt.savefig('sp.png')
plt.show()