如何把librosa的波形图显示在pyqt的界面上

如何把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()


如对你有帮助,请点击本回答的采纳按钮给予采纳。