当其他代码行同时执行时,如何播放声音?

时间:2018-10-11 22:12:52

标签: python windows while-loop

我希望我的代码执行此操作,但是要在后台播放音乐:

import time 
while True:
    print ('ligma')
    time.sleep(1.5)

我尝试过:

import time 
import winsound
while True:
    print ('ligma')
    time.sleep(1.5)
    winsound.PlaySound("dank", winsound.SND_ALIAS)

但是,它会重复声音然后来重复单词。我希望它能重复单词并同时播放声音。

2 个答案:

答案 0 :(得分:1)

您需要在另一个线程上播放声音,以便您的其他代码可以同时执行。

import time
import winsound
from threading import Thread

def play_sound():
    winsound.PlaySound("dank", winsound.SND_ALIAS)

while True:
    thread = Thread(target=play_sound)
    thread.start()
    print ('ligma')
    time.sleep(1.5)

编辑: 我已经将线程声明移入了循环。我最初的回答是在循环之外创建的,这引起了RuntimeError。在此处了解更多信息:https://docs.python.org/3/library/threading.html#threading.Thread.start

答案 1 :(得分:0)

这称为异步声音,PlaySound上的winsound.SND_ASYNC标志可让您在代码继续执行的同时播放声音:

winsound.PlaySound("dank", winsound.SND_ALIAS|winsound.SND_ASYNC)

从内存中,这将为您提供单个声音通道,即播放其他声音将切断当前播放的任何声音。如果需要更多的并行播放,则需要类似PyGame的内容。