public void ClearData(SongStats songStats) { songStats.totalScore = 0.0f; songStats.notesHit = 0; songStats.notesCounter = 0; songStats.longestStreak = 0; }
public void Reset() { TotalUptime = TimeSpan.Zero; RunningBots = 0; BotsRuntime = TimeSpan.Zero; SongStats.Clear(); CommandCalls = 0; CommandFromUser = 0; CommandFromApi = 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; }
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(); }
// 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")); }
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()); }
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); }