Esempio n. 1
0
 /// <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);
         }
     }
 }
Esempio n. 2
0
        /// <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);
            }
        }