Exemple #1
0
 /// <summary>
 /// Prüft, ob der Song den Filter kriterien entspricht.
 /// </summary>
 /// <param name="mp3"></param>
 /// <returns>Entspricht der Ratingfilter</returns>
 public Boolean CheckSong(MP3File.MP3File mp3)
 {
     //Rating
     if (Rating != unsetRating && Convert.ToInt16(mp3.Bewertung) < Rating)
     {
         return(false);
     }
     //AlbumInterpret
     if (AlbpumInterpretFilter != unset && AlbpumInterpretFilter != mp3.ArtistPlaylist.ToString().ToLower())
     {
         return(false);
     }
     if (Gelegenheit != Enums.Gelegenheit.unset && Gelegenheit != mp3.Gelegenheit)
     {
         return(false);
     }
     if (Stimmung != Enums.Stimmung.unset && Stimmung != mp3.Stimmung)
     {
         return(false);
     }
     if (Geschwindigkeit != Enums.Geschwindigkeit.unset && Geschwindigkeit != mp3.Geschwindigkeit)
     {
         return(false);
     }
     return(true);
 }
Exemple #2
0
 /// <summary>
 /// Versucht die Fehlerliste abzuarbeiten
 /// </summary>
 public static void WriteNow()
 {
     //Falls mal Fehler vorhanden waren diese nun abarbeiten
     if (listOfCurrentErrors.Count > 0)
     {
         List <int> worked  = new List <int>();
         int        counter = 0;
         foreach (MP3File item in listOfCurrentErrors)
         {
             //Versuchen die Fehler abzuarbeiten
             if (WriteMetaData(item))
             {
                 worked.Add(counter);
             }
             counter++;
         }
         if (worked.Count > 0)
         {
             //Es konnte etwas abgearbeitet werden und wir nun aus der Fehlerliste entfernt
             foreach (int erledigt in worked)
             {
                 try
                 {
                     MP3File k = listOfCurrentErrors[erledigt];
                     listOfCurrentErrors.Remove(k);
                 }
                 // ReSharper disable once EmptyGeneralCatchClause
                 catch
                 {
                 }
             }
         }
     }
 }
Exemple #3
0
        /// <summary>
        /// Verarbeitungsfehler zufügen.
        /// </summary>
        /// <param name="_song">Falls übergebener Song schon vorhanden, werden die neuen Daten genommen.</param>
        public static void Add(MP3File _song)
        {
            MP3File song = listOfCurrentErrors.Find(r => r.Pfad == _song.Pfad);

            if (song == null)
            {
                listOfCurrentErrors.Add(_song);
            }
            else
            {
                song.Bewertung       = _song.Bewertung;
                song.Geschwindigkeit = _song.Geschwindigkeit;
                song.Stimmung        = _song.Stimmung;
                song.Gelegenheit     = _song.Gelegenheit;
                song.Aufwecken       = _song.Aufwecken;
                song.BewertungMine   = _song.BewertungMine;
                song.Genre           = _song.Genre;
                song.Laufzeit        = _song.Laufzeit;
            }
        }
Exemple #4
0
        /// <summary>
        /// Ermittelt für die Playlist die entsprechenden Songs und schreibt die M3U
        /// </summary>
        /// <param name="music">Alle Songs</param>
        /// <param name="savepath">Speicherpfad für die M3U</param>
        /// <param name="bw">Wenn mit einem Backourndworker gearbeitet werden soll, dann dieser</param>
        /// <param name="BWStartvalue">Start Wert des Backgroundworkers</param>
        /// <param name="ChangeMusicPath">Wenn ein anderer Pfad für den Song in einer Playlist genommen werden soll
        /// Folgender Aufbau: OldValue|NewValue </param>
        /// <param name="clearPlaylistPath">Soll der Playlistordner gelerrt werden?</param>
        public Playlistwriter(List <String> music, string savepath, BackgroundWorker bw = null, int BWStartvalue = 0, String ChangeMusicPath = null, Boolean clearPlaylistPath = false)
        {
            if (BWStartvalue > 80)
            {
                return;
            }

            int reportvalue = 0;

            if (bw != null)
            {
                bw.ReportProgress(BWStartvalue, "Wiedergabelisten werden in den Speicher geladen");
            }

            //Liste für die MP3Files pro liste vorbereiten
            List <List <MP3File.MP3File> > plnames = new List <List <MP3File.MP3File> >();

            plnames.Clear();
            for (int i = 0; i < Playlists.GetPlaylistNames.Count; i++)
            {
                plnames.Add(new List <MP3File.MP3File>());
            }
            int counter = 0;

            //Wenn der Song existiert wird er ausgelesen und geprüft
            foreach (string path in music)
            {
                if (bw != null)
                {
                    reportvalue = BWStartvalue + ((counter * (100 - BWStartvalue - 10)) / music.Count);
                    bw.ReportProgress(reportvalue, path + " wird geprüft");
                    counter++;
                }
                if (File.Exists(path))
                {
                    var file = MP3ReadWrite.ReadMetaData(path);
                    if (file.VerarbeitungsFehler && bw != null)
                    {
                        bw.ReportProgress(100, "Fehler beim Song:" + path);
                        return;
                    }
                    int playlistcounter = 0;
                    foreach (PlaylistClass playlist in Playlists.GetPlaylists)
                    {
                        bool   resval           = true;
                        bool[] groupconditioner = new bool[playlist.PlaylistConditionGroups.Count];
                        int    gcc = 0;
                        foreach (ConditionObjectGroup playlistConditionGroup in playlist.PlaylistConditionGroups)
                        {
                            //Wenn resval einmal auf false ist, dann wurde bei einer Gruppe False gesetzt und dann wird weiter gemacht
                            //Gruppen sind mit AND verbunden.
                            if (resval == false)
                            {
                                continue;
                            }
                            resval = ConditionCecker.Ceck(playlistConditionGroup, file);
                            groupconditioner[gcc] = resval;
                            gcc++;
                        }
                        bool resvalgc = true;
                        foreach (var b in groupconditioner)
                        {
                            if (b == false)
                            {
                                resvalgc = false;
                                break;
                            }
                        }
                        //song der Liste zufügen, weil er passt.
                        if (resvalgc)
                        {
                            plnames[playlistcounter].Add(file);
                        }
                        playlistcounter++;
                    }//Ende der GetPlaylists schleife
                }
            }
            if (clearPlaylistPath)
            {
                var files = Directory.GetFiles(savepath);
                foreach (var pltoKill in files)
                {
                    try
                    {
                        if (File.Exists(pltoKill))
                        {
                            File.Delete(pltoKill);
                        }
                    }
                    catch
                    {
                        // ignored
                    }
                }
            }
            //hier die Playlist schreiben lassen.
            if (plnames.Count > 0)
            {
                if (bw != null)
                {
                    reportvalue = 90;
                    bw.ReportProgress(reportvalue, "Wiedergabelisten fertig ermittelt und werden nun geschrieben.");
                }
                for (int i = 0; i < plnames.Count; i++)
                {
                    if (bw != null)
                    {
                        if (plnames.Count > 1)
                        {
                            reportvalue = reportvalue + ((i * (10)) / plnames.Count);
                        }
                        else
                        {
                            reportvalue = 100;
                        }
                        bw.ReportProgress(reportvalue, "Wiedergabeliste " + Playlists.GetPlaylistNames[i] + " wird geschrieben.");
                    }

                    if (plnames[i].Count > 0)
                    {
                        PlaylistSortOrder sortorder = Playlists.GetPlaylists[i].Sort;
                        if (sortorder != PlaylistSortOrder.NotSet)
                        {
                            if (sortorder == PlaylistSortOrder.Title)
                            {
                                plnames[i] = plnames[i].OrderBy(x => x.Titel).ToList();
                            }
                            if (sortorder == PlaylistSortOrder.Artist)
                            {
                                plnames[i] = plnames[i].OrderBy(x => x.Artist).ToList();
                            }
                            if (sortorder == PlaylistSortOrder.Random)
                            {
                                Random rng = new Random();
                                List <MP3File.MP3File> list = plnames[i];
                                int n = list.Count;
                                while (n > 1)
                                {
                                    n--;
                                    int             k     = rng.Next(n + 1);
                                    MP3File.MP3File value = list[k];
                                    list[k] = list[n];
                                    list[n] = value;
                                }
                            }
                            if (sortorder == PlaylistSortOrder.Rating)
                            {
                                plnames[i] = plnames[i].OrderBy(x => x.Bewertung).ToList();//todo: Prüfen warum nicht in reihenfolge....
                            }
                            if (sortorder == PlaylistSortOrder.RatingMine)
                            {
                                plnames[i] = plnames[i].OrderBy(x => x.BewertungMine).ToList();
                            }
                        }

                        if (!MP3ReadWrite.WritePlaylist(plnames[i], Playlists.GetPlaylistNames[i], savepath, ChangeMusicPath))
                        {
                            //Fehler
                        }
                    }
                    else
                    {
                        //Prüfen, ob Datei schon vorhanden obwohl null, dann löschen
                        var    dir     = Directory.CreateDirectory(savepath);
                        string m3uname = Playlists.GetPlaylistNames[i] + ".m3u";
                        string file    = dir.FullName + "\\" + m3uname;
                        if (File.Exists(file))
                        {
                            File.Delete(file);
                        }
                    }
                }
            }
        }
Exemple #5
0
        /// <summary>
        /// Liest aus dem Übergebenen Pfad die Metadaten des Songs aus
        /// </summary>
        /// <param name="pfad">Ort wo die Datei liegt</param>
        /// <returns>Das entsprechende MP3File Objekt</returns>
        public static MP3File ReadMetaData(string pfad)
        {
            MP3File lied = new MP3File();

            try
            {
                lied.Pfad = pfad;
                //Taglib Objekt erstellen
                //Wenn die Datei existiert verarbeiten.
                if (File.Exists(lied.Pfad))
                {
                    TagLib.File taglibobjekt = TagLib.File.Create(lied.Pfad);

                    if (taglibobjekt.Tag.Lyrics != null)
                    {
                        string dummy = Regex.Replace(taglibobjekt.Tag.Lyrics, @"[\r\n]+", "<br />");
                        dummy      = Regex.Replace(dummy, "Deutsch:", "<b>Deutsch:</b>");
                        lied.Lyric = Regex.Replace(dummy, "Englisch:", "<b>Englisch:</b>");
                    }
                    else
                    {
                        lied.Lyric = MP3Lyrics.NoLyrics.ToString();
                    }
                    //Global
                    lied.Typ       = taglibobjekt.MimeType;
                    lied.Genre     = (taglibobjekt.Tag.Genres != null && taglibobjekt.Tag.Genres.Length > 0 ? taglibobjekt.Tag.Genres[0] : "leer");
                    lied.Laufzeit  = taglibobjekt.Properties.Duration;
                    lied.Kommentar = taglibobjekt.Tag.Comment;
                    //Cover
                    if (taglibobjekt.Tag.Pictures.Length == 0)
                    {
                        lied.HatCover = false;
                    }
                    if (!String.IsNullOrEmpty(taglibobjekt.Tag.Publisher))
                    {
                        lied.Verlag = taglibobjekt.Tag.Publisher;
                    }
                    if (!String.IsNullOrEmpty(taglibobjekt.Tag.FirstComposer))
                    {
                        lied.Komponist = taglibobjekt.Tag.FirstComposer;
                    }
                    string art = "";
                    switch (taglibobjekt.MimeType)
                    {
                    case "taglib/flac":
                    case "taglib/m4a":
                        lied.Album = taglibobjekt.Tag.Album;
                        if (!String.IsNullOrEmpty(taglibobjekt.Tag.FirstPerformer))
                        {
                            art = taglibobjekt.Tag.FirstPerformer;
                        }
                        if (!String.IsNullOrEmpty(taglibobjekt.Tag.FirstAlbumArtist))
                        {
                            art = taglibobjekt.Tag.FirstAlbumArtist;
                        }
                        lied.Artist = art;
                        if (taglibobjekt.Tag.Rating != null && taglibobjekt.Tag.Rating != "Not Set")
                        {
                            int r;
                            int.TryParse(taglibobjekt.Tag.Rating, out r);
                            lied.Bewertung = taglibobjekt.Tag.Rating;
                            //Flac wird von MM eine Bome gleich 0 gesetzt Für die Verarbeitung von allen anderen Dingen wird hier das Verarbeiten
                            //Wie bei MP3 auf -1 gesetzt.
                            if (r == 0)
                            {
                                lied.Bewertung = "-1";
                            }
                        }
                        else
                        {
                            lied.Bewertung = "0";
                        }
                        Enums.Gelegenheit lge = Enums.Gelegenheit.None;
                        if (!string.IsNullOrEmpty(taglibobjekt.Tag.Occasion))
                        {
                            Enum.TryParse(taglibobjekt.Tag.Occasion, false, out lge);
                        }
                        lied.Gelegenheit = lge;
                        Enums.Geschwindigkeit lg = Enums.Geschwindigkeit.None;
                        if (!string.IsNullOrEmpty(taglibobjekt.Tag.Tempo))
                        {
                            Enum.TryParse(taglibobjekt.Tag.Tempo.Replace(" ", "_"), false, out lg);
                        }
                        lied.Geschwindigkeit = lg;
                        lied.Jahr            = taglibobjekt.Tag.Year.ToString();
                        if (string.IsNullOrEmpty(taglibobjekt.Tag.Mood))
                        {
                            lied.Stimmung = Enums.Stimmung.None;
                        }
                        else
                        {
                            Enums.Stimmung ls;
                            Enum.TryParse(taglibobjekt.Tag.Mood, false, out ls);
                            lied.Stimmung = ls;
                        }
                        lied.Titel          = taglibobjekt.Tag.Title;
                        lied.Aufwecken      = !String.IsNullOrEmpty(taglibobjekt.Tag.MMCustom2);
                        lied.ArtistPlaylist = !String.IsNullOrEmpty(taglibobjekt.Tag.MMCustom3);
                        lied.BewertungMine  = taglibobjekt.Tag.MMCustom1 ?? "0";

                        break;

                    case "taglib/mp3":
                        #region mp3

                        TagLib.Id3v2.Tag id3v2tag = taglibobjekt.GetTag(TagLib.TagTypes.Id3v2) as TagLib.Id3v2.Tag;
                        if (id3v2tag != null)
                        {
                            lied.Album = id3v2tag.Album;
                            art        = "";
                            if (!String.IsNullOrEmpty(id3v2tag.FirstPerformer))
                            {
                                art = taglibobjekt.Tag.FirstPerformer;
                            }
                            if (!String.IsNullOrEmpty(id3v2tag.FirstAlbumArtist))
                            {
                                art = taglibobjekt.Tag.FirstAlbumArtist;
                            }
                            lied.Artist    = art;
                            lied.Jahr      = id3v2tag.Year.ToString();
                            lied.Komponist = id3v2tag.FirstComposer;
                            lied.Titel     = id3v2tag.Title;
                            #region Rating
                            TagLib.Id3v2.PopularimeterFrame popm = TagLib.Id3v2.PopularimeterFrame.Get(id3v2tag, "no@email", false);
                            if (popm != null)
                            {
                                int songratingstring = Convert.ToInt16(popm.Rating);
                                int resultval        = -1; //Bombe
                                if (songratingstring > 8 && songratingstring < 40)
                                {
                                    resultval = 10;    //0,5
                                }
                                if ((songratingstring > 39 && songratingstring < 50) || songratingstring == 1)
                                {
                                    resultval = 20;    //1
                                }
                                if (songratingstring > 49 && songratingstring < 60)
                                {
                                    resultval = 30;    //1,5
                                }
                                if (songratingstring > 59 && songratingstring < 114)
                                {
                                    resultval = 40;    //2
                                }
                                if (songratingstring > 113 && songratingstring < 125)
                                {
                                    resultval = 50;    //2,5
                                }
                                if (songratingstring > 124 && songratingstring < 168)
                                {
                                    resultval = 60;    //3
                                }
                                if (songratingstring > 167 && songratingstring < 192)
                                {
                                    resultval = 70;    //3,5
                                }
                                if (songratingstring > 191 && songratingstring < 219)
                                {
                                    resultval = 80;    //4
                                }
                                if (songratingstring > 218 && songratingstring < 248)
                                {
                                    resultval = 90;    //4,5
                                }
                                if (songratingstring > 247)
                                {
                                    resultval = 100;    //5
                                }
                                lied.Bewertung = resultval.ToString();
                            }
                            else
                            {
                                lied.Bewertung = "0";
                            }
                            #endregion Rating
                            //Gelegenheiten und Custom MM DB auslesen auslesen.
                            #region Gelegenheiten
                            IEnumerable <TagLib.Id3v2.Frame> comm = id3v2tag.GetFrames("COMM");
                            Enums.Gelegenheit     gelegenheit     = Enums.Gelegenheit.None;
                            Enums.Geschwindigkeit geschwindigkeit = Enums.Geschwindigkeit.None;
                            Enums.Stimmung        stimmung        = Enums.Stimmung.None;
                            Boolean aufwecken      = false;
                            String  ratingmine     = "0";
                            Boolean artistplaylist = false;
                            foreach (var b in comm)
                            {
                                if (((TagLib.Id3v2.CommentsFrame)b).Description == "MusicMatch_Situation")
                                {
                                    string t = ((TagLib.Id3v2.CommentsFrame)b).Text;
                                    if (!string.IsNullOrEmpty(t))
                                    {
                                        Enum.TryParse(t, false, out gelegenheit);
                                    }
                                }
                                if (((TagLib.Id3v2.CommentsFrame)b).Description == "MusicMatch_Tempo")
                                {
                                    var k = ((TagLib.Id3v2.CommentsFrame)b).Text.Replace(" ", "_");
                                    if (!string.IsNullOrEmpty(k))
                                    {
                                        Enum.TryParse(k, false, out geschwindigkeit);
                                    }
                                }
                                if (((TagLib.Id3v2.CommentsFrame)b).Description == "MusicMatch_Mood")
                                {
                                    var x = ((TagLib.Id3v2.CommentsFrame)b).Text;
                                    if (!string.IsNullOrEmpty(x))
                                    {
                                        Enum.TryParse(x, false, out stimmung);
                                    }
                                }
                                //aufwecken
                                if (((TagLib.Id3v2.CommentsFrame)b).Description == "Songs-DB_Custom2")
                                {
                                    aufwecken = !String.IsNullOrEmpty(((TagLib.Id3v2.CommentsFrame)b).Text);
                                }
                                //Rating Mine
                                if (((TagLib.Id3v2.CommentsFrame)b).Description == "Songs-DB_Custom1")
                                {
                                    ratingmine = String.IsNullOrEmpty(((TagLib.Id3v2.CommentsFrame)b).Text) ? "0" : ((TagLib.Id3v2.CommentsFrame)b).Text;
                                }
                                //ArtistPlaylist
                                if (((TagLib.Id3v2.CommentsFrame)b).Description == "Songs-DB_Custom3")
                                {
                                    artistplaylist = !String.IsNullOrEmpty(((TagLib.Id3v2.CommentsFrame)b).Text);
                                }
                            }
                            lied.Gelegenheit     = gelegenheit;
                            lied.Geschwindigkeit = geschwindigkeit;
                            lied.Stimmung        = stimmung;
                            lied.Aufwecken       = aufwecken;
                            lied.ArtistPlaylist  = artistplaylist;
                            #endregion Gelegenheiten
                            lied.BewertungMine = ratingmine;
                        }
                        #endregion mp3
                        break;
                    }//Ende Switch für die MIMETypes

                    taglibobjekt.Dispose();
                    return(lied);
                }
                //Songpfad existiert nicht
                lied.VerarbeitungsFehler = true;
                return(lied);
            }
            catch
            {
                lied.VerarbeitungsFehler = true;
                return(lied);
            }
        }
Exemple #6
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);
            }
        }