PermissionError: [Errno 13] Отказано в доступе: 'voice.mp3' - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь создать ChatBot, VA, в Python, для получения аудиовыхода у меня есть пакеты gtts (google text to speech), playsound, и я использовал system os для сохранения аудиофайла перед воспроизведением.

Код ниже:

from gtts import gTTS
import speech_recognition as sr
import playsound
import os #to save the file
import time


def speak(text):#this defines the function SPEAK and creates the command for its use
           tts = gTTS(text=text, lang="en")
           filename = "voice.mp3"
           tts.save(filename) #saves the audio file
           playsound.playsound(filename)

       #function ends here

Для воспроизведения аудио я использую эту функцию следующим образом:

>>>speak("I am speaking this text")

Вышеприведенный ^^^ прекрасно работает , но когда я использую несколько операторов, таких как:

>>>speak("I am saying this")
>>>speak("And also this!")

Это выдает ошибку:

PermissionError: [Errno 13] Permission denied: 'voice.mp3'

Как я понял, это связано с совпадением имен аудиофайлов. Но затем, когда я попытался использовать al oop для изменения числа каждый раз, он все еще показывал ошибку после воспроизведения звука в течение определенного числа раз. Может кто-нибудь, пожалуйста, дайте мне решение этой проблемы? Спасибо!

Ответы [ 2 ]

1 голос
/ 22 февраля 2020

Вы не можете перезаписать файл voice.mp3 из-за другого вызова функции. Что вам нужно сделать, это удалить файл voice.mp3 после воспроизведения файла. Итак:

def speak(text):#this defines the function SPEAK and creates the command for its use
       tts = gTTS(text=text, lang="en")
       filename = "voice.mp3"
       tts.save(filename) #saves the audio file
       playsound.playsound(filename)
       os.remove(filename)

Убедитесь, что вы не храните файл в уязвимом месте, а ваш рабочий каталог находится где-то в документах или загружаемых файлах или что-то в этом роде.

0 голосов
/ 22 февраля 2020

Звучит как проблема с правами доступа к файлу, когда функция выполняется, она перезаписывает существующий файл

Я бы проверил, есть ли у пользователя / группы, работающей с кодом, разрешение на чтение / запись

Как это сделать, зависит от того, используете ли вы windows, ма c или linux

...