ディレクトリからランダムなmp3を再生するコマンドが必要です。これまで私は試しました
ls *.mp3 | shuf -n 1 | omxplayer
すべてのプレーヤーは、ファイル名を受け取っていないように動作し、ヘルプを吐き出します。助けてくれてありがとう!
まず、私はBashが嫌いです。プロセスへのパスの配管はそれほど良いものではなく、「そう」していないと、あらゆる種類の奇妙さを引き起こします。そうは言っても、Bashでやろうとしていることや操作に親切でないことの多くは、(残念ながら)より多くのコードで実行できますが、work他の言語でそれをしたい。
だから、多少退屈し、このために何かを作成することに興味があるので、私は行って、あなたが探しているものを実行できる(非常にラフな)Pythonスクリプトを書きました。複雑に見えるかもしれませんが、非常にうまく機能します。どこにでもコメントを入れたり、以下で説明したりしました。
注:私はこれを自分のシステムのVLCプレーヤーとRhythmbox、および指定されたファイルのGUIのデフォルトハンドラーを開くxdg-open
でのみテストしました。私の場合、VLCはxdg-open
が呼び出すデフォルトです。 GUIを使用していて、MP3ファイルにデフォルトのメディアプレーヤーを使用する場合は、「プレーヤー」にxdg-open
を使用します。
システムのパッケージ要件:
python
(Python 2.6以降、ただしnotPython 3)python-dev
(重要なPythonライブラリ)スクリプトインストールプロセス:
ここではあまりうまくいきません。しかし、より簡単にするために、次の手順に従ってください。
bin
フォルダーを作成します:mkdir /home/$USER/bin
cd /home/$USER/bin
randommp3
というファイルを作成します。テキストエディターを使用して、以下の「コード/スクリプト」セクションからこのファイルにコードをコピーアンドペーストします。上記のファイルを保存します。chmod +x /home/$USER/bin/randommp3
oxmplayer
は、ファイルを実行するときにplayer
の代わりに置くものです。/home/$USER/Music
のnotである場合(ここで$USER
は現在ログインしているユーザーです)、 --dir
引数(または以下の「使用法」セクションで説明されているエイリアスの1つ)で完全なディレクトリパスを指定します。フォルダーパスにanyスペースが含まれている場合は、単一引用符で囲む必要があります(たとえば、指定されたパスの「マイミュージック」ディレクトリでは、/path/to/My Music
に--dir
として入力します)。実行例:
GUI VLCプレーヤーで、ホームディレクトリのユーザーのMusicフォルダーからランダムなMP3ファイルを開きます
randommp3 vlc-wrapper
oxmplayer
というメディアプレーヤーで、Music Drive
フォルダー内の/media
にマウントされた "MusicDrive"という外部ドライブからランダムなMP3ファイルを開きます。
randommp3 --dir '/media/Music Drive' oxmplayer
使用法
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.
コード:(または 本当に怠け者なら保存できるリンク )
#!/usr/bin/python
import getpass
import subprocess as sp
import os
import glob
import random
import argparse
if __== "__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)
このコマンドはbashで動作するはずです。 MP3ファイルが置かれている親フォルダーから実行することをお勧めします。
find . -type f -name '*.mp3' | shuf -n 1 | xargs -d "\n" omxplayer
または、omxplayer
をお気に入りのメディアプレーヤーに置き換えます。
または、動作する別のコマンドは、xdg-open
を使用して、@ muruがコメントしたようにデフォルトのプレーヤーを使用することです。
xdg-open "$(find . -type f -name '*.mp3' | shuf -n 1)"
注:shuf
から-n 1
を削除すると、すべてのMP3ファイルがシャッフルされた順序で再生されます。ただし、これにはxdg-open
ではなく、実際のプレーヤーを使用する必要があります。そして、ここでの最初のコマンドでのみ機能します。ちょうどそれをテストしました。