每当我使用“playsound”在后台播放声音时,我的游戏的其余部分都不会加载

Posted

技术标签:

【中文标题】每当我使用“playsound”在后台播放声音时,我的游戏的其余部分都不会加载【英文标题】:Whenever I use the "playsound" to play sound in the background the rest of my game does not load 【发布时间】:2019-01-05 16:33:39 【问题描述】:

我决定使用playsound() 在我的程序中添加背景声音。但是,当我使用 playsound 运行程序时,实际游戏在歌曲播放完毕之前不会加载:

from playsound import playsound
#type 'pip install playsound' in command prompt to install library
import random

playsound('audio.mp3')

while True:
    min = 1
    max = 6
    roll_again = "yes"
    while roll_again == "yes" or roll_again == "y":
        print("Rolling the dices...")
        print("The values are....")
        print(random.randint(min, max))
        print(random.randint(min, max))
        roll_again = raw_input("Roll the dices again?")

通常我希望在加载和播放骰子游戏时在后台播放声音,但它不是这样工作的。

【问题讨论】:

playsound 不是 Python 本身的一部分。它来自哪个图书馆?将该库添加到您问题的标签中。并将代码缩减为minimal reproducible example——尽可能短的代码,它会在不更改运行时产生您所询问的问题。包括一个让人们重现问题的 MCVE 还可以确保人们可以测试他们的答案,并验证其他人提出的答案的正确性。另请参阅SSCCE 定义,它密切相关(尽管它本身不是 Stack Overflow 规则的一部分)。 (现在你的代码在没有更改的情况下无法运行根本——只提供了一个函数而没有调用它,没有imports 等)。 好的,我已经完成了,希望它有助于找到解决方案。 是的,这很有帮助。 【参考方案1】:

来自the playsound module 的文档:

还有一个可选的第二个参数block,默认设置为True。将其设置为False 会使函数异步运行。

因此,如果你想让它在后台运行一次,你需要使用:

playsound('audio.mp3', block=False)

...或者,如果您希望它在后台重复运行,等到一个实例完成后再开始下一个实例,您可以为此目的启动一个线程:

import threading
from playsound import playsound

def loopSound():
    while True:
        playsound('audio.mp3', block=True)

# providing a name for the thread improves usefulness of error messages.
loopThread = threading.Thread(target=loopSound, name='backgroundMusicThread')
loopThread.daemon = True # shut down music thread when the rest of the program exits
loopThread.start()

while True:
    raw_input("Put your gameplay loop here.")

【讨论】:

以上是关于每当我使用“playsound”在后台播放声音时,我的游戏的其余部分都不会加载的主要内容,如果未能解决你的问题,请参考以下文章

播放按钮声音而不停止在后台运行的音乐

每当用户与屏幕交互时播放触摸声音

C++ 中的 Playsound() 播放 windows 错误声音,我已经包含了 winmm.lib

如何使用 (IBAction)playsound:(id)sender 播放声音 [关闭]

如何使用 PlaySound() 或任何基本函数/方法在 C++ 中同时播放 1 个以上的 .wav 声音?

PlaySound() mmslib 不播放现有声音