3

Taglib-sharp を使用して label/publisher フィールドを更新しようとしていますが、オブジェクト ブラウザーを使用してオブジェクト階層のどこにも表示されません。

Google とドキュメントを検索しましたが、対応していないフィールドのようです。

それらのフィールドを編集できる代替手段を探す前に (何か提案できる人はいますか?)、最後のクラックが 1 つあると思い、より情報に基づいた意見を持つ TagLib-sharp に精通している StackOverflow コミュニティ内で質問しますか?

前もって感謝します、

フランシス

更新 : mpg123 や UltraID3Lib などの他のライブラリを調査しましたが、同じ制限があるようです。

4

4 に答える 4

5

さて、ダニエル・フックスの答えは私にはうまくいきませんでした。しかし、それは始まりでした。

TagLib-sharp コードにフィールドを追加する手順は次のとおりです。

  1. ソースをダウンロード

  2. ファイルTagLib/Tag.cs​​ を開き、次のコードを挿入します (PerformersSort の 250 行目の下に挿入しました)

    public virtual string Publisher
    {
        get { return ""; }
        set { }
    }
    
  3. ファイルTagLib/Id3v2/Tag.cs​​ を開き、次のコードを挿入します (PerformersSort の 1292 行目の下に挿入しました)

    public override string Publisher
    {
        get { return GetTextAsString(FrameType.TPUB); }
        set { SetTextFrame(FrameType.TPUB, value); }
    }
    
  4. ファイルTagLib/Id3v2/FrameTypes.csを開き、次のコードを挿入します (TPOS の 71 行目の下に挿入しました)

    public static readonly ReadOnlyByteVector TPUB = "TPUB";
    
  5. 今度は「あは」の話です。ファイルTagLib/CombinedTag.cs​​ を開き、次のコードを挿入します (PerformersSort の 318 行目の下に挿入しました)

    public override string Publisher
    {
        get
        {
            foreach (Tag tag in tags)
            {
                if (tag == null)
                    continue;
    
                string value = tag.Publisher;
    
                if (value != null)
                    return value;
            }
    
            return null;
        }
    
        set
        {
            foreach (Tag tag in tags)
                if (tag != null)
                    tag.Publisher = value;
        }
    }
    
  6. 最後に、コードをコンパイルします。

重要: コードのコンパイルにも問題がありました。SharpZipLib dll (.NET 2.0) をダウンロードし、この dll を taglib プロジェクトに含める必要があります。また、Nuget で作成した NUnit をインストールする必要がありました。最後に、本番環境では使用されないため、GDK lib とそのすべてのエラーをテスト コード内にコメントしました。

于 2015-06-29T19:03:36.393 に答える
1

さて、TagLib# は発行者タグを読み取ることができません。現在の最新バージョン (2.1.0.0) でさえ、それを行うことはできません。別の方法として、無料で入手できる TagLib# のソース コードを使用して、この機能を自分で追加することもできます。

これを行うには、TagLib/Id3v2/FrameTypes.csファイルを開き、次の行をどこかに追加します。

public static readonly ReadOnlyByteVector TPUB = "TPUB";  // Publisher field

そしてファイルTagLib/Id3v2/Tag.cs​​ で:

public string Publisher {
    get {return GetTextAsString (FrameType.TPUB);}
    set {SetTextFrame (FrameType.TPUB, value);}
}

次に、次のようなものを使用して Publisher フィールドにアクセスできます

TagLib.File tf = TagLib.File.Create(...);   // open file
tf.Tag.Publisher = "Label XY";              // write new Publisher
tf.Save();                                  // save tags

これは醜いハックですが、MP3 ファイルでも機能することに注意してください。

于 2012-12-05T11:03:55.423 に答える
0

私は TagLib# に慣れていませんが、Qt プロジェクトで TagLib を使用しており、この情報を調べて取得していますTagLib::File::properties。ドキュメントを見てください。これは、すべてのプロパティと値を含む単なる文字列マップです。

TagLib# にこのメソッドがあることを願っています。

于 2012-11-13T14:48:41.490 に答える