用python生成显示wav文件波形和可以在时间轴裁剪波形后保存波形文件的PYQT程序

时间: 2024-05-16 10:12:52 浏览: 7
以下是一个简单的PYQT程序,可以生成并显示wav文件的波形,并允许用户在时间轴上裁剪波形后保存波形文件。 ```python import sys import wave import numpy as np import matplotlib.pyplot as plt from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QSlider, QFileDialog class MainWindow(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setGeometry(100, 100, 800, 600) self.setWindowTitle('Waveform Viewer') self.file_label = QLabel(self) self.file_label.setGeometry(20, 20, 300, 20) self.file_label.setText('No file loaded.') self.load_button = QPushButton(self) self.load_button.setGeometry(20, 50, 100, 30) self.load_button.setText('Load File') self.load_button.clicked.connect(self.load_file) self.play_button = QPushButton(self) self.play_button.setGeometry(20, 100, 100, 30) self.play_button.setText('Play') self.play_button.clicked.connect(self.play_file) self.trim_slider = QSlider(self) self.trim_slider.setGeometry(20, 150, 760, 20) self.trim_slider.setOrientation(Qt.Horizontal) self.trim_slider.setEnabled(False) self.trim_slider.sliderMoved.connect(self.update_trim) self.trim_start_label = QLabel(self) self.trim_start_label.setGeometry(20, 180, 100, 20) self.trim_start_label.setText('Trim Start: 0.0s') self.trim_end_label = QLabel(self) self.trim_end_label.setGeometry(680, 180, 100, 20) self.trim_end_label.setText('Trim End: 0.0s') self.save_button = QPushButton(self) self.save_button.setGeometry(20, 210, 100, 30) self.save_button.setText('Save File') self.save_button.setEnabled(False) self.save_button.clicked.connect(self.save_file) self.show() def load_file(self): filename, _ = QFileDialog.getOpenFileName(self, 'Open File', '.', 'Wave Files (*.wav)') if filename: self.wav_file = wave.open(filename, 'rb') self.file_label.setText('File: ' + filename) self.play_button.setEnabled(True) self.trim_slider.setEnabled(True) self.save_button.setEnabled(True) self.trim_slider.setMaximum(self.wav_file.getnframes()) self.trim_end_label.setText('Trim End: {:.1f}s'.format(self.wav_file.getnframes() / self.wav_file.getframerate())) def play_file(self): self.wav_file.rewind() data = self.wav_file.readframes(1024) while data: data = self.wav_file.readframes(1024) def update_trim(self): start_sample = self.trim_slider.value() end_sample = self.wav_file.getnframes() self.trim_start_label.setText('Trim Start: {:.1f}s'.format(start_sample / self.wav_file.getframerate())) self.trim_end_label.setText('Trim End: {:.1f}s'.format(end_sample / self.wav_file.getframerate())) def save_file(self): filename, _ = QFileDialog.getSaveFileName(self, 'Save File', '.', 'Wave Files (*.wav)') if filename: start_sample = self.trim_slider.value() end_sample = self.wav_file.getnframes() self.wav_file.setpos(start_sample) data = self.wav_file.readframes(end_sample - start_sample) with wave.open(filename, 'wb') as f: f.setnchannels(self.wav_file.getnchannels()) f.setsampwidth(self.wav_file.getsampwidth()) f.setframerate(self.wav_file.getframerate()) f.writeframes(data) if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() sys.exit(app.exec_()) ``` 该程序使用PyQt5进行GUI界面的设计,使用wave和numpy库来处理wav文件,使用matplotlib库来生成波形图。程序分为四个部分: 1. 初始化UI界面。 2. 加载wav文件,并显示文件信息。 3. 播放wav文件。 4. 保存裁剪后的wav文件。 用户可以通过点击“Load File”按钮来加载wav文件,通过点击“Play”按钮来播放wav文件。用户可以使用滑动条来裁剪wav文件,并通过点击“Save File”按钮来保存裁剪后的wav文件。

相关推荐

最新推荐

recommend-type

Python3和pyqt5实现控件数据动态显示方式

今天小编就为大家分享一篇Python3和pyqt5实现控件数据动态显示方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

python调用pyaudio使用麦克风录制wav声音文件的教程

主要介绍了python调用pyaudio使用麦克风录制wav声音文件的教程,详细的给大家介绍了pyaudio库的安装与使用,需要的朋友可以参考下
recommend-type

python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例

主要介绍了python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例,需要的朋友可以参考下
recommend-type

Python PyQt5运行程序把输出信息展示到GUI图形界面上

概述:最近在赶毕业设计,遇到一个问题,爬虫模块我用PyQt5写了图形界面,为了将所有的输出信息都显示到图形界面上遇到了问题。 先演示一下效果最终效果吧,下面两张图用来镇楼。可以看到我们图形界面和程序运行的...
recommend-type

Python GUI库PyQt5图形和特效样式QSS介绍

主要介绍了Python GUI库PyQt5图形和特效样式QSS介绍,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

hive中 的Metastore

Hive中的Metastore是一个关键的组件,它用于存储和管理Hive中的元数据。这些元数据包括表名、列名、表的数据类型、分区信息、表的存储位置等信息。Hive的查询和分析都需要Metastore来管理和访问这些元数据。 Metastore可以使用不同的后端存储来存储元数据,例如MySQL、PostgreSQL、Oracle等关系型数据库,或者Hadoop分布式文件系统中的HDFS。Metastore还提供了API,使得开发人员可以通过编程方式访问元数据。 Metastore的另一个重要功能是跟踪表的版本和历史。当用户对表进行更改时,Metastore会记录这些更改,并且可以让用户回滚到
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。