在 while 循环中异步播放声音

Play a sound asynchronously in a while loop

如何在 while 循环中异步播放声音,但又不重叠声音。等待上一个播放完成,然后再播放,依此类推,直到 while 循环 运行ning。当然,当播放 运行ning 时,while 循环应该继续 运行。

import time
from playsound import playsound

while True:
    time.sleep(0.1)
    playsound('sound.wav', block=False)  # Please suggest another module, "playsound" stopped working and I gave up on fixing it.
    print('proof that the while loop is running while the sound is playing')

编辑:还有一点,播放不应该排队,一旦while循环停止,播放也必须停止(只让播放的那个播放完)

第二天我设法解决了这个问题。

我使用了线程,我不得不在 class 中使用它来检查它是否存在,因为我不能只是 t1 = threading.Thread(target=func) t1.start( ) 在 while 循环中,因为我之前需要检查线程是否处于活动状态。

所以...

import threading

from playsound import playsound


class MyClass(object):
    def __init__(self):
        self.t1 = threading.Thread(target=play_my_sound)


def play_my_sound():
    playsound('sound.wav')


def loop():
    while True:
        if not my_class.t1.is_alive():
            my_class.t1 = threading.Thread(target=play_my_sound)
            my_class.t1.start()


if __name__ == "__main__":
    my_class = MyClass()
    loop()

这回答了我的问题,声音在 while 循环中在它自己的线程上播放,并且只有在前一个结束时才开始播放。

注意:我的 playsound 库有问题,但这是因为我必须使用 \ 作为路径而不是 / - 在我的原始代码中,声音不相同文件夹作为主脚本。我也不得不降级到playsound==1.2.2版本。