【问题标题】:Why does pygame need time.sleep in to play sound before exiting?为什么 pygame 需要 time.sleep 在退出之前播放声音?
【发布时间】:2019-07-03 03:52:03
【问题描述】:

我只是在玩 Python 播放 MP3 文件,碰到了pygame

我得到它来播放音乐,但不知何故我需要添加 time.sleep(SECONDS) 才能播放音乐,否则当我在终端中运行时它会立即存在

这是有原因还是我做得不对?

import pygame, time
from pygame.locals import *

pygame.mixer.pre_init(44100, 16, 2, 4096)
pygame.init()
pygame.mixer.music.load("path/to/mp3/file")
pygame.mixer.music.play()
time.sleep(32)

我不是在尝试创建游戏或任何东西,正如我所提到的,我只是在玩 Python

【问题讨论】:

  • 好吧,如果您不使用time.sleep(),它会立即退出...这就是您需要time.sleep() 的原因。
  • @kindall 好吧,因为我也在阅读文档说它会播放并且还可以传递整数 for 循环,所以我有点困惑。所以如果我想播放整个文件,我需要找到一种方法来获取音乐的长度? :|
  • @Tsuna 你应该让它在一个单独的线程上播放或者有一些其他的逻辑。您可以将input() 阻止,直到用户提供输入。应该是要启动了,然后程序进入游戏逻辑,就不用担心程序结束了。
  • @CharlesDuffy 明白了,我想我并没有从游戏的角度思考这就是我自己得到@_@ 的原因,因为我只是想找到一个库来用 python 播放音乐。尝试了其他一些简单的库,但没有奏效,这让我自己感到困惑。非常感谢您的解释
  • @Carcigenicate 感谢您的建议

标签: python time pygame


【解决方案1】:

说出“为什么”——pygame.mixer.music 并没有真正设计为前台进程:想法是这是在其他东西运行时播放的背景音乐。如果用户说他们想退出游戏,如果该游戏一直运行到当前的背景音乐曲目结束,他们通常会感到恼火。


如果您想在音乐播放完之前一直阻塞,一种低效但简单的方法是使用循环检查是否完成:

while pygame.mixer.music.get_busy():
  time.sleep(0.1)

【讨论】:

    猜你喜欢
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多