Beispiel #1
0
        public void Play()
        {
            var songs = from i in Instruments
                        from s in i.Songs
                        where Notes.Any() ? Notes.Contains(s.Note) : true &&
                        Octaves.Any() ? Octaves.Contains(s.Octave) : true &&
                        Tempos.Any() ? Tempos.Contains(s.Tempo) : true &&
                        Intensities.Any() ? Intensities.Contains(s.Intensity) : true &&
                        Modes.Any() ? Modes.Contains(s.Mode) : true
                        group s by s.Instrument into grouping
                        select grouping;

            var songsDict = new Dictionary <string, List <Song> >();

            foreach (IGrouping <string, Song> grouping in songs)
            {
                var lstSongs = new List <Song>();
                foreach (var s in grouping.Take(MaxSongs))
                {
                    lstSongs.Add(s);
                }
                songsDict.Add(grouping.Key, lstSongs);
            }

            foreach (var instrument in songsDict.Keys)
            {
                var song = songsDict[instrument].ElementAt(0);
                song.Play();
                songsDict[instrument].RemoveAt(0);
            }
        }
 /// <summary>
 /// 计算选择区域的信噪比。即只有设置为Enabled的离子会用于信噪比计算。
 /// </summary>
 public void CalculateSignalToNoise()
 {
     if (Intensities == null || !Intensities.Any(m => m.Enabled))
     {
         this._signalToNoise = 0;
     }
     else
     {
         this._signalToNoise = (from m in Intensities
                                where m.Enabled
                                select m.Intensity).Max() / Noise;
     }
 }