2012年3月21日水曜日

日記ちゃん Zen Style M100


 10年ほど使っているプレイヤーがフル充電から30分で電池切れするので、
適当にこれ買ったのだけど、これがなかなか癖の強いやつなんだ。
この子、曲をタグで管理するらしく、
いままでフォルダに分けるぐらいしかしてなかったから全部一緒くたにされてしまい目当ての曲を探すのが、もー大変! 
 そこでフォルダ別のプレイリストを作成するプログラムを書いた。
これなら曲を探しやすいし、管理方法も変えずにすむって寸法。


https://skydrive.live.com/redir.aspx?cid=8cd7cf5ea9fbca55&resid=8CD7CF5EA9FBCA55!385&parid=8CD7CF5EA9FBCA55!138&authkey=!ALp5f6JArx9PAW8
 CreatePlayList.vbs
 size: 4KB
 
 
 
■使い方
1. お使いのM100のルートフォルダにダウンロードしたCreatePlayList.vbsを置いてください。

 

2. CreatePlayList.vbsを実行
(windowsならダブルクリックで実行される。ほかは知らん)
確認ウィンドウがでるので良ければ[OK]

 
3. しばし終わるのを待つ
終わったら[終了]と出ます

 
 その後本体起動時にリストのチェックが入るのか起動時間が長くなります。
気長にお待ちくださいませ。
 

 無事プレイリストの読み込みが完了した
 
 Musicフォルダには以下画像のように配置しています。

 完了後のPlayListフォルダはこんな感じに。

 
 
 
■仕様
 設定したフォルダパス内にあるフォルダの数だけm3uを作成します。
たとえば、

G:.
├─Music
│ ├─フォルダ1
│ │ ├─01.mp3
│ │ └─02.mp3
│ ├─フォルダ2
│ │ ├─disc1
│ │ │ ├─01.mp3
│ │ │ ├─02.mp3
│ │ │ └─03.mp3
│ │ └─disc2
│ │   ├─01.mp3
│ │   ├─02.mp3
│ │   └─03.mp3
│ └─フォルダ3
├─Pictures
├─Video
├─Recorded
└─Playlist
 
って構成になっていたら作成されるm3uは
フォルダ1.m3u
フォルダ2.m3u
の2つが、PlayListフォルダに出力されます。
 フォルダ2は中にさらにフォルダがありますが、
まとめてフォルダ2.m3uに保存されることになります。
 またフォルダ3には曲がないのでフォルダ3.m3uは出力されません。
 
 CreatePlayList.vbsの中身を書き換えることで、
出力先フォルダ、入力フォルダを変更することができます。
デフォルトではPlayListフォルダに出力する設定になっていますが、
既存のプレイリストとごちゃごちゃになるのが気になる方は出力先を変更すると良いでしょう。
 以下vbsファイル内容

' Zen Style M100の曲ファイルをフォルダ別にm3uにして、PlayListに保存するプログラム
' 2012-03-21 ver 1.00
' author sumishiro@gmail.com
' 本プログラムのご利用に際し如何なる損失や損害が発生しても、一切の責任を負いかねます。ご了承ください。
 
Option Explicit
 
 
 
Dim outputDirectory
Dim searchDirectory
Dim rootFileName
 
 
 
' m3u出力先。フォルダが存在しないと出力されないようなので注意
outputDirectory = ".\Playlist"
 
 
 
' 調べるディレクトリパス
' このディレクトリにあるフォルダ名でm3uファイルを作成し、
' 各フォルダ内にある音楽ファイルをm3uに突っ込む
' 同名のm3uは上書きされるので注意
searchDirectory = ".\Music"
' searchDirectory = "./"
 
 
 
' searchDirectoryに直接おいてある曲もm3uリストにしたい場合
' 以下に出力m3uファイル名を定義してね
' rootFileName = "root"
 
 
 
 
Dim fso
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
 
 
 
' m3uファイル作成
' あらかじめ設定した出力先にfileNameを結合してUNICODEで保存
Function createM3UFile( fileName, fileData )
  If Len(fileData) > 0 Then
    Dim filePath
    filePath = fso.BuildPath( outputDirectory, fileName & ".m3u" )
 
    Dim file
    Set file = fso.OpenTextFile( filePath, 2, True, -1 )
 
    file.Write( fileData )
 
    file.Close
    createM3UFile = True
  Else
    createM3UFile = False
  End If
End Function
 
 
 
' パスからドライブ名を除く
' [c:\folder\folder\file.ext]->[\folder\folder\file.ext]
Function delDriveName( filePath )
  Dim pos
  pos = InStr( filePath, "\" )
 
  Dim strLen
  strLen = Len( filePath )
 
  Dim ret
  ret = Right( filePath, strLen-pos+1 )
 
  delDriveName = ret
End Function
 
 
 
 
' ディレクトリ内にあるwmv, mp3, wav, ogg, flacファイルのパスをfileDataに列挙。
' そのときC:などのドライブ名は削除し\Music~といったファイルパスに変換されて保存する
Sub scanMusicFile( dirPath, fileData )
  Dim src
  Set src = fso.GetFolder( dirPath )
 
  Dim filePath
  For Each filePath In src.Files
    Dim ext
    ext = LCase( fso.GetExtensionName(filePath) )
    If ext="wmv" Or ext="mp3" Or ext="wav" Or ext="ogg" Or ext="flac" Then
      fileData = fileData & delDriveName( filePath ) & vbNewLine
    End If
  Next
End Sub
 
 
 
' ディレクトリ走査
' 音楽ファイルへのパスをあつめるところまで
Sub scanDirectory( dirPath, fileData )
  Dim src
  Set src = fso.GetFolder( dirPath )
 
  Dim subDirPath
  For Each subDirPath In src.SubFolders
    Call scanDirectory( subDirPath, fileData )
  Next
 
  Call scanMusicFile( dirPath, fileData )
End Sub
 
 
 
' searchDirectoryに定義したパスを走査
Sub scanRootDirectory( dirPath )
  Dim src
  Set src = fso.GetFolder( dirPath )
 
  Dim subDirPath
  For Each subDirPath In src.SubFolders
    Dim fileData
    fileData = ""
    Call scanDirectory( subDirPath, fileData )
 
    Dim fileName
    fileName = fso.GetFileName( subDirPath )
    Call createM3UFile( fileName, fileData )
  Next
 
  ' searchDirectoryにある曲をm3u出力する
  If Len(rootFileName) > 0 Then
    fileData = ""
    Call scanMusicFile( dirPath, fileData )
    Call createM3UFile( rootFileName, fileData )
  End If
End Sub
 
 
 
' 処理の開始
Dim message
message = "処理を開始します" & vbNewLine & "output=" & fso.GetAbsolutePathName(outputDirectory) & vbNewLine & "input=" & fso.GetAbsolutePathName(searchDirectory)
 
If MsgBox(message, 1, "確認")=1 Then
  Call scanRootDirectory( searchDirectory )
  MsgBox("終了")
End If

 
 普段は全曲シャッフルで聞くから問題ないんだけど、
ときどき狙って聞きたくなる。そんな時用。
製作時間二日。WSHは初めてだったが資料が豊富で学びやすい印象だ。
 M100はoggの再生が一応可能だが、
バッファリングがうまくいってないのかぶつぶつ途切れがちになるし、
ボタンの反応も悪くなるので使用はあまりお勧めできない。
自分は普段ogg使ってたけど、mp3に変換しなおした。mp3なら快適。
oggでもディスプレイが表示されてないときはぼちぼち再生可能なようだが。
 指紋がかなりつくが気にしたら負けだ。
 
■関連
生産がす: ZenStyleM100-CreatePlayList v102
生産がす: 日記ちゃんCheckPlayList

0 件のコメント: