我正在用Python2.7开发一个音乐播放器,有个问题我无法解决。在
有时需要卸载我正在播放的SD卡。 因为pygame在pygame.mixer.stop.停止()和pygame.mixer.quit.退出() 命令,无法卸载卡。在
因此,我修改了代码,使用文件打开和关闭命令,以便能够在卸载之前正确关闭播放的文件。这样卸载就可以正常工作了。在
我的问题是,python在播放第一首音乐时总是挂起。没有任何异常或错误消息,播放只是停止,程序不响应任何用户输入,甚至Ctrl+C也无法从shell退出执行。在
这种悬挂总是在随机的时间发生,在游戏开始后的1到40秒之间。 如果我直接用游戏机。混音器。音乐.load(myfile)命令,不使用打开/关闭解决方案,我从来没有任何挂起,程序甚至可以正常播放几个小时。在
我应该使用什么解决方案来正确关闭播放的文件(以便能够卸载存储卡)并避免程序挂起?在
这是我代码的相关部分。它关闭上一个播放会话并开始播放新文件。在
FailedMusicLoad = 0
pygame.mixer.music.stop()
pygame.mixer.stop()
pygame.mixer.quit()
try:
PlayedMp3File.close()
except AttributeError:
pass
try: # test if selected music file can be loaded
PlayedMp3File = open(Selectedmp3)
except IOError:
FailedMusicLoad = 1
if FailedMusicLoad <> 1:
pygame.mixer.init(frequency=musicforlength.info.sample_rate)
pygame.mixer.music.set_volume(MainVolume)
pygame.mixer.music.load(PlayedMp3File)
pygame.mixer.music.play()
您可以尝试先使用memory-mapped file将整个文件加载到内存中:
这样,您只需在将文件加载到内存中时触摸该文件,并使用
with
确保其正确关闭。在我找到了一个简单的解决方法来卸载SD卡。在
在卸载它之前,我使用游戏机。混音器。音乐.load()命令。我没有开始播放这个虚拟文件,只要打开它。 之后就没有任何问题了,SD卡似乎被pygame正确释放了,我可以卸载它。在
相关问题 更多 >
编程相关推荐