public override int GetHashCode() { var hashCode = 505786036; hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(Key); hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(Hash); hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(SongName); hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(SongSubName); hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(LevelAuthorName); hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(SongAuthorName); hashCode = hashCode * -1521134295 + EqualityComparer <List <DifficultyStats> > .Default.GetHashCode(Diffs); hashCode = hashCode * -1521134295 + Bpm.GetHashCode(); hashCode = hashCode * -1521134295 + PlayedCount.GetHashCode(); hashCode = hashCode * -1521134295 + Upvotes.GetHashCode(); hashCode = hashCode * -1521134295 + Downvotes.GetHashCode(); hashCode = hashCode * -1521134295 + Heat.GetHashCode(); hashCode = hashCode * -1521134295 + Rating.GetHashCode(); return(hashCode); }
private void CalcBPM() { updateTimer = updateRate; Bpm = (int)(uniqBeats.Count / waitingNewTimer * 60 + Bpm) / 2; BPMText.text = Bpm.ToString(); OnBPMUpdate?.Invoke(Bpm, OldBpm); OldBpm = Bpm; }
private void DisplaySmoothed(FileReader.AnalyzedResult result, int smoothFactor) { Spo2.Clear(); Bpm.Clear(); Accel.Clear(); Spo2.AddRange(SmoothList(result.Spo2List, smoothFactor)); Bpm.AddRange(SmoothList(result.BpmList, smoothFactor)); //Spo2.AddRange(result.Spo2List); //Bpm.AddRange(result.BpmList); Accel.AddRange(result.AccelList); }
private void UpdateHR(JObject json) { if (json["payload"] != null && json["payload"]["hr"] != null) { Bpm.Bpm = json["payload"]["hr"].ToObject <int>(); Bpm.ReceivedAt = DateTime.Now.ToString("HH:mm:ss"); } if (_logHr) { logger.Info(Bpm.ToString()); } }
private IEnumerator UpdateHR() { using (var webRequest = UnityWebRequest.Get(_url)) { // Request and wait for the desired page. yield return(webRequest.SendWebRequest()); if (webRequest.isNetworkError) { logger.Error($"Error Requesting HR data: {webRequest.error}"); throw new WebException(); } if (_regex.IsMatch(webRequest.downloadHandler.text)) { Bpm.Bpm = int.Parse(webRequest.downloadHandler.text); Bpm.ReceivedAt = System.DateTime.Now.ToString("HH:mm:ss"); } else { // pulsoid: {"bpm":0,"measured_at":"2021-06-21T01:34:39.320Z"} try { var json = JObject.Parse(webRequest.downloadHandler.text); if (json["bpm"] != null) { Bpm.Bpm = json["bpm"].ToObject <int>(); } else { logger.Warn("Json received does not contain necessary field"); logger.Warn(webRequest.downloadHandler.text); } Bpm.ReceivedAt = json["measured_at"] != null ? json["measured_at"].ToObject <string>() : Bpm.ReceivedAt = System.DateTime.Now.ToString("HH:mm:ss"); } catch (JsonReaderException) { logger.Critical("Invalid json received."); logger.Critical(webRequest.downloadHandler.text); } } if (_logHr) { logger.Info(Bpm.ToString()); } } }
/// <summary> /// 初始化的方法 /// </summary> public void Init() { if (!ClientZone_Init) { QueryParam qp = new QueryParam(); qp.Where.Add(new SearchParam(Playngo_ClientZone_Event._.ModuleId, Bpm.ModuleId, SearchType.Equal)); if (Playngo_ClientZone_Event.FindCount(qp) == 0)//文章数为0的情况下,才增加默认的文章和分类 { //初始化分类和文章 //Int32 EventID = Playngo_ClientZone_Event.Initialization(Bpm); } Bpm.UpdateModuleSetting("ClientZone_Init", "true"); } }
private void HandleData(string data) { #if DEBUG logger.Debug(data); #endif try { var json = JObject.Parse(data); if (json["actionType"]?.ToString() != "OverlayUpdate") { return; } if (json["jsonData"] == null) { return; } var osu = JObject.Parse(json["jsonData"]?.ToString()); #if DEBUG logger.Debug(osu.ToString()); #endif var hrToken = osu["status"]?["heartRate"]?.Type != JTokenType.Null ? osu["status"]?["heartRate"] : osu["status"]?["calculationMetrics"]?["estHeartRate"]; var hr = hrToken?.ToObject <int>() ?? 0; // Console.WriteLine($"HR {hr}"); Bpm.Bpm = hr; Bpm.ReceivedAt = DateTimeOffset.Now.ToUnixTimeSeconds().ToString(); if (_logHr) { logger.Info(Bpm.ToString()); } } catch (Exception e) { logger.Warn("Exception occured while parsing hr data"); logger.Warn(e.Message); logger.Debug(e); } }
public override string ToString() => $"\nSetId: {Id}\n" + $"RankedStatus: {RankedStatus}\n" + $"Artist: {Artist}\n" + $"Title: {Title}\n" + $"Creator: {Creator}\n" + $"Tags: [{Tags.Join(", ")}]\n" + $"Modes: [{Mode.Select(s => s.ToString()).Join(", ")}]\n" + $"DiffNames: [{DiffName.Join(", ")}]\n" + $"Cs: [{Cs.Select(s => s.ToString()).Join(", ")}]\n" + $"Ar: [{Ar.Select(s => s.ToString()).Join(", ")}]\n" + $"Od: [{Od.Select(s => s.ToString()).Join(", ")}]\n" + $"Hp: [{Hp.Select(s => s.ToString()).Join(", ")}]\n" + $"DifficultyRating: [{DifficultyRating.Select(s => s.ToString(CultureInfo.InvariantCulture)).Join(", ")}]\n" + $"Bpm: [{Bpm.Select(s => s.ToString()).Join(", ")}]\n" + $"TotalLength: [{TotalLength.Select(s => s.ToString()).Join(", ")}]\n" + $"Genre: {Genre}\n" + $"Language: {Language}\n" + $"DiffName: [{Mode.Select(s => s.ToString()).Join(", ")}]\n" + $"ApprovedDate: {ApprovedDate}";
/// <summary> /// Parses the BPM change events /// </summary> private void ParseBpms(string val) { string[] commaSplit = val.Split(','); foreach (string split in commaSplit) { string[] equalsSplit = split.Split('='); if (equalsSplit.Length < 2) { Warning("Improperly formatted #BPMS value: " + split); continue; } float beat = this.ParseFloat("BPM change beat", equalsSplit[0], false); float bpmVal = this.ParseFloat("BPM change bpm", equalsSplit[1], false); if (beat != -1f && bpmVal != -1f) { Bpm bpm = new Bpm(); bpm.beat = beat; bpm.bpm = bpmVal; _bpms.Add(bpm); } } }
/// <summary> /// Initializes a new instance of the <see cref="Agilite"/> class. /// </summary> /// <param name="baseConfig">The base configuration.</param> /// <exception cref="ArgumentNullException">ApiKey</exception> public Agilite(AgiliteConfig baseConfig) { if (string.IsNullOrEmpty(baseConfig.ApiKey)) { throw new ArgumentNullException(nameof(baseConfig.ApiKey)); } Keywords = new Keywords(new AgiliteRequestConfig { AgiliteConfig = baseConfig }); Numbering = new Numbering(new AgiliteRequestConfig { AgiliteConfig = baseConfig }); Connectors = new Connectors(new AgiliteRequestConfig { AgiliteConfig = baseConfig }); DataMapping = new DataMapping(new AgiliteRequestConfig { AgiliteConfig = baseConfig }); Bpm = new Bpm(new AgiliteRequestConfig { AgiliteConfig = baseConfig }); Roles = new Roles(new AgiliteRequestConfig { AgiliteConfig = baseConfig }); Templates = new Templates(new AgiliteRequestConfig { AgiliteConfig = baseConfig }); Utils = new Utils(new AgiliteRequestConfig { AgiliteConfig = baseConfig }); Files = new Files(new AgiliteRequestConfig { AgiliteConfig = baseConfig }); TierStructures = new TierStructures(new AgiliteRequestConfig { AgiliteConfig = baseConfig }); }
/// <summary> /// Updates the text of the metadata with a new map/mods /// Realigns it so it's in the middle. /// </summary> /// <param name="map"></param> public void UpdateAndAlignMetadata(Map map) { Mode.UpdateValue(ModeHelper.ToShortHand(map.Mode)); Bpm.UpdateValue(((int)(map.Bpm * ModHelper.GetRateFromMods(ModManager.Mods))).ToString(CultureInfo.InvariantCulture)); Length.UpdateValue(TimeSpan.FromMilliseconds(map.SongLength / ModHelper.GetRateFromMods(ModManager.Mods)).ToString(@"mm\:ss")); Difficulty.UpdateValue(StringHelper.AccuracyToString((float)map.DifficultyFromMods(ModManager.Mods)).Replace("%", "")); for (var i = 0; i < Items.Count; i++) { var metadata = Items[i]; if (i == 0) { metadata.X = 5; continue; } var previous = Items[i - 1]; metadata.X = previous.X + previous.Width + 5 + 5; } Items.ForEach(x => x.X += (Banner.Width - Items.Last().X) / Items.Count / 2); }
private Track getSuggestedTrack() { Bpm bpm = new Bpm(null); Year year = new Year(null); Ending ending = new Ending(Ending.Attribute.None); int temp; if(!String.IsNullOrEmpty(tbBpm.Text) && int.TryParse(tbBpm.Text, out temp)) bpm.Value = temp; if(!String.IsNullOrEmpty(tbYear.Text) && int.TryParse(tbYear.Text, out temp)) year.Value = temp; if(!String.IsNullOrEmpty(tbEnding.Text)) if(new List<string>(Enum.GetNames(typeof(Ending.Attribute))).Contains(tbEnding.Text)) ending.Value = (Ending.Attribute)Enum.Parse(typeof(Ending.Attribute), tbEnding.Text); Track track = new Track( new Autor(String.IsNullOrEmpty(tbAutor.Text) ? " " : tbAutor.Text), bpm, new Code(String.IsNullOrEmpty(tbCode.Text) ? " " : tbCode.Text), new Interpret(String.IsNullOrEmpty(tbInterpret.Text) ? " " : tbInterpret.Text), new Label(String.IsNullOrEmpty(tbLabel.Text) ? " " : tbLabel.Text), new Laenge(String.IsNullOrEmpty(tbLaenge.Text) ? " " : tbLaenge.Text), new Titel(String.IsNullOrEmpty(tbTitel.Text) ? " " : tbTitel.Text), new Verlag(String.IsNullOrEmpty(tbVerlag.Text) ? " " : tbVerlag.Text), year, ending); return track; }
public Measure(Bpm bpm) { Time = bpm.Time; Number = bpm.Measure; }
/// <summary> /// 输出为BangCraft谱面工程格式 /// </summary> /// <returns></returns> private string ToBangCraftScore() { var xml = new XmlDocument(); var Save = xml.CreateElement("Save"); Save.SetAttribute("name", "BGCdate"); xml.AppendChild(Save); var info = xml.CreateElement("info"); Save.AppendChild(info); var music = xml.CreateElement("music"); music.InnerText = "test"; info.AppendChild(music); var bpm = xml.CreateElement("bpm"); bpm.InnerText = Bpm.ToString(); info.AppendChild(bpm); var delay = xml.CreateElement("delay"); delay.InnerText = Delay_ms.ToString(); info.AppendChild(delay); var bpmP1 = xml.CreateElement("bpmP1"); bpmP1.InnerText = ""; info.AppendChild(bpmP1); var bpmD1 = xml.CreateElement("bpmD1"); bpmD1.InnerText = "0"; info.AppendChild(bpmD1); var bpmP2 = xml.CreateElement("bpmP2"); bpmP2.InnerText = ""; info.AppendChild(bpmP2); var bpmD2 = xml.CreateElement("bpmD2"); bpmD2.InnerText = "0"; info.AppendChild(bpmD2); var bpmP3 = xml.CreateElement("bpmP3"); bpmP3.InnerText = ""; info.AppendChild(bpmP3); var bpmD3 = xml.CreateElement("bpmD3"); bpmD3.InnerText = "0"; info.AppendChild(bpmD3); foreach (var note in Notes) { //N if (note.NoteType == NoteType.白键 || note.NoteType == NoteType.技能) { var noteN = xml.CreateElement("noteN"); Save.AppendChild(noteN); var lineN = xml.CreateElement("lineN"); lineN.InnerText = (note.Track - 4).ToString(); noteN.AppendChild(lineN); var posN = xml.CreateElement("posN"); posN.InnerText = (note.Time * 2).ToString(); noteN.AppendChild(posN); var typeN = xml.CreateElement("typeN"); typeN.InnerText = "N"; noteN.AppendChild(typeN); } } foreach (var note in Notes) { //F if (note.NoteType == NoteType.粉键) { var noteF = xml.CreateElement("noteF"); Save.AppendChild(noteF); var lineF = xml.CreateElement("lineF"); lineF.InnerText = (note.Track - 4).ToString(); noteF.AppendChild(lineF); var posF = xml.CreateElement("posF"); posF.InnerText = (note.Time * 2).ToString(); noteF.AppendChild(posF); var typeF = xml.CreateElement("typeF"); typeF.InnerText = "F"; noteF.AppendChild(typeF); } } var index = 0; foreach (var note in Notes) { //LS if (note.NoteType == NoteType.滑条a_开始) { var noteL = xml.CreateElement("noteL"); Save.AppendChild(noteL); var lineL = xml.CreateElement("lineL"); lineL.InnerText = (note.Track - 4).ToString(); noteL.AppendChild(lineL); var posL = xml.CreateElement("posL"); posL.InnerText = (note.Time * 2).ToString(); noteL.AppendChild(posL); var typeL = xml.CreateElement("typeL"); typeL.InnerText = "LS"; noteL.AppendChild(typeL); var startlineL = xml.CreateElement("startlineL"); startlineL.InnerText = (note.Track - 4).ToString(); noteL.AppendChild(startlineL); var startposL = xml.CreateElement("startposL"); startposL.InnerText = (note.Time * 2).ToString(); noteL.AppendChild(startposL); for (var i = index + 1; i < Notes.Count; i++) { if (Notes[i].NoteType == NoteType.滑条a_中间 && Notes[i].Time != note.Time) { var noteM = xml.CreateElement("noteL"); Save.AppendChild(noteM); var lineM = xml.CreateElement("lineL"); lineM.InnerText = (Notes[i].Track - 4).ToString(); noteM.AppendChild(lineM); var posM = xml.CreateElement("posL"); posM.InnerText = (Notes[i].Time * 2).ToString(); noteM.AppendChild(posM); var typeM = xml.CreateElement("typeL"); typeM.InnerText = "LM"; noteM.AppendChild(typeM); noteM.AppendChild(startlineL.Clone()); noteM.AppendChild(startposL.Clone()); continue; } if ((Notes[i].NoteType == NoteType.滑条a_结束 || Notes[i].NoteType == NoteType.滑条a_粉键结束) && Notes[i].Time != note.Time) { var noteE = xml.CreateElement("noteL"); Save.AppendChild(noteE); var lineE = xml.CreateElement("lineL"); lineE.InnerText = (Notes[i].Track - 4).ToString(); noteE.AppendChild(lineE); var posE = xml.CreateElement("posL"); posE.InnerText = (Notes[i].Time * 2).ToString(); noteE.AppendChild(posE); var typeE = xml.CreateElement("typeL"); typeE.InnerText = Notes[i].NoteType == NoteType.滑条a_结束 ? "LE" : "LF"; noteE.AppendChild(typeE); noteE.AppendChild(startlineL.Clone()); noteE.AppendChild(startposL.Clone()); break; } } } if (note.NoteType == NoteType.滑条b_开始) { var noteL = xml.CreateElement("noteL"); Save.AppendChild(noteL); var lineL = xml.CreateElement("lineL"); lineL.InnerText = (note.Track - 4).ToString(); noteL.AppendChild(lineL); var posL = xml.CreateElement("posL"); posL.InnerText = (note.Time * 2).ToString(); noteL.AppendChild(posL); var typeL = xml.CreateElement("typeL"); typeL.InnerText = "LS"; noteL.AppendChild(typeL); var startlineL = xml.CreateElement("startlineL"); startlineL.InnerText = (note.Track - 4).ToString(); noteL.AppendChild(startlineL); var startposL = xml.CreateElement("startposL"); startposL.InnerText = (note.Time * 2).ToString(); noteL.AppendChild(startposL); for (var i = index + 1; i < Notes.Count; i++) { if (Notes[i].NoteType == NoteType.滑条b_中间 && Notes[i].Time != note.Time) { var noteM = xml.CreateElement("noteL"); Save.AppendChild(noteM); var lineM = xml.CreateElement("lineL"); lineM.InnerText = (Notes[i].Track - 4).ToString(); noteM.AppendChild(lineM); var posM = xml.CreateElement("posL"); posM.InnerText = (Notes[i].Time * 2).ToString(); noteM.AppendChild(posM); var typeM = xml.CreateElement("typeL"); typeM.InnerText = "LM"; noteM.AppendChild(typeM); noteM.AppendChild(startlineL.Clone()); noteM.AppendChild(startposL.Clone()); continue; } if ((Notes[i].NoteType == NoteType.滑条b_结束 || Notes[i].NoteType == NoteType.滑条b_粉键结束) && Notes[i].Time != note.Time) { var noteE = xml.CreateElement("noteL"); Save.AppendChild(noteE); var lineE = xml.CreateElement("lineL"); lineE.InnerText = (Notes[i].Track - 4).ToString(); noteE.AppendChild(lineE); var posE = xml.CreateElement("posL"); posE.InnerText = (Notes[i].Time * 2).ToString(); noteE.AppendChild(posE); var typeE = xml.CreateElement("typeL"); typeE.InnerText = Notes[i].NoteType == NoteType.滑条b_结束 ? "LE" : "LF"; noteE.AppendChild(typeE); noteE.AppendChild(startlineL.Clone()); noteE.AppendChild(startposL.Clone()); break; } } } if (note.NoteType == NoteType.长键_开始) { var noteL = xml.CreateElement("noteL"); Save.AppendChild(noteL); var lineL = xml.CreateElement("lineL"); lineL.InnerText = (note.Track - 4).ToString(); noteL.AppendChild(lineL); var posL = xml.CreateElement("posL"); posL.InnerText = (note.Time * 2).ToString(); noteL.AppendChild(posL); var typeL = xml.CreateElement("typeL"); typeL.InnerText = "LS"; noteL.AppendChild(typeL); var startlineL = xml.CreateElement("startlineL"); startlineL.InnerText = (note.Track - 4).ToString(); noteL.AppendChild(startlineL); var startposL = xml.CreateElement("startposL"); startposL.InnerText = (note.Time * 2).ToString(); noteL.AppendChild(startposL); for (var i = index + 1; i < Notes.Count; i++) { if ((Notes[i].NoteType == NoteType.长键_结束 || Notes[i].NoteType == NoteType.长键_粉键结束) && Notes[i].Time != note.Time && Notes[i].Track == note.Track) { var noteE = xml.CreateElement("noteL"); Save.AppendChild(noteE); var lineE = xml.CreateElement("lineL"); lineE.InnerText = (Notes[i].Track - 4).ToString(); noteE.AppendChild(lineE); var posE = xml.CreateElement("posL"); posE.InnerText = (Notes[i].Time * 2).ToString(); noteE.AppendChild(posE); var typeE = xml.CreateElement("typeL"); typeE.InnerText = Notes[i].NoteType == NoteType.长键_结束 ? "LE" : "LF"; noteE.AppendChild(typeE); noteE.AppendChild(startlineL.Clone()); noteE.AppendChild(startposL.Clone()); break; } } } index++; } var result = Helper.ConvertXmlDocumentTostring(xml); return(result); }
private void MainWindow_Loaded(object sender, RoutedEventArgs e) { _reader = new DeviceReader(); _reader.Start("COM3", 9600, BatchSize); _reader.OnLineRead += (r, ir, g, m, dt) => { if (ChartValuesIR.Count > BatchSize) { ChartValuesIR.RemoveAt(0); ChartValuesRed.RemoveAt(0); ChartValuesHeart.RemoveAt(0); } ChartValuesRed.Add(new MeasureModel { Time = dt, Value = r, //r.Next(-8, 10) }); ChartValuesIR.Add(new MeasureModel { Time = dt, Value = ir, //r.Next(-8, 10) }); ChartValuesHeart.Add(new MeasureModel { Time = dt, Value = g, }); Bpm.Add(new MeasureModel { Value = m, Time = dt, }); if (Bpm.Count > 500) { Bpm.RemoveAt(0); } SetAxisLimits(dt); }; _reader.OnEveryLine += (r, ir, g, m, t) => { }; _reader.OnBatchCompleted += (r, ir, g, m) => { //SignalProcessor.Mean(ref r, ref ir); //SignalProcessor.LineLeveling(ref ir, ref r); SignalProcessor.Mean(ref g); SignalProcessor.LineLeveling(ref g); List <MeasureModel> smoothed = null; double myBpm = SignalProcessor.ComputeBpm(g, out smoothed); double spo2 = 0, bpm = 0, xyRatio = 0; if (Interop.Compute(ir.Select(n => n.Value).ToArray(), r.Select(n => n.Value).ToArray(), ref spo2, ref bpm, ref xyRatio) && myBpm > 0) { Dispatcher.Invoke(() => { SpO2Label.Content = $"SPO2: {(int)Math.Round(spo2)}, BPM: {(int)Math.Round(myBpm)}, Ratio: {xyRatio}"; }); //Spo2.Add(new MeasureModel //{ // Value = spo2, // Time = m.Last().Time, //}); //Bpm.Add(new MeasureModel //{ // Value = myBpm, // Time = r.Last().Time, //}); if (Spo2.Count > 2000) { Spo2.RemoveAt(0); Bpm.RemoveAt(0); } } return; }; }