うら干物書き

ゲームを作りたい!

【C#】mp3ファイルのアーティスト名などのタグ情報を取得・編集する

 mp3ファイルの詳細情報を読み込んで、編集するツールを作りたいなぁ。
 C#.NETなら簡単に出来るもんなのかなぁ。
 やってみましょう。


この記事には.NET Framework 4.6.1を使用しています。
この記事にはtaglib 2.1.0を使用しています。

taglibを使ってみよう

f:id:urahimono:20180504143010p:plain

 NuGetにはtaglibという便利なライブラリがあるみたいです。
 taglibはGitHubにコードが公開されているので、コードの中も確認できます。

github.com

 使い方はとっても簡単。
 TagLib.File.Create()にファイル名を指定することでTagLib.Fileクラスが作成されます。
 このクラスのプロパティ経由で、mp3ファイルの情報を閲覧することできます。

 mp3ファイルの情報を書き換える場合は、このクラスのプロパティを変更してTagLib.File.Save()を呼ぶだけで情報がファイルの情報を書き換えることができます。

 コードを書いてみましょう。
Program.cs

class Program
{
    static void Main( string[] i_args )
    {
        try
        {
            // ファイル名からTagLib.Fileを取得しちゃうぞ!
            TagLib.File file = TagLib.File.Create( i_args[ 0 ] );

            // 読み込み
            System.Console.WriteLine( "File: {0} ", file.Name );

            System.Console.WriteLine( "Title: {0} ",            file.Tag.Title );
            System.Console.WriteLine( "Performers: {0} ",       file.Tag.Performers );
            System.Console.WriteLine( "Album Artists: {0} ",    file.Tag.AlbumArtists );
            System.Console.WriteLine( "Album: {0} ",            file.Tag.Album );
            System.Console.WriteLine( "Year: {0} ",             file.Tag.Year );
            System.Console.WriteLine( "Track: {0} ",            file.Tag.Track );
            System.Console.WriteLine( "Genres: {0} ",           file.Tag.Genres );

            System.Console.WriteLine( "Time: {0}:{1} ", file.Properties.Duration.Minutes, file.Properties.Duration.Seconds );
            System.Console.WriteLine( "Bitrate: {0} ",  file.Properties.AudioBitrate );


            // 書き込み
            file.Tag.Title          = "諦めない";
            file.Tag.Performers     = new string[] { "希望を捨てない" };
            file.Tag.AlbumArtists   = new string[] { "くじけない" };
            file.Tag.Album          = "最後まで";

            file.Save();

        }
        catch( System.Exception i_exception )
        {
            System.Console.WriteLine( "例外なの...: {0}", i_exception );
        }
        finally
        {
            System.Console.WriteLine( "..." );
            System.Console.ReadKey();
        }
    }
}

 では出来たアプリケーションを実行してみましょう。
 こちらのmp3ファイルを読み込みましょう。

f:id:urahimono:20180504143021p:plain

 さて、どうなるでしょうか。

f:id:urahimono:20180504143034p:plain
f:id:urahimono:20180504143054p:plain

 うまく処理されたようです。
 ちなみにTagLib.Fileではファイル名は変更できないので、ファイル名を変更する場合はSystem.IO.File.Move()などを使ってくださいね。