なんちゃって鶯教

このページを印刷

MP3のタグ情報を自動的に一括で編集する方法

Googleブックマークに登録
Yahoo!ブックマークに登録

ソニーのウォークマン(WALKMAN) NW-X1060(NW-X1000シリーズ) では、フォルダ単位での再生・管理ができません。

MP3のタグ情報(アーティスト名、アルバム名)単位での管理、再生のみ対応しています。

そこで、「アーティスト名」に「フォルダパス名」をセットすることで、フォルダ単位で管理・再生できるスクリプトを作ってみました。

※ バージョン1.10(2009年11月26日)アップグレードすると、フォルダ検索・再生に対応しています。

機能

  • MP3のタグ情報(アルバム名)を、スクリプトが置いてある階層以下のフォルダパス名に置き換える
  • 「アルバム名」が「H\MUSIC\フォルダ」のように変更される

制約

  • Windows でのみ機能(VBScript で作成)
  • 「cddbcontrol.dll」が別途必要
  • MP3 のタグを修正するだけなので、ウォークマン以外でも利用可能

ダウンロード

使い方

初めて利用する場合

  • 「コマンドプロンプト」を起動して DLL をレジストリに登録する
H:\MUSIC>Regsvr32 cddbcontrol.dll
  • レジストリを開いて、「CDDBControl.CddbID3Tag」が存在するかを確認
HKEY_CLASSES_ROOT\CDDBControl.CddbID3Tag

※ DLLをレジストリに登録する場合には、「管理者権限」モードで実行する必要があります。

2回目以降

  • NW-X1060 の MUSIC フォルダに、ダウンロードしたスクリプトを置く
  • 音楽ファイルの転送後、ダウンロードしたスクリプトを実行(ダブルクリック)する

CddbID3Tag に関する参考ページ

ソース

Option Explicit
' ファイルを表示するフォルダを指定
Private Const TARGETFOLDER = "."

Call Main()
WScript.Quit 0

' メイン関数
Sub Main()
    Dim objFS, objFolder, objId3
    ' FileSystemObject オブジェクトを作成する
    Set objFS = CreateObject("Scripting.FileSystemObject")
    ' CddbID3Tag オブジェクトを作成する
    Set objId3 = CreateObject("CDDBControl.CddbID3Tag")

    ' 指定フォルダ情報を取得する
    Set objFolder = objFS.GetFolder( TARGETFOLDER )
    Call FindFilePathAll(objFolder, objId3)

    Set objFS  = Nothing
    Set objId3 = Nothing
End Sub

' 全フォルダのファイルを検索する
Sub FindFilePathAll(ByVal objFolder, ByVal objId3)
    Dim objFile, files, subfolders, objSub
    Set files = objFolder.Files
    ' フォルダ中のファイル毎に処理を行う
    For Each objFile In files
        Call EditTagOfMP3(objFile, objId3)
    Next
    ' サブフォルダに対して再帰処理
    Set subfolders = objFolder.SubFolders
    For Each objSub In subfolders
        Call FindFilePathAll(objSub, objId3)
    Next
End Sub

' MP3のタグ情報を編集する
Sub EditTagOfMP3(ByVal objFile, ByVal objId3)
    ' フォルダ中の mp3 ファイルだけを取得する
    If LCase(Right(objFile.Name, 4)) = ".mp3" Then
        objId3.LoadFromFile objFile.Path, False
        objId3.Clear
        ' アルバム名にファイルパスを入力する
        objId3.Album = Left(objFile.Path, _
                            Len(objFile.Path) - Len(objFile.Name)) 
        objId3.Commit
    End If
End Sub

まとめ

50行程度のスクリプトなので、容易に理解できると思います。各自で好きなようにカスタマイズして利用してください。