web-dev-qa-db-ja.com

ランダムなmp3ファイルを再生する

ディレクトリからランダムなmp3を再生するコマンドが必要です。これまで私は試しました

ls *.mp3 | shuf -n 1 | omxplayer

すべてのプレーヤーは、ファイル名を受け取っていないように動作し、ヘルプを吐き出します。助けてくれてありがとう!

3
aramsichord

まず、私は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ライブラリ)

スクリプトインストールプロセス:

ここではあまりうまくいきません。しかし、より簡単にするために、次の手順に従ってください。

  1. ホームディレクトリにbinフォルダーを作成します:mkdir /home/$USER/bin
  2. ディレクトリを新しい「bin」フォルダーに変更します:cd /home/$USER/bin
  3. randommp3というファイルを作成します。テキストエディターを使用して、以下の「コード/スクリプト」セクションからこのファイルにコードをコピーアンドペーストします。上記のファイルを保存します。
  4. ファイルを実行可能にします:chmod +x /home/$USER/bin/randommp3
  5. 楽しんでください。ただし、次の使用法に注意してください。
    • 使用するメディアプレーヤーを指定する以外に選択肢はありません。 oxmplayerは、ファイルを実行するときにplayerの代わりに置くものです。
    • あなたの音楽が/home/$USER/Musicnotである場合(ここで$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)
3
Thomas Ward

このコマンドは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ではなく、実際のプレーヤーを使用する必要があります。そして、ここでの最初のコマンドでのみ機能します。ちょうどそれをテストしました。

3
Terrance