如何把librosa的波形图显示在pyqt的界面上,感谢
audio_path = './sample-000000.wav'
# Load a wav file
y, sr = librosa.load(audio_path, sr=None)
# extract mel spectrogram feature
melspec = librosa.feature.melspectrogram(y, sr, n_fft=1024, hop_length=512, n_mels=128)
# convert to log scale
logmelspec = librosa.power_to_db(melspec)
plt.figure(figsize=(12, 8))
# plot a wavform
plt.subplot(2, 1, 1)
librosa.display.waveplot(y, sr)
plt.title('Waveform')
# plot mel spectrogram
plt.subplot(2, 1, 2)
librosa.display.specshow(logmelspec, sr=sr, x_axis='time', y_axis='mel')
plt.title('Mel spectrogram')
plt.tight_layout() # 保证图不重叠
plt.show()
把这个界面显示在一个窗口上
可以用如下代码进行处理显示在pyqt5中:
import matplotlib
import librosa.display
matplotlib.use('Qt5Agg')
# 使用 matplotlib中的FigureCanvas (在使用 Qt5 Backends中 FigureCanvas继承自QtWidgets.QWidget)
class My_Main_window(QtWidgets.QDialog):
def __init__(self, parent=None):
# 父类初始化方法
super(My_Main_window, self).__init__(parent)
# 几个QWidgets
self.figure = plt.figure(figsize=(12,8))
self.canvas = FigureCanvas(self.figure)
self.button_plot = QtWidgets.QPushButton("绘制")
# 连接事件
self.button_plot.clicked.connect(self.plot_)
# 设置布局
layout = QtWidgets.QVBoxLayout()
layout.addWidget(self.canvas)
layout.addWidget(self.button_plot)
self.setLayout(layout)
# 连接的绘制的方法
def plot_(self):
audio_path = r'F:\2021\qa\ot1\recorded.wav'
# Load a wav file
y, sr = librosa.load(audio_path, sr=None)
# extract mel spectrogram feature
melspec = librosa.feature.melspectrogram(
y, sr, n_fft=1024, hop_length=512, n_mels=128)
# convert to log scale
logmelspec = librosa.power_to_db(melspec)
# plot a wavform
plt.subplot(2, 1, 1)
librosa.display.waveplot(y, sr)
plt.title('Waveform')
# plot mel spectrogram
plt.subplot(2, 1, 2)
librosa.display.specshow(
logmelspec, sr=sr, x_axis='time', y_axis='mel')
plt.title('Mel spectrogram')
plt.tight_layout() # 保证图不重叠
self.canvas.draw()
# 运行程序
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
main_window = My_Main_window()
main_window.show()
app.exec()
如对你有帮助,请点击本回答的采纳按钮给予采纳。