モブ沢工房

プログラミングとかLinux関連(特にOSSのグラフィックツール関連)とかレトロゲームとか3Dプリンタやら日曜大工等、色々。

LinuxでWalkman NW-S784のプレイリストを編集

walkmanのプレイリストはwindowsmacの専用ソフト上でしか作れない…

そんなふうに考えていた時期が

俺にもありました」

そんでもってふとググっていて出たこちらのサイト。

WALKMANでX-アプリを使わずにプレイリストを作成する方法 - 道すがら講堂

この「パソコン実践講座 道すがら講堂」様のページを見たらなんか出来そうじゃないですか。 そこで適当にvimで書いて、set fileencoding=utf-8してtest.m3u8として保存してwalkmanに放り込んだら何と簡単にできてしまいました。BOMとかめんどくさそうだなーと思いましたが特に何もせずとも問題ないようですね。

一体、今までブックマークで我慢していたのは何だったのだ…*1

そこで、気を良くしてちょっとpythonで小物を作りました。

xfceのthunarにはファイルアクションとして選択しているファイルに対して任意のプログラムを実行できる仕組みがあります。それを利用してプレイリストを生成するプログラムを作ったわけです。

ファイルアクションで作ったのはGUIでユーザーと対話するのが面倒だったわけで、ファイル名を聞くというのもめんどくさいため、playlist-14-11-10_19:25:40.m3u8と言う感じでその時の時間でファイルを作るようにしました。そんでリネームで対応しようと。

これだと現状ではフォルダに対応していないのですが、まぁ後で考えるというかそんなに曲を持つことがあるだろうかとも思ったり。

もし作るなら、予めサブディレクトリごとにplaylist_m3u8.partとして子プレイリストを似たようなファイラーのアクションで作成しておき、音楽のルートディレクトリから「選択されたサブディレクトリにある同名のm3u8.partファイル」をインポートするとかそういう仕組みで作ろうかな〜とか思ってます。*2

それかいっそのこと、Rhythmboxとかの吐くm3uファイル(フルパス表記)を相対パスに書き換えるソフトにしてしまったほうが楽でいいかなぁ…あんまり好きじゃないんすよねRhytmbox、なんというか大袈裟というか…オイラとしては大昔のxmmsが好きだった…

ソースコード

playlist_maker.pyとして実行権限付けて適当なところに置きます。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import os
import time

def main(filefolder,files):
    lt=time.localtime()
    datestr="%04d-%02d-%02d_%02d:%02d:%02d" % (lt.tm_year,lt.tm_mon,lt.tm_mday,
                                        lt.tm_hour,lt.tm_min,lt.tm_sec)

    with open("%s/%s%s.m3u8" % (filefolder,"playlist_",datestr),'w') as ofp:
        for cf in files:
            ofp.write("%s\n" % os.path.basename(cf))




if __name__ == '__main__':

    import getopt,sys
    try:
        shortcmd="ho:"
        longcmd=["help","option=",'dir=','folder=']
        opts,args=getopt.getopt(sys.argv[1:],shortcmd,longcmd)
        if len(opts)==0 and len(args)>1:
            firstarg=args[0]
            opts,args=getopt.getopt(sys.argv[2:],shortcmd,longcmd)
            args.append(firstarg)

    except getopt.GetoptError,e:
        # something getopterror happen
        print(str(e))
        sys.exit(1)
    except IndexError:
        # no argument assigned 
        pass

    filefolder=''

    for cmd,cmdarg in opts:

        if cmd=='-h' or cmd=='--help':
            print(open(sys.argv[0],'r').read())
            sys.exit(0)
        elif cmd in ('-o','--option'):
            print "option=%s" % cmdarg
        elif cmd in ('--folder','--dir'):
            filefolder=cmdarg
        else:
            pass

    main(filefolder,args)

設定方法

thunarの編集(E)->アクションの設定で新規アクションを作成し 名前を「プレイリスト作成」とかなんかにして

「コマンド」に

(スクリプトのディレクトリへのフルパス)playlist_maker.py --dir=%d %F

と設定すればOK

*1:ただし、手持ちのウォークマンでこの方式でプレイリストが使えるのはNW-S784のみ。NW-E062はダメ

*2:この方法だと作成するプレイリストのファイル名だけはGUIでユーザーに問い合わせなければならない…そこだけtkかgtkで作るか…