Воспроизведение звука непрерывно с 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()
Другие вопросы по тегам