The wait for it calls can all be done in a loop, is there a reason for having them all listed out?
On May 28, 2017 4:01 PM, "Gameskiller01" <nathanq620...@gmail.com> wrote: Thank you very much! Using the code: with open(my_file) as f: m = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) pygame.mixer.music.load(m) pygame.mixer.music.play() m.close() The code now finally works! I haven't been this happy for a long time! Full code: import os import time import sys import getpass import pip import mmap 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') with open(my_file) as f: m = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) 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(m) 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: m.close() 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-tp3044p3062.html Sent from the pygame-users mailing list archive at Nabble.com.