gpt4 book ai didi

python - 使用 PyAudio 播放波的 Tkinter 按钮调用功能——崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 05:41:12 26 4
gpt4 key购买 nike

我一按下按钮,它就保持按下状态,程序崩溃了。声音确实播放。我使用的代码直接来自 PyAudio 网站,所以我有点困惑为什么它会崩溃。

from tkinter import *
import pyaudio
import wave
import sys

root = Tk()
root.title("Compose-O-Matic")
root.geometry("400x300")

def play_audio():
chunk = 1024
wf = wave.open('misc_environment3.wav', 'rb')
p = pyaudio.PyAudio()

stream = p.open(
format = p.get_format_from_width(wf.getsampwidth()),
channels = wf.getnchannels(),
rate = wf.getframerate(),
output = True)

data = wf.readframes(chunk)

while data != '':
stream.write(data)
data = wf.readframes(chunk)

stream.stop_stream()
stream.close()
p.terminate()

app = Frame(root)
app.grid()

button_start = Button(app, text = ">", command = play_audio)
button_start.grid()

root.mainloop()

最佳答案

使用线程来播放音乐。

from tkinter import *
import pyaudio
import wave
import sys
import threading

# --- classes ---

def play_audio():
global is_playing
chunk = 1024
wf = wave.open('misc_environment3.wav', 'rb')
p = pyaudio.PyAudio()

stream = p.open(
format = p.get_format_from_width(wf.getsampwidth()),
channels = wf.getnchannels(),
rate = wf.getframerate(),
output = True)

data = wf.readframes(chunk)

while data != '' and is_playing: # is_playing to stop playing
stream.write(data)
data = wf.readframes(chunk)

stream.stop_stream()
stream.close()
p.terminate()

# --- functions ---

def press_button_play():
global is_playing
global my_thread

if not is_playing:
is_playing = True
my_thread = threading.Thread(target=play_audio)
my_thread.start()

def press_button_stop():
global is_playing
global my_thread

if is_playing:
is_playing = False
my_thread.join()

# --- main ---

is_playing = False
my_thread = None

root = Tk()
root.title("Compose-O-Matic")
root.geometry("400x300")

button_start = Button(root, text="PLAY", command=press_button_play)
button_start.grid()

button_stop = Button(root, text="STOP", command=press_button_stop)
button_stop.grid()

root.mainloop()

关于python - 使用 PyAudio 播放波的 Tkinter 按钮调用功能——崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33851107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com