Ошибка разрешения Python 3 при воспроизведении звукового файла (mp3, модуль playsound) - PullRequest
0 голосов
/ 03 февраля 2019

Несколько дней назад программа работала нормально, а сегодня просто остановилась.Ни одно письмо не было изменено.Одним из моих шагов по устранению неполадок было удалить файл 'output1.mp3' и проверить, будет ли он работать таким образом, но это не так.Другое дело, что когда он не распечатывал ошибку, он продолжал воспроизводить только один звуковой файл, независимо от того, сказал ли он правильную вещь ... Вот последняя ошибка, которую я получил, надеюсь, она поможет:

Traceback (most recent call last):
  File "main3.py", line 123, in <module>
    start()
  File "main3.py", line 117, in start
    tts(say)
  File "main3.py", line 24, in tts
    play('output1.mp3')
  File "C:\Program Files (x86)\Python36-32\lib\site-packages\playsound.py", line 35, in _playsoundWin
    winCommand('open "' + sound + '" alias', alias)
  File "C:\Program Files (x86)\Python36-32\lib\site-packages\playsound.py", line 31, in winCommand
    raise PlaysoundException(exceptionMessage)
playsound.PlaysoundException:
    Error 275 for command:
        open "output1.mp3" alias playsound_0.8842337577803419
    Cannot find the specified file.  Make sure the path and filename are correct.

Вот код, который я использую, прокомментируйте, если вам нужно, чтобы я дал вам больше информации:

    #!/usr/bin/env python3
import boto3                               # used to 'pythonize' Amazon Polly TTS
import speech                              # speech recognition
from playsound import playsound as play    # for playing sound files
import sys                                 # basically only for exiting
#  import locator                          # for determining the location of the user based on IP address
import locator2                            # for confirming auto-detected location
#  import locator3                         # for definitely confirming auto-detection location
import question                            # module for answering any question

from datetime import datetime              # for displaying the date and time
#  from time import sleep                  # sleep (wai()t for) function
from os import popen as read               # for reading command outputs "read('COMMAND').read()"


def tts(text):
    polly = boto3.client("polly")
    spoken_text = polly.synthesize_speech(Text=str(text),
                                          OutputFormat='mp3',
                                          VoiceId='Brian')
    with open('output11.mp3', 'wb') as f:
        f.write(spoken_text['AudioStream'].read())
        f.close()
    play('output11.mp3')


def ask(query):
    question.question(query)
    response = question.answer
    print(response)
    tts(response)
    ai()


def time():
    now = datetime.now()
    print("Current date and time: ")
    print(now.strftime("%H:%M") + "\n")
    tts("It is " + now.strftime("%H:%M"))
    ai()


def weather():
    response = "Based on your IP address, I've detected that you're located in %s. Is that correct?" % locator2.city
    print(response)
    tts(response)
    speech.speech()
    if 'yes' in speech.x:
        z = read('weather "%s"' % locator2.city).read()
        print(z)
        tts(z)
        ai()
    else:
        response = 'Please say the name of the city you would like the weather information for. \n'
        print(response)
        tts(response)
        speech.speech()
        city = speech.x
        wdr = read('weather "%s"' % city).read()
        print(wdr)
        tts(wdr)
        ai()


def thank():
    response = "You're very welcome! \n"
    print(response)
    tts(response)
    ai()


def ext():
    response = "Goodbye!"
    print(response)
    tts(response)
    sys.exit()


def error():
    response = "Invalid request detected, please try again...\n"
    print(response)
    tts(response)
    ai()


def ai():

    print('Started listening - Speak!')
    speech.speech()
    spoken = speech.x

    # TODO new commands should be written above this, and their trigger words below :)
    question_words = ['?', 'what', 'where', 'when', 'who', 'how', 'why']

    if 'time' in spoken:
        time()

    elif 'weather' in spoken:
        weather()

    elif any(word in spoken for word in question_words):
        ask(spoken)

    elif 'thank' in spoken:
        thank()

    elif 'exit' or 'quit' or 'deactivate' in spoken:
        ext()

    else:
        error()


def start():
    say = "Hello! My name is Dave, and I'm your personal assistant. How may I help you today? \n"
    print(say)
    tts(say)
    ai()


if __name__ == '__main__':
    try:
        start()
    except KeyboardInterrupt:
        ext()

Синтезатор речи - Amazon Polly .Кстати, я использовал PyCharm в качестве IDE и работал на Windows 10. Когда я переключаюсь на свой Linux-компьютер, часть распознавания речи обрывается ...

UPDATE : я настраивалнемного кодировать и удалось исправить ошибку pyaudio, но я получил еще одну в процессе, на этот раз речь шла о разрешениях .. Вот журнал ошибок:

Traceback (most recent call last):
  File "C:/Users/Despot/Desktop/DAv3/main3.py", line 123, in <module>
    start()
  File "C:/Users/Despot/Desktop/DAv3/main3.py", line 118, in start
    ai()
  File "C:/Users/Despot/Desktop/DAv3/main3.py", line 96, in ai
    time()
  File "C:/Users/Despot/Desktop/DAv3/main3.py", line 39, in time
    tts("It is " + now.strftime("%H:%M"))
  File "C:/Users/Despot/Desktop/DAv3/main3.py", line 21, in tts
    with open('output11.mp3', 'wb') as f:
PermissionError: [Errno 13] Permission denied: 'output11.mp3'

ОБНОВЛЕНИЕ 2 : Я возился с проблемой и обнаружил, что проблема присутствует только на моем компьютере с Windows 10, программа отлично работает на Linux.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Ответ для UPDATE2: Скопируйте файл output11.mp3 в другое место и измените путь на новое место:

with open('CHANGE-THIS-PATH', 'wb') as f:

Также убедитесь, что python работает от имени администратора.

0 голосов
/ 03 февраля 2019

playsound libs содержит каталоги windows.Если это не работает только в Linux, вам следует установить playsound lib на компьютере с Linux, а затем скопировать на него только файл main3.py.

...