Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Erro ao tocar segunda mensagem

Esta dando um erro de permissão ao tocar o titulo da segunda noticia, fiz um teste aqui executando via prompt como administrador e deu o mesmo problema.

Logo após, comentei a linha onde chamo a lib 'playsound' para executar o audio e tudo funcionou normal, observei a pasta e vi o arquivo mensagem sendo deletado e adicionado e todas as mensagens sendo exibidas no terminal.

Segue as saidas:

Saido do programa

Aguardando comando de voz
Comando:  Rose últimas notícias
Com reviravolta na apuração, Zema e Anastasia disputam segundo turno em Minas
São Paulo terá segundo turno entre Doria e França
Traceback (most recent call last):
  File "rosie.py", line 100, in <module>
    main()
  File "rosie.py", line 98, in main
    monitora_microfone()
  File "rosie.py", line 51, in monitora_microfone
    executa_comandos(trigger)
  File "rosie.py", line 64, in executa_comandos
    ultimas_noticias()
  File "rosie.py", line 72, in ultimas_noticias
    cria_audio(item.title.text)
  File "rosie.py", line 26, in cria_audio
    tts.save('audios/mensagem.mp3')
  File "C:\...\lib\site-packages\gtts\tts.py", line 246, in save
    with open(savefile, 'wb') as f:

PermissionError: [Errno 13] Permission denied: 'audios/mensagem.mp3'

Código:

def cria_audio(mensagem):
    tts = gTTS(mensagem, lang='pt-br')
    tts.save('audios/mensagem.mp3')
    playsound('audios/mensagem.mp3')  # Windows

É conflito entre as libs ou frescura do windows?

4 respostas

Nicholas, um amigo meu me reportou o mesmo erro. O windows é problemático....... Pelo que informou ele está mantendo o arquivo aberto e por isso dá erro!!! Vou pedir para testarem com outro player diferente do playsound.

Consegui fazer rodar fazendo varios arquivos com nomes diferentes e os deletando depois da execução. Testei criar os audios e depois apagar , só que parece que ele mantem o arquivo em memoria nao sei direito, e mesmo eu tendo deletado o arquivo na hora de falar a segunda noticia, ele só funciona quando nomeio o arquivo com outro nome.

Não sei direito o problema, mas fiz assim e funcionou:

def ultimas_noticias():
    site = get('https://news.google.com/news/rss?ned=pt_br&gl=BR&hl=pt')
    noticias = BeautifulSoup(site.text, 'html.parser')
    c = 0
    for item in noticias.find_all('item')[:5]:
        cria_audio(item.title.text,c)
        c += 1

def cria_audio(mensagem,n=0):
    print('Rose: ', mensagem)
    tts = gTTS(mensagem, lang='pt-br')
    tts.save('audios/mensagem'+str(n)+'.mp3')
    playsound('audios/mensagem'+str(n)+'.mp3') 
    remove('audios/mensagem'+str(n)+'.mp3')
solução!

Nicholas, como você disse no início "Windows......" O que você constatou foi o mesmo que um amigo meu, o arquivo fica "preso"na memória e por isso dá erro! Talvez tentar usar um outro player diferente do playsound seria interessante. Você pode testar ? (Minha máquina é LINUX!!!! e funciona sem problema nenhum.....)

De qualquer modo você já deu uma solução, obrigado!

Oi Nichalos,

tem como testar gTTS com a sintaxe with open que garante o fechamento do arquivo, algo assim:

import os
...
...
def cria_audio(mensagem, n=0):
    print('Rose: ', mensagem)
    nome_arquivo = 'mensagem{}.mp3'.format(n)
    nome_completo = os.path.join('audio', nome_arquivo)         
    with open(nome_completo, 'wb') as mp3:
          tts.write_to_fp(mp3)

Tenho a impressao que nao vai ajudar ....

abs, Nico