Как мне остановить звуки, накладывающиеся друг на друга с помощью winsound?(Питон и ткинтер) - PullRequest
1 голос
/ 16 мая 2019

Я пытаюсь создать простую звуковую панель в python, используя tkinter.Моя цель состоит в том, чтобы просто иметь одну кнопку, в данном случае под названием «bruh», где каждый раз, когда нажимается кнопка, она воспроизводит звук «bruh.wav».

Пока что это работает, однако еслиЯ должен был нажать кнопку несколько раз, звуки будут складываться друг на друга, как будто это очередь.Как сделать так, чтобы каждое нажатие кнопки отменяло воспроизведение звука и просто воспроизводило начало файла wav?

Я прочитал в модуле winsound команды "PURGE", представляющие интерес, но я не уверенчто касается того, как это реализовать, я только новичок, извините!

from tkinter import *

root = Tk()

def leftClick(event):
    import winsound
    winsound.PlaySound("realbruh.wav", winsound.SND_FILENAME)



frame = Frame(root, width=600, height=600)

bruhButton = Button(root, text="bruh")
bruhButton.bind("<Button-1>", leftClick)
bruhButton.pack()

root.mainloop()

т.е.: если бы я спамил кнопку, звук "bruh" проигрывался один за другим, пока не достигнетколичество раз, когда я нажал кнопку.Как сделать так, чтобы они перебивали друг друга, а очереди не было?

1 Ответ

0 голосов
/ 16 мая 2019

Если звук - это все, что вам нужно и вы можете использовать модуль pygame, попробуйте мой метод.

Если у вас нет модуля pygame, тогда установите с pip install pygame.Я использую модуль pygame для всех звуковых эффектов в моих проектах tkinter, и он отлично работает.

Вот как я это сделал:

from tkinter import *
import pygame

pygame.mixer.init()  # initialise `init()` for mixer of pygame. 
sound = pygame.mixer.Sound("bruh.wav")  # Load the sound.

root = Tk()

def leftClick(event):
    sound.stop()  # Stop the ongoing sound effect.
    sound.play()  # Play it again from start.

frame = Frame(root, width=600, height=600)

bruhButton = Button(root, text="bruh")
bruhButton.bind("<Button-1>", leftClick)
bruhButton.pack()

root.mainloop()
...