C#でオーディオデータのアルバムアートを取得・変更する

taglib-sharpを利用してアルバムアートを取得、変更する時のメモ

ライブラリはNuGetで容易に導入可能。

アルバムアートの取得方法は以下を参考に

https://stackoverflow.com/questions/10247216/c-sharp-mp3-id-tags-with-taglib-album-art/25626802

そして変更ですが、以下のように直接変更するのでは無く一度配列を作ってからTag.Picturesに代入します。

var tfile = TagLib.File.Create(Path);
using (tfile) {
TagLib.IPicture[] newPictures = new TagLib.IPicture[tfile.Tag.Pictures.Length];
for (int i = 0; i < tfile.Tag.Pictures.Length; i++) {
var picture = tfile.Tag.Pictures[i];
var imageBin = picture.Data.Data;
// 画像のバイナリ値。実際はここで処理を加える
var outBin = imageBin;
var newImage = new TagLib.Picture(new TagLib.ByteVector(outBin));
newImage.Description = picture.Description;
newImage.Type = picture.Type;
newPictures[i] = newImage;
}
tfile.Tag.Pictures = newPictures;
tfile.Save();
}

この方法で画像サイズを縮小してもファイルサイズは変わらないようです。

PADDINGと言う仕様を利用しているかららしい?

https://xiph.org/flac/format.html#format_overview