/// <summary> /// Removes all the <see cref="Note"/> that match the conditions defined by the specified predicate. /// </summary> /// <param name="eventsCollection"><see cref="EventsCollection"/> to search for notes to remove.</param> /// <param name="match">The predicate that defines the conditions of the <see cref="Note"/> to remove.</param> /// <exception cref="ArgumentNullException"><paramref name="eventsCollection"/> is <c>null</c>.</exception> public static void RemoveNotes(this EventsCollection eventsCollection, Predicate <Note> match = null) { ThrowIfArgument.IsNull(nameof(eventsCollection), eventsCollection); using (var notesManager = eventsCollection.ManageNotes()) { notesManager.Notes.RemoveAll(match ?? (n => true)); } }
/// <summary> /// Initializes a new instance of the <see cref="ChordsManager"/> with the specified events /// collection, notes tolerance and comparison delegate for events that have same time. /// </summary> /// <param name="eventsCollection"><see cref="EventsCollection"/> that holds chord events to manage.</param> /// <param name="settings">Settings accoridng to which chords should be detected and built.</param> /// <param name="sameTimeEventsComparison">Delegate to compare events with the same absolute time.</param> /// <exception cref="ArgumentNullException"><paramref name="eventsCollection"/> is <c>null</c>.</exception> public ChordsManager(EventsCollection eventsCollection, ChordDetectionSettings settings = null, Comparison <MidiEvent> sameTimeEventsComparison = null) { ThrowIfArgument.IsNull(nameof(eventsCollection), eventsCollection); _notesManager = eventsCollection.ManageNotes(settings?.NoteDetectionSettings, sameTimeEventsComparison); Chords = new ChordsCollection(_notesManager.Notes.GetChords(settings)); Chords.CollectionChanged += OnChordsCollectionChanged; }
/// <summary> /// Initializes a new instance of the <see cref="ChordsManager"/> with the specified events /// collection, notes tolerance and comparison delegate for events that have same time. /// </summary> /// <param name="eventsCollection"><see cref="EventsCollection"/> that holds chord events to manage.</param> /// <param name="notesTolerance">Notes tolerance that defines maximum distance of notes from the /// start of the first note of a chord. Notes within this tolerance will be considered as a chord.</param> /// <param name="sameTimeEventsComparison">Delegate to compare events with the same absolute time.</param> /// <exception cref="ArgumentNullException"><paramref name="eventsCollection"/> is null.</exception> /// <exception cref="ArgumentOutOfRangeException"><paramref name="notesTolerance"/> is negative.</exception> public ChordsManager(EventsCollection eventsCollection, long notesTolerance = 0, Comparison <MidiEvent> sameTimeEventsComparison = null) { ThrowIfArgument.IsNull(nameof(eventsCollection), eventsCollection); ThrowIfNotesTolerance.IsNegative(nameof(notesTolerance), notesTolerance); _notesManager = eventsCollection.ManageNotes(sameTimeEventsComparison); Chords = new ChordsCollection(CreateChords(_notesManager.Notes, notesTolerance)); Chords.CollectionChanged += OnChordsCollectionChanged; }
/// <summary> /// Gets notes contained in the specified collection of <see cref="MidiEvent"/>. /// </summary> /// <param name="events">Collection of<see cref="MidiFile"/> to search for notes.</param> /// <returns>Collection of notes contained in <paramref name="events"/> ordered by time.</returns> /// <exception cref="ArgumentNullException"><paramref name="events"/> is <c>null</c>.</exception> public static IEnumerable <Note> GetNotes(this IEnumerable <MidiEvent> events) { ThrowIfArgument.IsNull(nameof(events), events); var eventsCollection = new EventsCollection(); eventsCollection.AddRange(events); return(eventsCollection.ManageNotes().Notes.ToList()); }
/// <summary> /// Adds collection of notes to the specified <see cref="EventsCollection"/>. /// </summary> /// <param name="eventsCollection"><see cref="EventsCollection"/> to add notes to.</param> /// <param name="notes">Notes to add to the <paramref name="eventsCollection"/>.</param> /// <exception cref="ArgumentNullException"> /// <para>One of the following errors occured:</para> /// <list type="bullet"> /// <item> /// <description><paramref name="eventsCollection"/> is <c>null</c>.</description> /// </item> /// <item> /// <description><paramref name="notes"/> is <c>null</c>.</description> /// </item> /// </list> /// </exception> public static void AddNotes(this EventsCollection eventsCollection, IEnumerable <Note> notes) { ThrowIfArgument.IsNull(nameof(eventsCollection), eventsCollection); ThrowIfArgument.IsNull(nameof(notes), notes); using (var notesManager = eventsCollection.ManageNotes()) { notesManager.Notes.Add(notes); } }
/// <summary> /// Performs the specified action on each <see cref="Note"/> contained in the <see cref="EventsCollection"/>. /// </summary> /// <param name="eventsCollection"><see cref="EventsCollection"/> to search for notes to process.</param> /// <param name="action">The action to perform on each <see cref="Note"/> contained in the /// <paramref name="eventsCollection"/>.</param> /// <param name="match">The predicate that defines the conditions of the <see cref="Note"/> to process.</param> /// <exception cref="ArgumentNullException"> /// <para>One of the following errors occured:</para> /// <list type="bullet"> /// <item> /// <description><paramref name="eventsCollection"/> is <c>null</c>.</description> /// </item> /// <item> /// <description><paramref name="action"/> is <c>null</c>.</description> /// </item> /// </list> /// </exception> public static void ProcessNotes(this EventsCollection eventsCollection, Action <Note> action, Predicate <Note> match = null) { ThrowIfArgument.IsNull(nameof(eventsCollection), eventsCollection); ThrowIfArgument.IsNull(nameof(action), action); using (var notesManager = eventsCollection.ManageNotes()) { foreach (var note in notesManager.Notes.Where(n => match?.Invoke(n) != false)) { action(note); } } }
/// <summary> /// Gets notes contained in the specified <see cref="EventsCollection"/>. /// </summary> /// <param name="eventsCollection"><see cref="EventsCollection"/> to search for notes.</param> /// <returns>Collection of notes contained in <paramref name="eventsCollection"/> ordered by time.</returns> /// <exception cref="ArgumentNullException"><paramref name="eventsCollection"/> is <c>null</c>.</exception> public static IEnumerable <Note> GetNotes(this EventsCollection eventsCollection) { ThrowIfArgument.IsNull(nameof(eventsCollection), eventsCollection); return(eventsCollection.ManageNotes().Notes.ToList()); }