/// <summary> /// Update the comment frame /// </summary> private void UpdateCommentFrames(TagListViewItem item) { if (comments_dirty) { item.Id3v2.RemoveFrames("COMM"); foreach (ListViewItem ci in commentList.Items) { string desc = ci.Text; string lang = ci.SubItems[2].Text; TagLib.Id3v2.CommentsFrame cf = new TagLib.Id3v2.CommentsFrame(desc, lang); cf.Text = ci.SubItems[1].Text; item.Id3v2.AddFrame(cf); } } }
/// <summary> /// Schreibt die Metadata des übergebenen Songs /// </summary> /// <param name="song"></param> /// <returns></returns> public static Boolean WriteMetaData(MP3File song) { String orgrating = String.Empty; try { //Taglib Objekt erstellen TagLib.File taglibobjekt = TagLib.File.Create(song.Pfad); //taglibobjekt.Tag.Genres[0] = song.Genre; switch (taglibobjekt.MimeType) { case "taglib/flac": case "taglib/m4a": if (song.Bewertung != "No") { //MM Behandelt Bomben bei FLAc anders als bei MP3 //Beim setzten wird hier nun -1 auf 0 gesetzt und 0 als nicht vorhanden. orgrating = song.Bewertung; //Für ein Catch den alten wert merken. if (song.Bewertung == "0") { song.Bewertung = ""; } if (song.Bewertung == "-1") { song.Bewertung = "0"; } taglibobjekt.Tag.Rating = song.Bewertung; } taglibobjekt.Tag.Mood = song.Stimmung.ToString(); taglibobjekt.Tag.Occasion = song.Gelegenheit.ToString(); taglibobjekt.Tag.Tempo = song.Geschwindigkeit.ToString().Replace("_", " "); taglibobjekt.Tag.MMCustom1 = song.BewertungMine; taglibobjekt.Tag.MMCustom2 = (song.Aufwecken) ? "Aufwecken" : String.Empty; taglibobjekt.Tag.MMCustom3 = (song.ArtistPlaylist) ? "true" : String.Empty; break; case "taglib/mp3": TagLib.Id3v2.Tag id3v2tag = taglibobjekt.GetTag(TagLib.TagTypes.Id3v2) as TagLib.Id3v2.Tag; #region Rating if (song.Bewertung != "No") { TagLib.Id3v2.PopularimeterFrame popm = TagLib.Id3v2.PopularimeterFrame.Get(id3v2tag, "no@email", true); //Das Rating wurde entfernt oder gesetzt if (song.Bewertung == "0") { if (id3v2tag != null) { id3v2tag.RemoveFrame(popm); } } else { int ratingval = 0; //Bombe if (song.Bewertung == "10") //0,5 { ratingval = 30; } if (song.Bewertung == "20") //1 { ratingval = 45; } if (song.Bewertung == "30") //1,5 { ratingval = 55; } if (song.Bewertung == "40") //2 { ratingval = 100; } if (song.Bewertung == "50") //2,5 { ratingval = 120; } if (song.Bewertung == "60") //3 { ratingval = 153; } if (song.Bewertung == "70") //3,5 { ratingval = 180; } if (song.Bewertung == "80") //4 { ratingval = 202; } if (song.Bewertung == "90") //4,5 { ratingval = 245; } if (song.Bewertung == "100") //5 { ratingval = 253; } popm.Rating = Convert.ToByte(ratingval); } } #endregion Rating #region Gelegenenheiten /*Ermitteln und ändern falls vorhanden. Andernfalls neu generien*/ if (id3v2tag != null) { IEnumerable <TagLib.Id3v2.Frame> comm = id3v2tag.GetFrames("COMM"); Boolean setgelegenheit = false; Boolean setgeschwindigkeit = false; Boolean setstimmung = false; Boolean aufwecken = false; Boolean artisplaylist = false; Boolean setratingMine = false; // Boolean ratingmine = false; foreach (var b in comm) { string des = ((TagLib.Id3v2.CommentsFrame)b).Description; switch (des) { case "MusicMatch_Situation": case "Songs-DB_Occasion": ((TagLib.Id3v2.CommentsFrame)b).Text = song.Gelegenheit.ToString(); setgelegenheit = true; break; case "MusicMatch_Tempo": case "Songs-DB_Tempo": ((TagLib.Id3v2.CommentsFrame)b).Text = song.Geschwindigkeit.ToString().Replace("_", " "); setgeschwindigkeit = true; break; case "MusicMatch_Mood": case "Songs-DB_Mood": ((TagLib.Id3v2.CommentsFrame)b).Text = song.Stimmung.ToString(); setstimmung = true; break; case "Songs-DB_Custom2": ((TagLib.Id3v2.CommentsFrame)b).Text = song.Aufwecken ? "Aufwecken" : ""; aufwecken = true; break; case "Songs-DB_Custom3": ((TagLib.Id3v2.CommentsFrame)b).Text = song.ArtistPlaylist ? "true" : ""; artisplaylist = true; break; case "Songs-DB_Custom1": ((TagLib.Id3v2.CommentsFrame)b).Text = song.BewertungMine; setratingMine = true; break; } } //Ende foreach if (!aufwecken && song.Aufwecken) { TagLib.Id3v2.CommentsFrame mms = new TagLib.Id3v2.CommentsFrame("Songs-DB_Custom2", "xxx") { Text = "Aufwecken" }; id3v2tag.AddFrame(mms); } if (!artisplaylist && song.ArtistPlaylist) { TagLib.Id3v2.CommentsFrame mms = new TagLib.Id3v2.CommentsFrame("Songs-DB_Custom3", "xxx") { Text = "true" }; id3v2tag.AddFrame(mms); } if (!setratingMine) { TagLib.Id3v2.CommentsFrame mms = new TagLib.Id3v2.CommentsFrame("Songs-DB_Custom1", "xxx") { Text = song.BewertungMine }; id3v2tag.AddFrame(mms); } if (!setgelegenheit) { TagLib.Id3v2.CommentsFrame mms = new TagLib.Id3v2.CommentsFrame("MusicMatch_Situation", "xxx"); TagLib.Id3v2.CommentsFrame sdo = new TagLib.Id3v2.CommentsFrame("Songs-DB_Occasion", "xxx"); mms.Text = song.Gelegenheit.ToString(); sdo.Text = song.Gelegenheit.ToString(); id3v2tag.AddFrame(mms); id3v2tag.AddFrame(sdo); } if (!setgeschwindigkeit) { TagLib.Id3v2.CommentsFrame mms = new TagLib.Id3v2.CommentsFrame("MusicMatch_Tempo", "xxx"); TagLib.Id3v2.CommentsFrame sdo = new TagLib.Id3v2.CommentsFrame("Songs-DB_Tempo", "xxx"); mms.Text = song.Geschwindigkeit.ToString().Replace("_", " "); sdo.Text = song.Geschwindigkeit.ToString().Replace("_", " "); id3v2tag.AddFrame(mms); id3v2tag.AddFrame(sdo); } if (!setstimmung) { TagLib.Id3v2.CommentsFrame mms = new TagLib.Id3v2.CommentsFrame("MusicMatch_Mood", "xxx"); TagLib.Id3v2.CommentsFrame sdo = new TagLib.Id3v2.CommentsFrame("Songs-DB_Mood", "xxx"); mms.Text = song.Stimmung.ToString(); sdo.Text = song.Stimmung.ToString(); id3v2tag.AddFrame(mms); id3v2tag.AddFrame(sdo); } } #endregion Gelegenheiten break; } taglibobjekt.Save(); taglibobjekt.Dispose(); //For Debuging /* * StringBuilder sb = new StringBuilder(); * sb.AppendLine("Update Done"); * sb.AppendLine(lied.Pfad); * sb.AppendLine(lied.Bewertung); * using (StreamWriter outfile = new StreamWriter(@"C:\done.txt")) * { * outfile.Write(sb.ToString()); * * } */ return(true); } catch { if (!String.IsNullOrEmpty(orgrating)) { song.Bewertung = orgrating; //OriginaleBewertung wieder herstellen. } return(false); } }