Tocar um arquivo mp3 usando python

Oct 06 2020

Eu tenho esse código chamado Programa CountDown. O que meu programa faz é:

  1. Contagem regressiva a partir de 60.

  2. Reproduza um arquivo de som ( alarm.wav) quando a contagem regressiva chegar a zero. Isso significa que o código precisa fazer o seguinte:

    • Faça uma pausa de um segundo entre a exibição de cada número na contagem regressiva, ligando time.sleep().

    • Chame subprocess.Popen()para abrir o arquivo de som com o aplicativo padrão.

Aqui está o código para isso:

import time , subprocess,os
from subprocess import call

def countDown():
    for i in range (10):
        print(i, end='')
        time.sleep(1)

countDown()
subprocess.call([ 'bomb.mp3'])

Quando eu executo isso, recebo:

Error: File not Found

Eu tentei com:

subprocess.call([ 'home/username/bomb.mp3']) # location specified

Mas eu tenho:

Error: Permission denied

Então, tentei com Popen:

subprocess.Popen(['start', 'bomb.mp3'], shell=True)

Mas eu tenho:

Error: 0123456789bomb.mp3: 1: start: not found

Não tenho certeza de por que esse código não funciona no Ubuntu, porque funciona bem no Windows.

O que posso fazer por isso? Existe algum método para abrir arquivos mp3 usando Python no Ubuntu 20.04 LTS ou estou perdendo algum argumento?

Desde já, obrigado.

Respostas

3 EliahKagan Oct 07 2020 at 00:32

Usar:

subprocess.call(['xdg-open', '/home/username/bomb.mp3'])

bomb.mp3(ou alarm.wav) não é um programa ou script que você deseja executar, mas um arquivo que deseja abrir. Como seu objetivo parece ser abri-lo em qualquer aplicativo gráfico atualmente registrado para manipulá-lo - o que é o que pelo menos uma das versões anteriores de seu script fazia quando executado no Windows - você deve usar o xdg-opencomando.

Além de usar xdg-open, também adicionei um guia /para a frente do caminho, sem o qual ele é resolvido em relação ao diretório atual (que provavelmente falharia, exceto quando o diretório atual fosse /).


A primeira versão do seu programa, ou algo semelhante a ele, pode ter funcionado no Windows porque, no Windows, arquivos não executáveis ​​podem ser executados como comandos. Isso faz com que eles sejam abertos com qualquer programa ao qual seu tipo de arquivo está associado. A maioria dos sistemas operacionais e shells não se comportam dessa maneira. O Windows também fornece um comando para fazer isso (com semântica ligeiramente diferente) chamado start. Mas outros sistemas operacionais, como o Ubuntu, não têm start. Então, quando você tentou isso no Ubuntu, também não funcionou.

O que o Ubuntu tem é xdg-open. O Ubuntu não está sozinho aqui - xdg-opennão funciona no Windows ou macOS, mas funciona em sistemas com ambientes de desktop gráficos que seguem os padrões do freedesktop.org . Isso inclui praticamente qualquer sistema GNU / Linux (e alguns outros sistemas operacionais do tipo Unix) se o usuário tiver um ambiente de área de trabalho gráfico instalado .

Para que o xdg-opencomando seja realmente bem-sucedido , o usuário deve estar conectado a uma sessão gráfica.

(No macOS, você usaria open.)