public void ClearData(SongStats songStats)
 {
     songStats.totalScore    = 0.0f;
     songStats.notesHit      = 0;
     songStats.notesCounter  = 0;
     songStats.longestStreak = 0;
 }
Beispiel #2
0
 public void Reset()
 {
     TotalUptime = TimeSpan.Zero;
     RunningBots = 0;
     BotsRuntime = TimeSpan.Zero;
     SongStats.Clear();
     CommandCalls    = 0;
     CommandFromUser = 0;
     CommandFromApi  = 0;
 }
Beispiel #3
0
 public void Add(StatsData other)
 {
     TotalUptime += other.TotalUptime;
     BotsRuntime += other.BotsRuntime;
     foreach (var kvp in other.SongStats)
     {
         SongStats.GetOrNew(kvp.Key).Add(kvp.Value);
     }
     CommandCalls    += other.CommandCalls;
     CommandFromUser += other.CommandFromUser;
     CommandFromApi  += other.CommandFromApi;
 }
Beispiel #4
0
        public static string GetPlaylistQuery(int[] targets, SongStats overrideStats, double maxThreshold, double maxMaxDistance, double maxMeanDistance, int limit, bool orderByDistance)
        {
            string maxthr = maxThreshold.ToString(CultureInfo.InvariantCulture);
            string tgtid = String.Join(", ", targets);

            var sb = new StringBuilder();
            sb.Append("select * from main ");
            sb.Append("where id in (select id from (");
            sb.Append("select b.id, sum(((a.statvalue - b.statvalue)*(a.statvalue - b.statvalue))/(c1.value*c1.value)) as distance, ");
            sb.Append("10000*max((a.statvalue - b.statvalue)*(a.statvalue - b.statvalue)/(c2.value*c2.value)) as maxdiff, ");
            sb.Append("10000*avg((a.statvalue - b.statvalue)*(a.statvalue - b.statvalue)/(c2.value*c2.value)) as meandiff ");
            sb.Append("from stats a, stats b, feature c1, ");
            sb.Append("feature c2 ");
            sb.Append("where ");
            sb.Append("a.id in (" + tgtid + ") and ");
            sb.Append("b.id not in (" + tgtid + ") and ");
            sb.Append("a.statname = c1.statname and c1.feature = 'mean' and ");
            sb.Append("a.statname = c2.statname and ");
            sb.Append("c2.feature = 'max_min' and ");
            sb.Append("a.statname = b.statname and ");
            sb.Append("c1.statname = c2.statname and ");
            sb.Append("a.statvalue <= b.statvalue + " + maxthr + "*c2.value/100 and a.statvalue >= b.statvalue - " + maxthr + "*c2.value/100 and ");
            sb.Append("a.statname in ( ");

            for(int k = 1; k <= 31; k += 2)
            {
                if(overrideStats != SongStats.None)
                {
                    if((overrideStats & SongStats.Mean) == SongStats.Mean)
                    {
                        sb.Append("'b_mean_FFT1_" + Utility.Appdx(k, 31) + "', ");
                    }
                    if((overrideStats & SongStats.Median) == SongStats.Median)
                    {
                        sb.Append("'b_median_FFT1_" + Utility.Appdx(k, 31) + "', ");
                    }
                    if((overrideStats & SongStats.StDev) == SongStats.StDev)
                    {
                        sb.Append("'b_stdev_FFT1_" + Utility.Appdx(k, 31) + "', ");
                    }
                    if((overrideStats & SongStats.Skewness) == SongStats.Skewness)
                    {
                        sb.Append("'b_skewn_FFT1_" + Utility.Appdx(k, 31) + "', ");
                    }
                    if((overrideStats & SongStats.Kurtosis) == SongStats.Kurtosis)
                    {
                        sb.Append("'b_kurto_FFT1_" + Utility.Appdx(k, 31) + "', ");
                    }
                }
                else
                {
                    sb.Append("'b_median_FFT1_" + Utility.Appdx(k, 31) + "', ");
                    sb.Append("'b_stdev_FFT1_" + Utility.Appdx(k, 31) + "', ");
                    sb.Append("'b_skewn_FFT1_" + Utility.Appdx(k, 31) + "', ");
                    sb.Append("'b_kurto_FFT1_" + Utility.Appdx(k, 31) + "', ");
                }
            }
            sb.Append("'a' ");
            sb.Append(") ");
            sb.Append("group by b.id ");
            sb.Append("having maxdiff <= " + ((int)(maxMaxDistance * maxMaxDistance)).ToString() + " ");
            sb.Append("and ");
            sb.Append("meandiff <= " + ((int)(maxMeanDistance * maxMeanDistance)).ToString() + " ");
            if(orderByDistance)
            {
                sb.Append("order by distance ");
            }
            sb.Append("limit " + limit.ToString(CultureInfo.InvariantCulture));
            sb.Append(") );");
            return sb.ToString();
        }
Beispiel #5
0
    // Token: 0x060003DC RID: 988 RVA: 0x00030588 File Offset: 0x0002E788
    public void method_27()
    {
        BassAudioManager.instance.method_65();
        GlobalVariables.instance.ApplyGraphicsSettings(true);
        SongStats component = this.globalVariables_0.GetComponent <SongStats>();

        component.method_0(this.song.GClass22_0);
        component.int_10 = this.starProgress.int_1;
        component.int_0  = base.GetComponent <ScoreManager>().int_4;
        int i = 0;

IL_A5:
        while (i < this.playerObjects.Length)
        {
            for (int j = i; j < 4; j++)
            {
                if (GlobalVariables.instance.playerList[j].Boolean_0)
                {
                    component.SetStatsForPlayer(GlobalVariables.instance.playerList[j], this.playerObjects[i], this.song);
                    break;
                }
            }
        }
        Dictionary <string, object> eventData = new Dictionary <string, object>
        {
            {
                "stars",
                this.starProgress.int_1
            },
            {
                "score",
                component.int_0
            },
            {
                "artist",
                this.globalVariables_0.currentSongEntry.artistName
            },
            {
                "song",
                this.globalVariables_0.currentSongEntry.songName + (this.globalVariables_0.songSpeed.Boolean_0 ? "" : (" (" + this.globalVariables_0.songSpeed.String_1 + ")"))
            },
            {
                "year",
                this.globalVariables_0.currentSongEntry.year
            },
            {
                "genre",
                this.globalVariables_0.currentSongEntry.genreName
            },
            {
                "charter",
                this.globalVariables_0.currentSongEntry.charterName
            },
            {
                "has_bots",
                this.bool_4
            }
        };

        AnalyticsEvent.LevelComplete(this.globalVariables_0.currentSongEntry.songName, eventData);
        base.StartCoroutine(FadeBehaviour.fadeBehaviour_0.method_16("EndOfSong"));
    }
Beispiel #6
0
        public static string GetPlaylistQuery(int[] targets, SongStats overrideStats, double maxThreshold, double maxMaxDistance, double maxMeanDistance, int limit, bool orderByDistance)
        {
            string maxthr = maxThreshold.ToString(CultureInfo.InvariantCulture);
            string tgtid  = String.Join(", ", targets);

            var sb = new StringBuilder();

            sb.Append("select * from main ");
            sb.Append("where id in (select id from (");
            sb.Append("select b.id, sum(((a.statvalue - b.statvalue)*(a.statvalue - b.statvalue))/(c1.value*c1.value)) as distance, ");
            sb.Append("10000*max((a.statvalue - b.statvalue)*(a.statvalue - b.statvalue)/(c2.value*c2.value)) as maxdiff, ");
            sb.Append("10000*avg((a.statvalue - b.statvalue)*(a.statvalue - b.statvalue)/(c2.value*c2.value)) as meandiff ");
            sb.Append("from stats a, stats b, feature c1, ");
            sb.Append("feature c2 ");
            sb.Append("where ");
            sb.Append("a.id in (" + tgtid + ") and ");
            sb.Append("b.id not in (" + tgtid + ") and ");
            sb.Append("a.statname = c1.statname and c1.feature = 'mean' and ");
            sb.Append("a.statname = c2.statname and ");
            sb.Append("c2.feature = 'max_min' and ");
            sb.Append("a.statname = b.statname and ");
            sb.Append("c1.statname = c2.statname and ");
            sb.Append("a.statvalue <= b.statvalue + " + maxthr + "*c2.value/100 and a.statvalue >= b.statvalue - " + maxthr + "*c2.value/100 and ");
            sb.Append("a.statname in ( ");

            for (int k = 1; k <= 31; k += 2)
            {
                if (overrideStats != SongStats.None)
                {
                    if ((overrideStats & SongStats.Mean) == SongStats.Mean)
                    {
                        sb.Append("'b_mean_FFT1_" + Utility.Appdx(k, 31) + "', ");
                    }
                    if ((overrideStats & SongStats.Median) == SongStats.Median)
                    {
                        sb.Append("'b_median_FFT1_" + Utility.Appdx(k, 31) + "', ");
                    }
                    if ((overrideStats & SongStats.StDev) == SongStats.StDev)
                    {
                        sb.Append("'b_stdev_FFT1_" + Utility.Appdx(k, 31) + "', ");
                    }
                    if ((overrideStats & SongStats.Skewness) == SongStats.Skewness)
                    {
                        sb.Append("'b_skewn_FFT1_" + Utility.Appdx(k, 31) + "', ");
                    }
                    if ((overrideStats & SongStats.Kurtosis) == SongStats.Kurtosis)
                    {
                        sb.Append("'b_kurto_FFT1_" + Utility.Appdx(k, 31) + "', ");
                    }
                }
                else
                {
                    sb.Append("'b_median_FFT1_" + Utility.Appdx(k, 31) + "', ");
                    sb.Append("'b_stdev_FFT1_" + Utility.Appdx(k, 31) + "', ");
                    sb.Append("'b_skewn_FFT1_" + Utility.Appdx(k, 31) + "', ");
                    sb.Append("'b_kurto_FFT1_" + Utility.Appdx(k, 31) + "', ");
                }
            }
            sb.Append("'a' ");
            sb.Append(") ");
            sb.Append("group by b.id ");
            sb.Append("having maxdiff <= " + ((int)(maxMaxDistance * maxMaxDistance)).ToString() + " ");
            sb.Append("and ");
            sb.Append("meandiff <= " + ((int)(maxMeanDistance * maxMeanDistance)).ToString() + " ");
            if (orderByDistance)
            {
                sb.Append("order by distance ");
            }
            sb.Append("limit " + limit.ToString(CultureInfo.InvariantCulture));
            sb.Append(") );");
            return(sb.ToString());
        }
Beispiel #7
0
        public static SongStats GetSongStats(string base64EncodedMidi)
        {
            var retObj   = new SongStats();
            var midiFile = MidiFile.Read(base64EncodedMidi);

            retObj.TotalTracks         = midiFile.Chunks.Count;
            retObj.DurationInSeconds   = GetSongDurationInSeconds(base64EncodedMidi);
            retObj.TimeSignature       = GetMainTimeSignatureOfSong(base64EncodedMidi);
            retObj.InstrumentsAsString = MidiUtilities.GetInstrumentsAsString(base64EncodedMidi);
            var  channels              = new List <FourBitNumber>();
            var  pitches               = new List <SevenBitNumber>();
            var  uniquePitches         = new List <int>();
            var  instruments           = new List <int>();
            var  percussionInstruments = new List <int>();
            var  tempoChanges          = new List <int>();
            long songDurationInTicks   = 0;
            var  highestPitch          = 0;
            var  lowestPitch           = 127;

            foreach (TrackChunk chunk in midiFile.Chunks)
            {
                long chunkDurationInTicks          = 0;
                bool hasProgramChangeEvent         = false;
                var  chunkNoteEventsWithNullDeltas = 0;
                var  chunkNoteEvents    = 0;
                var  chunkIsDrumChannel = false;
                var  channelsInChunk    = new List <FourBitNumber>();
                var  averagePitch       = 0;

                foreach (var eventito in chunk.Events)
                {
                    retObj.TotalEvents++;
                    chunkDurationInTicks += eventito.DeltaTime;
                    if (eventito is ChannelEvent)
                    {
                        var chanEv = (ChannelEvent)eventito;
                        if ((int)(chanEv.Channel) == 9)
                        {
                            chunkIsDrumChannel = true;
                        }
                        if (!(channelsInChunk.Contains(chanEv.Channel)))
                        {
                            channelsInChunk.Add(chanEv.Channel);
                        }
                        if (chanEv is NoteEvent)
                        {
                            var notEv = (NoteEvent)chanEv;
                            if (notEv.DeltaTime < 5)
                            {
                                chunkNoteEventsWithNullDeltas++;
                            }
                            chunkNoteEvents++;
                            if (!pitches.Contains(notEv.NoteNumber))
                            {
                                pitches.Add(notEv.NoteNumber);
                            }
                            if (!uniquePitches.Contains(notEv.NoteNumber.valor % 12))
                            {
                                uniquePitches.Add(notEv.NoteNumber.valor % 12);
                            }
                            if (notEv.NoteNumber.valor > highestPitch && notEv.Channel.valor != 9)
                            {
                                highestPitch = notEv.NoteNumber.valor;
                            }
                            if (notEv.NoteNumber.valor < lowestPitch && notEv.Channel.valor != 9)
                            {
                                lowestPitch = notEv.NoteNumber.valor;
                            }
                            averagePitch += (notEv.NoteNumber.valor - averagePitch) / chunkNoteEvents;
                            if (notEv.Channel.valor == 9)
                            {
                                if (!percussionInstruments.Contains(notEv.NoteNumber))
                                {
                                    percussionInstruments.Add(notEv.NoteNumber);
                                }
                            }
                        }
                        if (chanEv is PitchBendEvent)
                        {
                            retObj.TotalPitchBendEvents++;
                        }
                        if (chanEv is ProgramChangeEvent)
                        {
                            retObj.TotalProgramChangeEvents++;
                            var progChEv = (ProgramChangeEvent)chanEv;
                            if (!instruments.Contains(progChEv.ProgramNumber))
                            {
                                instruments.Add(progChEv.ProgramNumber);
                            }
                            if (hasProgramChangeEvent)
                            {
                                retObj.HasMoreThanOneInstrumentPerTrack = true;
                            }
                            hasProgramChangeEvent = true;
                        }
                        if (chanEv is ControlChangeEvent)
                        {
                            retObj.TotalControlChangeEvents++;
                            ControlChangeEvent ctrlChEv = chanEv as ControlChangeEvent;
                            if (ctrlChEv.ControlNumber == 64)
                            {
                                retObj.TotalSustainPedalEvents++;
                            }
                        }
                    }
                    else
                    {
                        retObj.TotalChannelIndependentEvents++;
                        if (eventito is SetTempoEvent)
                        {
                            var tempChEv = (SetTempoEvent)eventito;
                            tempoChanges.Add((int)tempChEv.MicrosecondsPerQuarterNote);
                        }
                    }
                }
                if (channelsInChunk.Count > 1)
                {
                    retObj.HasMoreThanOneChannelPerTrack = true;
                }
                foreach (var ch in channelsInChunk)
                {
                    if (!channels.Contains(ch))
                    {
                        channels.Add(ch);
                    }
                }
                retObj.TotalNoteEvents += chunkNoteEvents;
                if (chunkIsDrumChannel)
                {
                    retObj.TotalPercussionTracks++;
                }
                else
                {
                    if (chunkNoteEvents > 0 && (chunkNoteEventsWithNullDeltas / (double)chunkNoteEvents) > 0.75)
                    {
                        retObj.TotalChordTracks++;
                    }
                    else if (chunkNoteEvents > 0 && averagePitch > 55)
                    {
                        retObj.TotalMelodicTracks++;
                    }
                    else if (chunkNoteEvents > 0 && averagePitch <= 55)
                    {
                        retObj.TotalBassTracks++;
                    }
                }
                if (chunkNoteEvents == 0)
                {
                    retObj.TotalTracksWithoutNotes++;
                }
                if (chunkDurationInTicks > songDurationInTicks)
                {
                    songDurationInTicks = chunkDurationInTicks;
                }
                if (!hasProgramChangeEvent && !instruments.Contains((SevenBitNumber)0))
                {
                    instruments.Add((SevenBitNumber)0);
                }
            }
            retObj.NumberOfTicks              = (int)songDurationInTicks;
            retObj.TotalChannels              = channels.Count;
            retObj.TotalInstruments           = instruments.Count;
            retObj.TotalPercussionInstruments = percussionInstruments.Count;
            retObj.TotalDifferentPitches      = pitches.Count;
            retObj.TotalUniquePitches         = uniquePitches.Count;
            retObj.HighestPitch      = highestPitch;
            retObj.LowestPitch       = lowestPitch;
            retObj.TotalTempoChanges = tempoChanges.Count;
            if (tempoChanges.Count > 0)
            {
                retObj.TempoInMicrosecondsPerBeat = (int)Math.Floor(tempoChanges.Average());
                double microsoftIsShit = 120 * ((double)500000 / (double)retObj.TempoInMicrosecondsPerBeat);
                retObj.TempoInBeatsPerMinute = (int)Math.Floor(microsoftIsShit);
            }

            return(retObj);
        }