Em primeiro lugar, eu não gosto de Bash. Caminhos de tubulação para processos não são tão bons, e causam todo tipo de esquisitice quando não são feitos 'só isso'. Dito isto, muitas das coisas que você está tentando fazer no Bash que não são gentis com trabalho ou operação podem ser feitas com (infelizmente) mais código, mas podem funcionar do jeito que você quer , em outras línguas.
Então, estando um pouco entediado e interessado em criar algo para isso, eu fui e escrevi um script Python (muito difícil) que pode fazer o que você está procurando. Pode parecer complexo, mas funciona muito bem, e eu coloquei comentários onde quer que seja ou expliquei isso abaixo.
OBSERVAÇÃO: Eu só testei isso com o VLC player e o Rhythmbox no meu sistema, e com xdg-open
que abre o manipulador padrão da GUI para o arquivo fornecido. No meu caso, o VLC é o padrão que xdg-open
chama. Se você estiver em uma GUI e quiser apenas usar o media player padrão para o arquivo MP3, use xdg-open
para "player".
Requisitos do pacote no seu sistema:
-
python
(Python 2.6 ou superior, mas não Python 3) -
python-dev
(bibliotecas Python de importância)
Processo de instalação de scripts:
Não há muito trabalho aqui. Mas, para simplificar, siga estas etapas:
- Crie uma pasta
bin
no seu diretório pessoal:mkdir /home/$USER/bin
- Altere o diretório para a nova pasta 'bin':
cd /home/$USER/bin
- Crie um arquivo chamado
randommp3
. Copie e cole o código da seção "Código / Script" abaixo neste arquivo com um editor de texto. Salve o dito arquivo. - Tornar o arquivo executável:
chmod +x /home/$USER/bin/randommp3
- Divirta-se, mas observe os seguintes detalhes de uso:
- Você não tem escolha a não ser especificar qual media player usar.
oxmplayer
seria o que você colocaria no lugar deplayer
quando você executasse o arquivo. - Se a sua música for não em
/home/$USER/Music
(onde$USER
é o usuário atualmente conectado), você também precisará especificar o caminho completo do diretório com o argumento--dir
(ou um de seus aliases, conforme explicado na seção "uso" abaixo). Se o caminho da pasta contiver espaços , você deverá envolvê-lo entre aspas simples (por exemplo, para o diretório "Minhas músicas" em um determinado caminho, você digitaria como/path/to/My Music
para o argumento--dir
).
- Você não tem escolha a não ser especificar qual media player usar.
Exemplo de execução :
Abra um arquivo MP3 aleatório a partir da pasta Music do usuário em seu diretório Home, no GUI VLC Player
randommp3 vlc-wrapper
Abra um arquivo MP3 aleatório de uma unidade externa chamada "MusicDrive" montada em Music Drive
na pasta /media
, no media player chamado oxmplayer
randommp3 --dir '/media/Music Drive' oxmplayer
Uso
randommp3 [-h] [--dir DIRPATH] player
Open a random MP3 in the player of choice, or the default player
positional arguments:
player The executable name of the media player to open the
MP3 with. If none specified, uses the system default
player.
optional arguments:
-h, --help show this help message and exit
--dir DIRPATH, --directory DIRPATH, --music-dir DIRPATH
The path to the directory where your music is stored.
If the path has spaces, wrap the entire path in
single-quotes ('/home/ubuntu/My Music/' for example).
If not specified, the current user's Music directory
in their /home/ folder is used.
Código: (ou um link que você pode salvar se você for realmente tão preguiçoso )
#!/usr/bin/python
import getpass
import subprocess as sp
import os
import glob
import random
import argparse
if __name__ == "__main__":
# Parse arguments to the script
argparser = argparse.ArgumentParser(description="Open a random MP3 in the player of choice, or the default player",
add_help=True)
argparser.add_argument('--dir', '--directory', '--music-dir', dest='dirpath', type=str,
default=str('/home/' + getpass.getuser() + '/Music'), required=False,
help="The path to the directory where your music is stored. If the path has spaces, wrap the "
"entire path in single-quotes ('/home/ubuntu/My Music/' for example). If not specified, "
"the current user's Music directory in their /home/ folder is used.")
argparser.add_argument('player', type=str, help="The executable name of the media player "
"to open the MP3 with. If none specified, "
"uses the system default player.")
# Using the above 'argparser' items, get the arguments for what we're going to be using.
args = argparser.parse_args()
# Gp to the directory your music is in.
os.chdir(args.dirpath)
mp3s = glob.glob('*.mp3')
# Modify the directory path to make sure we have the trailing slash
dirpath = args.dirpath
if dirpath[-1] not in '/\':
dirpath += '/'
# Actually open the MP3 file, and /dev/null to suppress output messages from the process.
DEV_NULL = open(os.devnull, 'w')
execpath = [args.player, '%s%s' % (dirpath, str(random.choice(mp3s)))]
sp.Popen(execpath, stdout=DEV_NULL, stderr=DEV_NULL)