1

Also habe ich an einer Mini-JARVIS-Sache in Python gearbeitet und ich habe eine Menge Fortschritte gemacht. Was passiert, wenn ich meinen Code starte, speichert er zuerst die AI-Sprache in eine mp3-Datei und spielt diese dann mit Pygame ab. Wenn ich jedoch versuche, die MP3-Datei zu löschen, heißt es, dass "der Prozess nicht auf die Datei zugreifen kann, weil sie von einem anderen Prozess verwendet wird" und dann der Dateiname. Was mich noch mehr verwirrt ist, dass ich diese .py verwendet habe, um die mp3 zu machen, und ich benutze die gleiche, um zu versuchen, sie zu löschen, aber sie sagt, dass sie von einem anderen Prozess verwendet wird? Wie kann ich die Dateien löschen, da selbst nach der Verwendung des Task-Managers und dem Sicherstellen, dass keine Python-Dateien ausgeführt werden, immer noch angegeben wird, dass sie von einem anderen Prozess verwendet werden, und auch ein Neustart des Computers nicht funktioniert. Ich könnte jede Hilfe gebrauchen, danke. Hier ist mein Code.Wie schließe ich MP3-Dateien, die von Python verwendet werden?

#google text to speech, for putting into mp3 
from gtts import gTTS 
#actual speech recognition library 
import speech_recognition as speech_recog 
#to play the mp3 
from pygame import mixer 
#to get the time and the date 
import time 
#to print the calendar 
import calendar 
#to delete the file after it has been played 
import os 

#make the computer talk 
def speech_output(ai_string): 
    tts = gTTS(text=ai_string, lang='en-us') 
    comp_string = str('compspeech.mp3') 
    tts.save(comp_string) 

    mixer.init() 
    mixer.music.load(comp_string) 
    mixer.music.play() 
    print('AI Speech:', ai_string) 
    os.remove('compspeech.mp3') 

#get user's speech 
def speech_input(): 
    r = speech_recog.Recognizer() 
    with speech_recog.Microphone() as source: 
     print('You may speak after AI has talked ') 
     user_speech = r.listen(source) 

    try: 
     print("Sphinx thinks you said: " + r.recognize_sphinx(user_speech)) 
    except sr.UnknownValueError: 
     print("Sphinx could not understand audio") 
    except sr.RequestError as e: 
     print("Sphinx error - {0}".format(e)) 

    #start testing for what user said 
    if user_speech == 'what is the time' or user_speech == 'what is the date': 
     time(user_speech) 
    elif user_speech == 'show me a calendar': 
     show_calendar() 
    else: 
     speech_output('No action found for that statement, sorry about that.') 

#get the date and the time 
def date_time(): 
    current_date_time = time.asctime() 
    speech_output(current_date_time) 

#display the calendar 
def show_calendar(): 
    speech_output('Please enter the year for the calendar you want to see') 
    year = int(input('Type year here: ')) 
    print(calendar.calendar(year, 2, 1, 10)) 

speech_output('Hi') 
speech_input() 

Die letzten 2 Zeilen sind nur für die Ausführung der grundlegenden KI und Benutzer sprechen, um sicherzustellen, dass sie tatsächlich funktionieren. Der Fehler tritt in der Funktion "read_output" auf "os.remove()" auf, wie Sie wahrscheinlich vermutet haben.

Antwort

1

mixer.music.play() beginnt im Hintergrund zu spielen, wenn Sie also versuchen, die Datei zu löschen, wird sie noch wiedergegeben. Sie müssen für den Sound zu Ende warten, so etwas wie

mixer.init() 
mixer.music.load(comp_string) 
mixer.music.play() 
while pygame.mixer.music.get_busy(): 
    pygame.time.Clock().tick(10) 
os.remove(mp3file) 

Siehe Details how play mp3 with pygame

+0

Das ist für mich nicht funktioniert. Selbst wenn ich 'time.sleep()' 'nach der Dauer der Musikdatei verwende, wird' os.remove() 'einen' PermissionError' auslösen, der besagt, dass ein anderer Prozess die Datei benutzt. Und das liegt daran, dass die Datei immer noch im Mixer geladen ist. Sobald ich eine andere Datei geladen habe, kann ich die vorherige löschen. – Reti43

Verwandte Themen