Я разрабатываю музыкальный проигрыватель в Python 2.7, и у меня есть проблема, которую я не могу решить.
Иногда необходимо отключить SD-карту, с которой я играю.Поскольку pygame по-прежнему сохраняет последний воспроизводимый файл открытым после команд pygame.mixer.stop () и pygame.mixer.quit () , размонтировать карту было невозможно.
Поэтому я изменил свой код, чтобы использовать команды открытия и закрытия файла, чтобы можно было правильно закрыть воспроизводимый файл перед размонтированием.Таким образом, размонтирование работает нормально.
Моя проблема в том, что python всегда зависает при воспроизведении первой музыки.Нет никаких исключений или сообщений об ошибках, воспроизведение просто останавливается, и программа не отвечает ни на какой пользовательский ввод, даже Ctrl + C не работает, чтобы завершить выполнение из оболочки.
Это зависание всегда происходитв случайное время, где-то между 1 и 40 секундами после начала игры.Если я открою файл напрямую с помощью команды pygame.mixer.music.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()