1

MP3 ファイルにアートワークを書き込むのに問題があります。Taglib-sharp を使用して、MP3 ファイル内のすべてのアートワークを読み取って表示できますが、MP3 タグに複数の画像 (例: FrontCover と BackCover) を挿入する場合、問題が発生します。 .それが1つのアートワークだけなら... 私はそれを行うことができます. (vb.net は素晴らしいですが、C# でもうまくいきます)。

もう1つのリクエスト...そしてmp3タグ内の画像を削除?? 誰かがそれを行う方法の例を教えてください。

ご協力いただきありがとうございます

4

4 に答える 4

4

Bobby Bhamra と同じ問題に遭遇しました。iTunes は UTF-16 を嫌うことがわかりました。それが問題なのです。

targetMp3File = TagLib.File.Create(...);

// define picture
TagLib.Id3v2.AttachedPictureFrame pic = new TagLib.Id3v2.AttachedPictureFrame();
pic.TextEncoding = TagLib.StringType.Latin1;
pic.MimeType     = System.Net.Mime.MediaTypeNames.Image.Jpeg;
pic.Type         = TagLib.PictureType.FrontCover;
pic.Data         = TagLib.ByteVector.FromPath(...);

// save picture to file
targetMp3File.Tag.Pictures = new TagLib.IPicture[1] { pic };    
targetMp3File.Save();

したがって、本質的にすべてが一列にpic.TextEncoding並んでいます。さらに、.NET 定数を使用して Mime Type を割り当てました。

その結果TagLib.PictureType.Other、説明を使用する必要も回避策もありません。私のソリューションの唯一の欠点は、MP3 ファイルに対してのみ正しく機能することです。

于 2012-12-03T17:47:57.870 に答える
4

画像の挿入と削除はどのように行っていますか? コードを投稿できますか?

すべてのタグは、IPicture インターフェイスと Tag.Pictures ゲッターおよびセッターを使用して機能します。Tag.Pictures 配列の内容を変更してもファイルには影響しないため、既存のリストを変更するには、現在の値を取得して操作し、元に戻す必要があります。単純に画像を設定またはクリアする方が簡単です。

ファイルが単一の画像を持つように設定するには、次のようにします。

IPicture pictures = new IPicture[1];
pictures[0] = new Picture("path/to/picture.jpg");
file.Tag.Pictures = pictures;

次の方法で、タグからすべての画像を削除できます。

file.Tag.Pictures = new IPicture[0];
file.Save();

操作またはより複雑ですが、同じ考え方に従います。Tag.Pictures が配列ではなく IEnumerable であればもっと良かったのですが、これで完了です。

コマンドライン引数から画像を設定するプログラムの例を次に示します: https://github.com/mono/taglib-sharp/blob/master/examples/SetPictures.cs

于 2011-10-11T21:47:37.833 に答える
1

Taglib バージョン 2.1.0.0 を使用していますが、現時点ではこのバージョンのドキュメントはありません。そのため、このバージョンで実際に機能するものを見つけるために、すべての回答を検索するためにここに来なければなりませんでした。これが私が思いついたものです...

Private Sub SetTags()
    Me.Cursor = Cursors.WaitCursor

    'Set the version and force it.
    TagLib.Id3v2.Tag.DefaultVersion = 3
    TagLib.Id3v2.Tag.ForceDefaultVersion = True

    'Set all standard tags.
    strInput = Trim(txtMP3Input.Text)
    strTitle = Trim(txtTitle.Text)
    strArtist = Trim(txtArtist.Text)
    strAlbumArtist = Trim(txtAlbumArtist.Text)
    strAlbum = Trim(txtAlbum.Text)
    intYear = Convert.ToInt32(Val(cmbDate.SelectedItem))
    strGenre = cmbGenre.SelectedItem
    strComments = Trim(txtComment.Text)
    strArt = Trim(txtAlbumArt.Text)

    'Create a file (mp3)
    Dim fName As TagLib.File = TagLib.File.Create(strInput)

    'Set the Album art.
    Dim pics As Picture = New Picture(strArt)

    'Insert the standard tags.
    fName.Tag.Title = strTitle
    fName.Tag.Performers = New String() {strArtist}
    fName.Tag.AlbumArtists = New String() {strAlbumArtist}
    fName.Tag.Album = strAlbum
    fName.Tag.Year = intYear
    fName.Tag.Genres = New String() {strGenre}
    fName.Tag.Comment = strComments

    'Insert Album art and
    ' save to file and dispose.
    Dim picsFrame As New TagLib.Id3v2.AttachedPictureFrame(pics)
    picsFrame.MimeType = System.Net.Mime.MediaTypeNames.Image.Jpeg

    'set the type of picture (front cover)
    picsFrame.Type = TagLib.PictureType.FrontCover

    'Id3v2 allows more than one type of image, just one is needed here.
    Dim pictFrames() As TagLib.IPicture = {picsFrame}

    'set the pictures in the tag
    fName.Tag.Pictures = pictFrames

    fName.Save()
    fName.Dispose()

    Me.Cursor = Cursors.Default
    lblSuccess.Text = "Tags Set Successfully."
End Sub

Visual Studio 2012 を使用してこのバージョンをインストールし、メニュー項目 [ツール] -> [ライブラリ パッケージ マネージャー] -> [パッケージ マネージャー コンソール] を使用しました。"PM>" プロンプトで、「Install-Package taglib」と入力します。これにより、Taglib-Sharp パッケージがアプリケーションに追加されます。実際には、Power Shell のコマンド ライン ユーティリティです。数秒待つと準備完了です。

于 2012-12-24T06:50:37.567 に答える
1

MP3 タグ付けアプリで次の taglib-sharp コードを使用しています。「mime」と「type」を設定しないと、Windows/WMP では正しく表示されていたにもかかわらず、アートワークを ITunes で表示できず、その後 Ipod で表示することもできませんでした。

TagLib.File targetFileMp3Tag = TagLib.File.Create(...);

Picture picture = new Picture();
picture.Type = PictureType.Other;
picture.MimeType = "image/jpeg";
picture.Description = "Cover";        
picture.Data = ByteVector.FromStream(...);

targetFileMp3Tag.Tag.Pictures = new IPicture[1] { picture };
targetFileMp3Tag.save()

h番目

于 2012-02-21T07:01:26.483 に答える