Closed marihachi closed 6 years ago
v1 が旧規格
TagInfo クラスみたいな感じで 共通定義できる部分は纏めたい
骨組みは作成済み
ID3のそれぞれのバージョンのクラスを共通化も含めて作成した上で、それらを使ったIAlbumArtExtractorを実装するクラス(MP3AlbumArtExtractor等)を作っていく必要があると思う
https://github.com/Legato-Dev/Legato/blob/master/Legato.AlbumArtExtraction/IAlbumArtExtractor.cs
今指摘されたインターフェイス使って、実装してるよ
ワーイ
v2.2 | v2.3 | v2.4 | 型 | 内容 |
---|---|---|---|---|
CRA | AENC | AENC | バイナリ ( 説明付き ) | オーディオの暗号化形式 |
-- | -- | -- | -- | -- |
CRM | 独自複合形式 | 暗号化メタフレーム | ||
PIC | APIC | APIC | 画像 | ジャケット画像 |
ASPI | バイナリ ( 独自形式 ) | オーディオ シーケンス ポイント インデックス | ||
COM | COMM | COMM | テキスト ( 文字コード、言語、説明付き ) | コメント |
COMR | COMR | 独自複合形式 | コマーシャル フレーム | |
ENCR | ENCR | バイナリ ( 説明付き ) | 暗号化の手法 | |
EQU | EQUA | EQU2 | バイナリ ( 独自形式 ) | イコライザー情報 |
ETC | ETCO | ETCO | バイナリ ( 独自形式 ) | イベント タイム コード |
GEO | GEOB | GEOB | 独自複合形式 | パッケージ化された一般的なオブジェクト |
GRID | GRID | バイナリ ( 説明付き ) | グループ識別子 | |
IPL | IPLS | テキスト ( 文字コード指定 ) | 協力者 | |
LNK | LINK | LINK | LINK 形式 | リンク情報 |
MCI | MCDI | MCDI | 純バイナリ | 音楽CD識別子 |
MLL | MLLT | MLLT | バイナリ ( 独自形式 ) | MPEG ロケーション ルックアップ テーブル |
OWNE | OWNE | バイナリ ( 独自形式 ) | 所有権フレーム | |
PRIV | PRIV | バイナリ ( 説明付き ) | プライベート フレーム | |
CNT | PCNT | PCNT | 純バイナリ | 再生回数 |
POP | POPM | POPM | バイナリ ( 説明付き ) | 人気 ( 1 ~ 255 の数値で表す評価 ) |
POSS | POSS | バイナリ ( 独自形式 ) | 同期位置フレーム | |
BUF | RBUF | RBUF | バイナリ ( 独自形式 ) | 推奨バッファ サイズ |
RVA | RVAD | RVA2 | バイナリ ( 独自形式 ) | 相対ボリューム |
REV | RVRB | RVRB | バイナリ ( 独自形式 ) | リバーブ量 |
SEEK | サイズ指定バイナリ | シーク フレーム | ||
SIGN | バイナリ ( 独自形式 ) | 署名フレーム | ||
SLT | SYLT | SYLT | 独自複合形式 | タイムラインを持つ歌詞情報 |
STC | SYTC | SYTC | バイナリ ( 独自形式 ) | タイムラインを持つテンポ ( Bit Per Minute ) 情報 |
TAL | TALB | TALB | テキスト ( 文字コード指定 ) | 曲の属するアルバム、映画、劇などの名前 |
TBP | TBPM | TBPM | テキスト ( 文字コード指定 ) | テンポ ( Bit Per Minute ) |
TCM | TCOM | TCOM | テキスト ( 文字コード指定 ) | 作曲者 |
TCO | TCON | TCON | テキスト ( 文字コード指定 ) | ジャンル |
TCR | TCOP | TCOP | テキスト ( 文字コード指定 ) | 著作権情報 |
TDA | TDAT | テキスト ( 文字コード指定 ) | 日付 | |
TDEN | テキスト ( 文字コード指定 ) | エンコード日時 | ||
TDY | TDLY | TDLY | テキスト ( 文字コード指定 ) | プレイリスト遅延時間 ( 曲間の無音時間をスキップするための情報 ) |
TOR | TORY | TDOR | テキスト ( 文字コード指定 ) | 原曲のリリース年、日時 |
TRD | TRDA | TDRC | テキスト ( 文字コード指定 ) | 録音日時 |
TYE | TYER | TDRL | テキスト ( 文字コード指定 ) | リリース年、日時 |
TDTG | テキスト ( 文字コード指定 ) | タグ付け日時 | ||
TEN | TENC | TENC | テキスト ( 文字コード指定 ) | ファイルのエンコードをおこなった個人または組織 |
TXT | TEXT | TEXT | テキスト ( 文字コード指定 ) | 作詞家 |
TFT | TFLT | TFLT | テキスト ( 文字コード指定 ) | オーディオ ファイルの形式 |
TIPL | テキスト ( 文字コード指定 ) | 関わった人々の一覧 | ||
TIM | TIME | テキスト ( 文字コード指定 ) | レコーディングに要した時間 ( 形式は HHMM、計 4 桁の文字列 ) | |
TT1 | TIT1 | TIT1 | テキスト ( 文字コード指定 ) | グループの説明 |
TT2 | TIT2 | TIT2 | テキスト ( 文字コード指定 ) | タイトル |
TT3 | TIT3 | TIT3 | テキスト ( 文字コード指定 ) | 副題やタイトルの補足説明 |
TKE | TKEY | TKEY | テキスト ( 文字コード指定 ) | 曲頭のキー ( C、Am、F♯ といった調の文字列 ) |
TLA | TLAN | TLAN | テキスト ( 文字コード指定 ) | 言語 ( ISO-639-2 として定義された 3 文字の文字列 ) |
TLE | TLEN | TLEN | テキスト ( 文字コード指定 ) | 演奏時間 ( ミリ秒単位 ) |
TMCL | テキスト ( 文字コード指定 ) | ミュージシャン クレジット リスト | ||
TMT | TMED | TMED | テキスト ( 文字コード指定 ) | メディア種別 ( 音楽 CD、レコード、…etc ) |
TMOO | テキスト ( 文字コード指定 ) | ムード | ||
TOT | TOAL | TOAL | テキスト ( 文字コード指定 ) | オリジナルのアルバム/映画/ショーのタイトル |
TOF | TOFN | TOFN | テキスト ( 文字コード指定 ) | 元のファイル名 |
TOL | TOLY | TOLY | テキスト ( 文字コード指定 ) | 原曲の作詞者 |
TOA | TOPE | TOPE | テキスト ( 文字コード指定 ) | 原曲のアーティスト |
TOWN | TOWN | テキスト ( 文字コード指定 ) | ファイルの所有者・ライセンシー | |
TP1 | TPE1 | TPE1 | テキスト ( 文字コード指定 ) | 主なアーティスト、演奏者など |
TP2 | TPE2 | TPE2 | テキスト ( 文字コード指定 ) | レコーディングをおこなった演奏者 |
TP3 | TPE3 | TPE3 | テキスト ( 文字コード指定 ) | 指揮者 |
TP4 | TPE4 | TPE4 | テキスト ( 文字コード指定 ) | リミックスや編曲の担当者 |
TPA | TPOS | TPOS | テキスト ( 文字コード指定 ) | 曲の属するグループ内の番号 ( スラッシュ区切りの文字列 )。複数枚や複数の組曲で構成されるアルバムの場合、それらの総数と何番目に位置するかを表す。例えば 3 枚組のアルバムにおいて、2 枚目に属する曲ならば “2/3” となる。 |
TPRO | テキスト ( 文字コード指定 ) | 制作予告 | ||
TPB | TPUB | TPUB | テキスト ( 文字コード指定 ) | 曲の発行元 ( レーベル ) |
TRK | TRCK | TRCK | テキスト ( 文字コード指定 ) | トラック番号 ( 書式は “番号/総数” ) |
TRSN | TRSN | テキスト ( 文字コード指定 ) | インターネットラジオ局の名前 | |
TRSO | TRSO | テキスト ( 文字コード指定 ) | インターネットラジオ局の所有者 | |
TSOA | テキスト ( 文字コード指定 ) | アルバムのソートオーダー | ||
TSOP | テキスト ( 文字コード指定 ) | 演奏者のソートオーダー | ||
TSOT | テキスト ( 文字コード指定 ) | タイトルのソートオーダー | ||
TSI | TSIZ | テキスト ( 文字コード指定 ) | サイズ | |
TRC | TSRC | TSRC | テキスト ( 文字コード指定 ) | 国際標準レコーディングコード( International Standard Recording Code ) |
TSS | TSSE | TSSE | テキスト ( 文字コード指定 ) | エンコード設定 |
TSST | テキスト ( 文字コード指定 ) | セットのサブタイトル | ||
TXX | TXXX | TXXX | テキスト ( 文字コード、説明付き ) | ユーザー定義文字情報フレーム |
UFI | UFID | UFID | バイナリ ( 説明付き ) | ファイルの一意な識別子 |
USER | USER | テキスト ( 文字コード、言語 ) | 使用条件 | |
ULT | USLT | USLT | テキスト ( 文字コード、言語、説明付き ) | 歌詞 |
WCM | WCOM | WCOM | URL | 販売サイト |
WCP | WCOP | WCOP | URL | 著作情報サイト |
WAF | WOAF | WOAF | URL | オーディオファイルの公式サイト |
WAR | WOAR | WOAR | URL | アーティストの公式サイト |
WAS | WOAS | WAOS | URL | 音源の公式サイト |
WORS | WORS | URL | インターネットラジオ局の公式サイト | |
WPAY | WPAY | URL | 支払い方法 | |
WPB | WPUB | WPUB | URL | レーベルの公式サイト |
WXX | WXXX | WXXX | テキスト ( 文字コード、説明付き ) | ユーザー定義リンクフレーム |
非常にめんどいwww
なにこれ??
ID3 v2 タグの詳細情報 バイナリと格闘するための前準備
やばい
ID3v2 タグにおいては各バイトは 7bit のみが有効であるケースが多い。 読み込み処理の例
ふむ
ID3 v1系はアルバムアートはもはやサポートされてないっぽいね
ひとつ分かったことがあって、それは現在使われてるID3のバージョンはほぼv2.3だということです (というか自分の環境ではv2.3のmp3しか見つからなかった) だから、v2.3だけに対応して、それ以外はサポートしないというのはどうかな?
:zap: :zap:
using System.Drawing;
using System.IO;
namespace Legato.AlbumArtExtraction
{
public class ID3v23AlbumArtExtractor : IAlbumArtExtractor
{
public bool CheckType(string filePath)
{
using (var file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
return (Helper.ReadAsAsciiString(file, 3) == "ID3" && Helper.ReadAsUShort(file) == 0x0300U);
}
public Image Extract(string filePath) => null; // TODO
}
}
でいいかな?
そっちの環境でもv2.3以外見つからなければそれでいいと思う ごく稀なフォーマットまで対応する必要はない
結論、v2.2〜2.4 まで対応しまつ(・∀・)
ID3 タグは v1, v2 等、複数種類に分かれているので、 要検討