徳島ゲーム開発ごっこ 技術ブログ

ゲームを作るために役に立ったり立たなかったりする技術を学んでいきます!

【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()などを使ってくださいね。