我正在尝试制作文本游戏并向其中添加一些音乐,也许听起来也是如此,但是,“最大最伟大”的答案是Pygame。经过测试,我发现当您使用ANY Pygame函数时,它将停止当前终端会话打印更多输出,这将阻止游戏继续。
我首先尝试了平常的方式...
from pygame import *
def some_function():
mixer.load("music.mp3")
mixer.music.play(0)
clock = time.Clock()
clock.tick(10)
while mixer.music.get_busy():
clock.tick(10)
Rest_of_function
当然这是行不通的,因为它是一个循环并且正在按顺序进行,所以我接下来尝试了...
from file_with_music import * #added threading to this file
def main():
file_with_music.start()
Rest_of_Function
但是,这不起作用,因为令人讨厌的“ Welcome to pygame”弹出窗口再次阻止了终端输出...
所以下一步是制作一个新文件,然后...
from Main import *
from Intro_Sounds import *
if __name__ == '__main__':
Intro_Thread.start() #Intro did not start because pygame popup was somehow called
Music_Thread.start()
即使将它们都放入线程中,它仍然不起作用...
请注意,Main内置有一个要执行的功能
Music_Thread.join()
Music_Thread.stop()
满足特定输入条件后。
预期结果是它在后台播放音乐,同时终端继续打印输出并接受输入,直到输入将杀死Music线程的输入为止。当然,它不起作用,我茫然不知所措...
如何在不冻结终端的情况下播放音乐。
答案 0 :(得分:0)
可悲的是,pygame.mixer
不具备此功能(据我所知)。请改用winsound
:
import winsound # only on windows tho...
winsound.PlaySound('sound.wav', winsound.SND_ASYNC) # this will play the sound and...
print('I can still print :D') # this can still print :D
答案 1 :(得分:0)
尝试了几件事后,我发现...
Pygame对声音和终端输出不友好,因此无法正常工作。
WxPython不再具有功能正常的声音模块,从而使其失去作用。
其他项目被放弃或特定于操作系统...
但是,我发现PyOpenAL确实可以工作,尽管它无法理解mp3文件或32位float wav。我不再使用多线程,而是切换到多处理(制作2000行脚本来正确学习模块的工作原理),现在声音在播放(和循环)同时允许终端输出。
TL:DR
PyOpenAL是赢家。
答案 2 :(得分:0)
请尝试以下操作-
from pygame import *
def some_function():
pygame.mixer.music.load("music.mp3")
pygame.mixer.music.play(0)
clock = time.Clock()
clock.tick(10)
while pygame.mixer.music.get_busy():
clock.tick(10)
Rest_of_function