Shimmer灬 2021-10-24 16:50 采纳率: 100%
浏览 68
已结题

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

把这个界面显示在一个窗口上

  • 写回答

1条回答 默认 最新

  • CSDN专家-HGJ 2021-10-24 22:23
    关注

    可以用如下代码进行处理显示在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()
    
    
    

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月8日
  • 已采纳回答 10月31日
  • 创建了问题 10月24日

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题