Воспроизведение звука непрерывно с Winsound и остановить его нажатием кнопки
Я пытаюсь работать с winsound
в Python 3. Для запуска звука я делаю это так:
play = lambda: PlaySound('Sound.wav', SND_FILENAME)
play()
Звук воспроизводится только один раз, но я хочу его зациклить. Есть ли встроенная функция для зацикливания звука?
Следующий шаг: в tkinter у меня есть кнопка с командой:
button3 = Button(root, text="Stop Alarm", fg="Red", bg="Black", command=stopAlarm)
Данная команда должна остановить воспроизведение уже зацикленного звука. Это функция:
def stopAlarm():
#stop the alarm
Короче говоря, я хочу зациклить звук и быть в состоянии остановить звук, есть идеи, как мне это сделать?
1 ответ
Решение
Для воспроизведения звука непрерывно с winsound
Вы можете объединить SND_FILENAME, SND_LOOP, SND_ASYNC
константы с побитовым ИЛИ |
: SND_FILENAME|SND_LOOP|SND_ASYNC
,
И чтобы остановить звук, вы можете просто передать None
в качестве первого аргумента PlaySound
,
import tkinter as tk
from winsound import PlaySound, SND_FILENAME, SND_LOOP, SND_ASYNC
class App:
def __init__(self, master):
frame = tk.Frame(master)
frame.pack()
self.button = tk.Button(frame, text='play', command=self.play_sound)
self.button.pack(side=tk.LEFT)
self.button2 = tk.Button(frame, text='stop', command=self.stop_sound)
self.button2.pack(side=tk.LEFT)
def play_sound(self):
PlaySound('Sound.wav', SND_FILENAME|SND_LOOP|SND_ASYNC)
def stop_sound(self):
PlaySound(None, SND_FILENAME)
root = tk.Tk()
app = App(root)
root.mainloop()