Как только я нажимаю кнопку, она остается нажатой, и программа вылетает. Звук действительно играет. Я использую код прямо из сайта PyAudio, поэтому я немного запутался, почему он сбой.Кнопка вызова кнопки Tkinter для воспроизведения волны с помощью 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()
у вас есть сообщение об ошибке? возможно, проблема в том, что ваша функция работает слишком долго, а mainloop не может выполнять свою работу - используйте «threads». – furas
Как именно я буду использовать потоки для этого? Я попытался поместить функцию в поточный класс, используя «class AudioFile (threading.Thread)» или даже помещая функцию воспроизведения звука внутри потоковой передачи. Thread(), но я все равно получаю тот же результат. Я думаю, возможно, проблема в том, что цикл while не нарушается, но этот код прямо из документации PyAudio (не сбой, когда я комментирую цикл while, хотя, конечно, тогда файл не воспроизводится). – jonnyg1986