public void TryToAddHeldNote(PossibleHeldNote heldNote) { if (!IsInOtherHeldNote(heldNote)) { HeldNotes.Add(heldNote); } }
private List <PossibleHeldNote> GetHeldNotesFromFrequencyBand(FrequencyBand newFrequencyBand) { List <PossibleHeldNote> heldNotes = new List <PossibleHeldNote>(); FrequencyBand.FBPoint lastValidPoint = null; float amplitudeSum = 0; int amplitudesN = 0; float timeDelta = newFrequencyBand.FBPoints[1].Time - newFrequencyBand.FBPoints[0].Time; foreach (FrequencyBand.FBPoint fbPoint in newFrequencyBand.FBPoints) { if (fbPoint.MinimumSquaredErrorToPrevious < MaximumSquaredError) { if (lastValidPoint == null) { lastValidPoint = fbPoint; } amplitudeSum += fbPoint.Amplitude; amplitudesN++; } else { if (lastValidPoint != null) { float timeDifference = fbPoint.Time - lastValidPoint.Time; if (timeDifference > MinimumTimeWidth) { PossibleHeldNote heldNote = new PossibleHeldNote(); heldNote.StartTime = lastValidPoint.Time; heldNote.EndTime = fbPoint.Time - timeDelta; float amplitudeMeanValue = amplitudeSum / amplitudesN; heldNote.AmplitudeMeanValue = amplitudeMeanValue; heldNote.Applicability = amplitudeMeanValue; heldNotes.Add(heldNote); } lastValidPoint = null; } amplitudeSum = 0; amplitudesN = 0; } } return(heldNotes); }
private bool IsInOtherHeldNote(PossibleHeldNote newHeldNote) { foreach (PossibleHeldNote heldNote in HeldNotes) { if (IsInBetween(heldNote, newHeldNote.StartTime) || IsInBetween(heldNote, newHeldNote.EndTime)) { return(true); } if (IsInBetween(newHeldNote, heldNote.StartTime) || IsInBetween(newHeldNote, heldNote.EndTime)) { return(true); } } return(false); }
private bool IsInBetween(PossibleHeldNote heldNote, float value) { return(heldNote.StartTime <= value && heldNote.EndTime >= value); }