近年はもっぱらSpotifyを使って音楽を聴いてるのでMp3ファイルなんて扱わなくなったんですが、昔のストレージを精査していてちょっと色々いじれたら良いなと感じました。

という事で、Mp3のID3情報を編集したりなんなりがしたいなと思って、小道具を作っていました。 ライブラリとしてはTagLibSharpimagesharpを使ってみました。

TagLibSharpはMp3などのID3情報を編集できるライブラリです。同等で開発も成熟しているライブラリが他にあまり見つからないので、ID3情報編集はC#で開発するのが一番やりやすいと思います。中々見つからないのはなんでなんですかね、やっぱり音楽ファイルを扱う需要が一般に減ってきてるんですかね。
困ったところとしてはドキュメントが全然ないです。API構造が優秀なのでまあ調査して実装はできました。

imagesharpは画像編集ライブラリでMagickNet(image magick)みたいなものです。大きな利点としてはフルマネージドのライブラリなのでシングルバイナリに収められること。 ただしデメリットとしてベースがApache License, Version 2.0なのですが、個人利用以外は有料仕様のライセンスになっていて、色々と商用・法人利用だと面倒です。個人ツールだから使えるところがあるかな。今回はじめて本格的に使ってみましたが、サポートされてるファイルフォーマットも多いし特に処理的には問題ありません。

しかし.NET Standardが確立されてからクロスプラットフォーム対応が効いてきたのは本当に良くなりましたね。どちらのライブラリも基本はWindowsの想定だったと思うんですが、Linuxでも動きますし、テストはされてないそうですがMacでも動くのはこういうときにかゆいところに手が届く、という感じでとてもよろしいかと思います。

アルバムのアートワークを抜き出して保存する

nullチェックは飛ばしてあります。大まかに言うと、以下みたいな感じで出来る。

using TagLib.File? file = TagLib.File.Create(path);
string savePath = fi.FullName;
var data = file.Tag.Pictures.FirstOrDefault()?.Data.Data;
using Image? image = Image.Load(data);
image.Save(savePath);

アルバムのアートワークデータを保存したい場合は、Pictureオブジェクトを生成し設定する必要があります。 例えば、Jpegのバイナリデータをbyte[]から設定したい場合は以下みたいな感じ。

file.Tag.Pictures = [new Picture() {
    Type = PictureType.FrontCover,
    MimeType = MediaTypeNames.Image.Jpeg,
    Data = data
}];

ID3の主なタグのプロパティ

var tag = file.Tag;

から色々なプロパティにアクセスできます。Mp3Tagってソフトで編集出来る主なタグに対応した情報は以下のような感じ。

プロパティ名日本語だと
Titleタイトル
Performersアーティスト
Albumアルバム
AlbumArtistsアルバムアーティスト
Composers作曲家
Year
Trackトラックナンバー
Discディスクナンバー
Genreジャンル
Commentコメント

必要なところを設定してTagLib.File.Save()メソッドを叩けば編集完了。

どうでも良いんですが、最近久々にミスチルのHANABIの良さに気付いた。めっちゃ良い曲じゃないか。イノセントワールドが好きだったんですが笑