サウンドファイルへのID3タグの書き込み (TagLib#を利用) - C#

C#のプログラムでサウンドファイルにID3タグを書き込むコードを紹介します。

概要

こちらの記事ではサウンドファイルからID3タグの情報を読み出すコードを紹介しました。 この記事では、サウンドファイルにID3タグの情報を書き込むコードを紹介します。

事前準備:TagLibSharpのインストール

Visual Studioでプロジェクトを作成し、プロジェクトにTagLibSharpをインストールします。TagLibSharpはNuGetでインストールできます。
NuGetパッケージマネージャーコンソールでインストールする場合は、以下のコマンドを実行します。
Install-Package TagLibSharp
または
Install-Package TagLibSharp -Version 2.2.0
NuGetパッケージマネージャーコンソールでのパッケージのインストール手順の詳細は こちらの記事を参照してください。

または、GUIのNuGetパッケージマネージャーで、TagLibSharp を検索してインストールしても良いです。GUIのNuGetパッケージマネージャーでのインストール手順の詳細は こちらの記事を参照してください。

プログラム例

.NET 6のWindows Formアプリケーションを作成します。

UI

下図のフォームを作成します。

コード

下記コードを記述します。
namespace TagWrite
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
          textBox1.Text = openFileDialog1.FileName;
        }
    }

    private void button2_Click(object sender, EventArgs e)
    {
      TagLib.File f = TagLib.File.Create(textBox1.Text);
      string Title = f.Tag.Title;
      string AlbumTitle = f.Tag.Album;
      string Artist = f.Tag.Performers.FirstOrDefault() ?? "";
      uint Trackno = f.Tag.Track;
      f.Dispose();

      textBox2.Text +=  Title;
      textBox3.Text += AlbumTitle;
      textBox4.Text +=  Artist;
      textBox5.Text += Trackno.ToString();
    }

    private void button3_Click(object sender, EventArgs e)
    {
      TagLib.File f = TagLib.File.Create(textBox1.Text);

      f.Tag.Title = textBox2.Text;
      f.Tag.Album = textBox3.Text;
      f.Tag.Performers = new string[] {textBox4.Text};
      f.Tag.Track = Convert.ToUInt32(textBox5.Text);

      f.Save();
      f.Dispose();
    }
  }
}

解説

button1はテキストボックスの右側の[...]ボタンです。クリックするとOpenFileDialogを表示し、選択されたファイルのフルパスをtextBox1に設定します。
    private void button1_Click(object sender, EventArgs e)
    {
        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
          textBox1.Text = openFileDialog1.FileName;
        }
    }

button2は[Read]ボタンです。textBox1に入力されたパスのファイルを開き、タグの内容を読み込み、ウィンドウ下部のテキストボックスに表示します。 タグの読み込みの詳細はこちらの記事を参照してください。
    private void button2_Click(object sender, EventArgs e)
    {
      TagLib.File f = TagLib.File.Create(textBox1.Text);
      string Title = f.Tag.Title;
      string AlbumTitle = f.Tag.Album;
      string Artist = f.Tag.Performers.FirstOrDefault() ?? "";
      uint Trackno = f.Tag.Track;
      f.Dispose();

      textBox2.Text +=  Title;
      textBox3.Text += AlbumTitle;
      textBox4.Text +=  Artist;
      textBox5.Text += Trackno.ToString();
    }

button3は[Write]ボタンです。
    private void button3_Click(object sender, EventArgs e)
    {
      TagLib.File f = TagLib.File.Create(textBox1.Text);

      f.Tag.Title = textBox2.Text;
      f.Tag.Album = textBox3.Text;
      f.Tag.Performers = new string[] {textBox4.Text};
      f.Tag.Track = Convert.ToUInt32(textBox5.Text);

      f.Save();
      f.Dispose();
    }

textBox1に入力されたパスのファイルを開きます。ファイルは TagLib.File.Create() メソッドで開きます。第一引数に開くファイルのパスを与えます。 TagLib.FileオブジェクトがCreateメソッドの戻り値になります。
      TagLib.File f = TagLib.File.Create(textBox1.Text);

テキストボックスに入力された値をタグの各プロパティに設定します。
      f.Tag.Title = textBox2.Text;
      f.Tag.Album = textBox3.Text;
      f.Tag.Performers = new string[] {textBox4.Text};
      f.Tag.Track = Convert.ToUInt32(textBox5.Text);

TagLib.FileオブジェクトのSave()メソッドでファイルを保存し、タグの情報を更新します。
  f.Save();

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[...]ボタンをクリックし、ファイルを開くダイアログでメディアファイルを選択する、または、テキストボックスにメディアファイルのパスを入力します。


テキストボックスにファイルのパスが入力された状態で[Read]ボタンをクリックします。ファイルを開き、タグの情報を読み込みます。タグの内容が下部のテキストボックスに表示されます。


テキストボックスの内容を変更します。今回は下図の内容に変更しました。


[Write]ボタンをクリックします。画面上では変化はありません。


ファイルのプロパティを確認します。プロパティダイアログを表示し、[詳細]タブを表示します。 アプリケーションで設定した内容に変更されていることが確認できます。


変更前の詳細プロパティは下図です。


C#のプログラムでメディアファイルのID3タグの情報を変更できました。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2022-02-05
iPentec all rights reserverd.