/// <summary> /// Initializes a new instance of the <see cref="NotesManager"/> with the specified events /// collection and comparison delegate for events that have same time. /// </summary> /// <param name="eventsCollection"><see cref="EventsCollection"/> that holds note events to manage.</param> /// <param name="settings">Settings accoridng to which notes should be detected and built.</param> /// <param name="sameTimeEventsComparison">Delegate to compare events with the same absolute time.</param> /// <remarks> /// If the <paramref name="sameTimeEventsComparison"/> is not specified events with the same time /// will be placed into the underlying events collection in order of adding them through the manager. /// If you want to specify custom order of such events you need to specify appropriate comparison delegate. /// </remarks> /// <exception cref="ArgumentNullException"><paramref name="eventsCollection"/> is <c>null</c>.</exception> public NotesManager(EventsCollection eventsCollection, NoteDetectionSettings settings = null, Comparison <MidiEvent> sameTimeEventsComparison = null) { ThrowIfArgument.IsNull(nameof(eventsCollection), eventsCollection); _timedEventsManager = eventsCollection.ManageTimedEvents(sameTimeEventsComparison); Notes = new NotesCollection(_timedEventsManager.Events.GetNotesAndTimedEventsLazy(settings).OfType <Note>()); Notes.CollectionChanged += OnNotesCollectionChanged; }
/// <summary> /// Initializes a new instance of the <see cref="NotesManager"/> with the specified events /// collection and comparison delegate for events that have same time. /// </summary> /// <param name="eventsCollection"><see cref="EventsCollection"/> that holds note events to manage.</param> /// <param name="sameTimeEventsComparison">Delegate to compare events with the same absolute time.</param> /// <remarks> /// If the <paramref name="sameTimeEventsComparison"/> is not specified events with the same time /// will be placed into the underlying events collection in order of adding them through the manager. /// If you want to specify custom order of such events you need to specify appropriate comparison delegate. /// </remarks> /// <exception cref="ArgumentNullException"><paramref name="eventsCollection"/> is <c>null</c>.</exception> public NotesManager(EventsCollection eventsCollection, Comparison <MidiEvent> sameTimeEventsComparison = null) { ThrowIfArgument.IsNull(nameof(eventsCollection), eventsCollection); _timedEventsManager = eventsCollection.ManageTimedEvents(sameTimeEventsComparison); Notes = new NotesCollection(CreateNotes(_timedEventsManager.Events)); Notes.CollectionChanged += OnNotesCollectionChanged; }