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

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



On 28.05.2017 20:21, Gameskiller01 wrote:
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.

Hi again

ok... errors happen.

I wonder one thing: can't it be played as a sound? (actually not sure how this would help your problem)


The other idea I head is: load the file to memory and close it properly after reading it and let pygame read the in memory file (probably as a file like object). I'm not sure how easy it would be to do (not sure where the limitation are).

~DR0ID