[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[pygame] Re: Pygame doesn't close properly so I can't delete the file it's using



Sorry, I posted the wrong code. That code is from when i was trying to use
Pyglet instead of Pygame to open the file and see if that would work This is
the actual code.

import os
import time
import sys
import getpass
import pip
import imp
from contextlib import contextmanager


my_file = "Text To Speech.mp3"
username = getpass.getuser()


@contextmanager
def suppress_output():

    with open(os.devnull, "w") as devnull:
        old_stdout = sys.stdout
        sys.stdout = devnull
        try:  
            yield
        finally:
            sys.stdout = old_stdout


def check_and_remove_file():

    active = pygame.mixer.get_init()
    if active != None:
        pygame.mixer.music.stop()
        pygame.mixer.quit()
        pygame.quit()
    if os.path.isfile(my_file):
        os.remove(my_file)


def wait_for_it(audio_length, greater_than, less_than, time_to_wait):

    if (audio_length) >= (greater_than) and (audio_length) < (less_than):
        time.sleep((audio_length) + (time_to_wait))


def exiting():

    check_and_remove_file()
    print("\nGoodbye!")
    sys.exit()


def input_for_tts(message):

    try:

        tts = gTTS(text = input(message))
        tts.save('Text To Speech.mp3')
        audio = MP3(my_file)
        audio_length = audio.info.length
        try:
            pygame.mixer.init()
        except pygame.error:
            print("\nSorry, no audio device was detected. The code cannot
complete.")
            exiting()
        pygame.mixer.music.load(my_file)
        pygame.mixer.music.play()
        wait_for_it(audio_length, 0, 15, 1)
        wait_for_it(audio_length, 15, 30, 2)
        wait_for_it(audio_length, 30, 45, 3)
        wait_for_it(audio_length, 45, 60, 4)
        wait_for_it(audio_length, 60, 75, 5)
        wait_for_it(audio_length, 75, 90, 6)
        wait_for_it(audio_length, 90, 105, 7)
        wait_for_it(audio_length, 105, 120, 8)
        wait_for_it(audio_length, 120, 135, 9)
        wait_for_it(audio_length, 135, 150, 10)
        wait_for_it(audio_length, 150, 165, 11)
        wait_for_it(audio_length, 165, 180, 12)
        if audio_length >= 180:
            time.sleep((audio_length) + 15)
        try:
            check_and_remove_file()
        except PermissionError:
            imp.reload(pygame)
            check_and_remove_file()

    except KeyboardInterrupt:

        exiting()


with suppress_output():

    pkgs = ['mutagen', 'gTTS', 'pygame']
    for package in pkgs:
        if package not in pip.get_installed_distributions():
            pip.main(['install', package])


import pygame
from pygame.locals import *
from gtts import gTTS
from mutagen.mp3 import MP3


check_and_remove_file()


input_for_tts("Hello there " + username + ". This program is\nused to output
the user's input as speech.\nPlease input something for the program to say:
")


while True:

    try:

        answer = input("\nDo you want to repeat? ").strip().lower()
        if answer in ["n", "no", "nah", "nay", "course not", "don't",
"dont", "not"] or "no" in answer or "nah" in answer or "nay" in answer or
"course not" in answer or "don't" in answer or "dont" in answer or "not" in
answer:
            exiting()
        elif answer in ["y", "yes", "yeah", "course", "ye", "yea", "yh",
"do"] or "yes" in answer or "yeah" in answer or "course" in answer or "ye"
in answer or "yea" in answer or "yh" in answer or "do" in answer:
            input_for_tts("\nPlease input something for the program to say:
")
        else:
            print("\nSorry, I didn't understand that. Please try again with
yes or no.")

    except KeyboardInterrupt:

        exiting()



--
View this message in context: http://pygame-users.25799.x6.nabble.com/Pygame-doesn-t-close-properly-so-I-can-t-delete-the-file-it-s-using-tp3044p3057.html
Sent from the pygame-users mailing list archive at Nabble.com.