用python播放wav音频并且带有进度条播放按钮
时间: 2023-11-19 17:46:36 浏览: 203
以下是一个示例代码,使用pydub库实现了wav音频的播放,并使用tkinter库创建了一个简单的GUI界面,包括一个进度条和播放按钮。
```python
from tkinter import *
from tkinter import filedialog
from pydub import AudioSegment
from pydub.playback import play
import threading
class AudioPlayer:
def __init__(self, file_path):
self.audio = AudioSegment.from_wav(file_path)
self.playing = False
def play(self, start_time, end_time):
if self.playing:
return
self.playing = True
if end_time == -1:
end_time = len(self.audio)
audio_slice = self.audio[start_time:end_time]
play(audio_slice)
self.playing = False
class PlayerGUI:
def __init__(self):
self.root = Tk()
self.root.title("WAV Player")
self.create_widgets()
self.audio_player = None
def create_widgets(self):
self.file_label = Label(self.root, text="No File Selected")
self.file_label.pack()
self.select_button = Button(self.root, text="Select File", command=self.select_file)
self.select_button.pack()
self.progress_bar = Progressbar(self.root, orient=HORIZONTAL, length=300, mode='determinate')
self.progress_bar.pack()
self.play_button = Button(self.root, text="Play", command=self.play_audio)
self.play_button.pack()
def select_file(self):
file_path = filedialog.askopenfilename()
if file_path:
self.file_label.config(text=file_path)
self.audio_player = AudioPlayer(file_path)
def play_audio(self):
start_time = 0
end_time = -1
self.progress_bar['value'] = 0
if self.audio_player:
t = threading.Thread(target=self.audio_player.play, args=(start_time, end_time))
t.start()
self.update_progress()
def update_progress(self):
if self.audio_player and self.audio_player.playing:
current_time = self.audio_player.audio.tell()
total_time = len(self.audio_player.audio)
progress = int(current_time / total_time * 100)
self.progress_bar['value'] = progress
self.root.after(100, self.update_progress)
def run(self):
self.root.mainloop()
if __name__ == '__main__':
gui = PlayerGUI()
gui.run()
```
该代码创建了两个类:`AudioPlayer`用于处理音频文件,`PlayerGUI`用于创建GUI界面。在`AudioPlayer`类中,使用pydub库读取wav文件,并提供了`play()`方法用于播放音频。在`PlayerGUI`类中,使用tkinter库创建了一个窗口,包括一个标签、一个按钮、一个进度条和一个播放按钮。单击“Select File”按钮可以选择要播放的wav文件。单击“Play”按钮可以播放选定的音频文件,并在进度条上显示播放进度。`update_progress()`方法使用`after()`函数周期性地更新进度条。整个应用程序使用`run()`方法运行。
请注意,该示例代码仅用于演示如何使用Python播放wav音频并在GUI中显示进度条和播放按钮。实际应用程序可能需要更复杂的功能,例如暂停、停止、重置等。
阅读全文