Как освободить ресурс в микшере PyGame?

Я использую модуль gTTS python для получения mp3 из Google Text-To-Speech API и PyGame для воспроизведения выходных файлов mp3 без открытия внешнего проигрывателя (есть ли более простой способ сделать это?)

Однако похоже, что микшер PyGame не освобождает файловый ресурс даже после его выхода.

phrase = "Hello!"
tts = gtts.gTTS(text=phrase, lang='en')
tts.save("googleTTS.mp3")

f = MP3("googleTTS.mp3")
mixer.init(f.info.sample_rate)
mixer.music.load("googleTTS.mp3")
mixer.music.play()
while mixer.music.get_busy() == True:
    continue
mixer.quit()        # doesn't free resource?

phrase = "Bye!"
tts = gtts.gTTS(text=phrase, lang='en')
tts.save("googleTTS.mp3")

Последняя строка дает исключение:

    IOError: [Errno 13] Permission denied: 'googleTTS.mp3'

Я должен заметить, что проблема не в функции tts.save, потому что код без микшера работает нормально.

Как я могу освободить ресурс микшера и использовать один и тот же файл снова и снова?


person kostr22    schedule 04.08.2015    source источник
comment
Может проблема в f? Вы пробовали del f или что-то в этом роде? Не знаю, что делает класс MP3 (?).   -  person sloth    schedule 04.08.2015
comment
Нет, проблема такая же и без f, когда я использую значение статического битрейта, например Mixer.init (16000)   -  person kostr22    schedule 04.08.2015
comment
Вы пробовали mixer.music.stop() до mixer.quit()?   -  person luoluo    schedule 05.08.2015
comment
Да, тоже не помогло   -  person kostr22    schedule 05.08.2015
comment
Попробовать chmod 777 googleTTS.mp3 из командной строки?   -  person Cplusplusplus    schedule 11.08.2015


Ответы (1)


У меня работает такой способ:

pygame.mixer.music.play()
while pygame.mixer.music.get_busy():
    clock.tick(30)
pygame.mixer.music.stop()
pygame.mixer.quit()
person Slava Litvinov    schedule 12.11.2017