This version of the library has breaking changes:
- Melanchall.DryWetMidi.Smf namespace renamed to Melanchall.DryWetMidi.Core.
- Melanchall.DryWetMidi.Smf.Interaction namespace renamed to Melanchall.DryWetMidi.Interaction.
- Pattern API moved to new namespace Melanchall.DryWetMidi.Composing.
- BarBeatTimeSpan renamed to BarBeatTicksTimeSpan.
- Renamed SetProgram methods of the PatternBuilder class to ProgramChange.
- Changed type of the parameter of SetOctave method of the PatternBuilder class from int to Octave.
From now you can read complete library documentation on https://melanchall.github.io/drywetmidi
. Here you can find information about every class and members of the library. API documentation is placed in API Documentation
Right now it's not full replacement for the library Wiki so please don't forget to look at Wiki also when you want to get more information on some topic.
Small changes and bug fixes
- Added Chord class to Melanchall.DryWetMidi.MusicTheory namespace.
- Added ChordProgression class to Melanchall.DryWetMidi.MusicTheory namespace.
- Added GetStep method to ScaleUtilities that gets NoteName corresponding to the specified step of a musical scale.
- Added GetNotesNames method to ScaleUtilities that returns infinite collection of note names that belong to the specified scale.
- Added IntervalQuality enum to Melanchall.DryWetMidi.MusicTheory namespace.
- Added Get method to Interval class which accepts interval number and quality.
- Implemented parsing of Interval by number and quality (for example, _"P8"_ which is perfect eight).
- Added Transpose method to NoteUtilities class which returns the NoteName transposed by the specified interval.
- Note can be parsed now from string with any number of sharps and flats.
- Added NoteCallback property to Playback class which allows to modify and filter every note to be played.
- Added EventCallback property to Playback class which allows to modify and filter every MIDI event to be played.
- Added EventPlayed event to Playback class to track MIDI events playing.
- Added PlaybackCurrentTimeWatcher class which allows to watch current time of specified playbacks and report it in the specified units via corresponding event.
- Added BarBeatFractionTimeSpan which represents a beat as a fraction (for example 0.5) instead of number of whole beats and number of MIDI ticks (used by BarBeatTicksTimeSpan).
- Added BarBeatUitilities which contains methods: - GetBarLength that allows to get length of specified bar in terms of MIDI ticks;
- GetBeatLength that allows to get length of a beat of specified bar in terms MIDI ticks.
- Added Filter property to quantizing settings classes to filter out objects that should be quantized.
- Added Filter property to randomizing settings classes to filter out objects that should be randomized.
- Added MidiClock class which allows to report ticks with the specified interval and speed.
- Added NoteId class that repesents a separately sounding note (note number and channel).
- Added PatternUtilities class with methods: - TransformNotes that transforms notes within the specified Pattern producing new pattern;
- TransformChords that transforms chords within the specified Pattern producing new pattern;
- SplitAtAnchor that splits a pattern into subpatterns in points where the specified anchor inserted;
- SplitAtAllAnchors that splits a pattern into subpatterns in points where anchors inserted;
- SplitAtMarker that splits a pattern into subpatterns in points where the specified marker inserted;
- SplitAtAllMarkers that splits a pattern into subpatterns in points where markers inserted;
- CombineInSequence that combines the specified patterns into single one placing them after each other;
- CombineInParallel that combines the specified patterns into single one starting all them at the same time (i.e. stacking patterns).
- Added constants to PatternBuilder that holds default values: - DefaultVelocity;
- Added properties to PatternBuilder that return current values: - Velocity;
- Added ReplayPattern method to PatternBuilder class to insert all actions from the specifed pattern.
- Added PatternBuilder constructor that accepts Pattern to start from the list of actions of the passed pattern.
- Added Chord methods to PatternBuilder class which accept an instance of the Melanchall.DryWetMidi.MusicTheory.Chord.
- Added Clone method to Pattern class to create a copy of the current pattern.
- Improved GetHashCode implementation for the library classes.
- Fixed: notes order is invalid on collecting by NotesManager when notes are overlapped.
- Fixed: PatternBuilder.MoveToPreviousTime doesn't work.
- Fixed: playback starts immidiately if first event is meta event with delta-time greater than zero.