Bump Melanchall.DryWetMidi from 5.2.1 to 8.0.3#792
Open
dependabot[bot] wants to merge 1 commit intomasterfrom
Open
Bump Melanchall.DryWetMidi from 5.2.1 to 8.0.3#792dependabot[bot] wants to merge 1 commit intomasterfrom
dependabot[bot] wants to merge 1 commit intomasterfrom
Conversation
--- updated-dependencies: - dependency-name: Melanchall.DryWetMidi dependency-version: 8.0.3 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Updated Melanchall.DryWetMidi from 5.2.1 to 8.0.3.
Release notes
Sourced from Melanchall.DryWetMidi's releases.
8.0.3
This small release is the last in this year. And the last one with support of 32-bit processes for Multimedia API on Windows.
Happy New Year! 🎄 🎉
Small changes
Playback.Playback.DeviceErrorOccurredevent ofPlaybackhas been replaced withErrorOccurredone.timeparameter toITimeSpaninTimeSpanUtilities.RoundforBarBeatTicksTimeSpanandBarBeatFractionTimeSpan(#333).TempoMapoperations performance.BarBeatTicksTimeSpanconversion for simple cases.nullcustom timed events in timed events processing utilities.nullcustom notes in notes processing utilities.nullcustom chords in chords processing utilities.Bug fixes
Playback.NoteCallbackis still applied to already played notes after it has been set tonull.GetObjectsis not sorted when chords and timed events requested, and notes and chords passed.GetTempoMapreturns wrong tempo map after events were set onEventsCollectionby index.8.0.2
Another one minor release. It fixes critical bug with the Playback – Playback skips some notes (#334). It's highly recommended to switch to the new version of the library.
8.0.1
This minor release addresses issues with the
Playback.First of all, performance of
Playbackinstance creation was degraded in the 8.0.0 version. Now that is fixed. More than that,Playback's constructor is faster and consumes less memory than in the 7.2.0 version. It's highly recommended to switch to the new version of the library.Also, a couple of bugs were fixed:
Playbackvia passing an objects collection, playback can work unexpectedly if input objects are not sorted by their times.MoveToTime) and there is a note in the new position,NoteCallbackwon't be applied.8.0.0
Major playback improvements
Now it’s possible to change playback’s data on the fly (#78)! It was a big challenge to implement this functionality (do you even use red-black trees?). But now you can add, remove and change objects without needing to recreate an instance of the
Playbackor even stop it. You’ll find the detailed guide on how to use the feature in the Dynamic changes article of the library docs.Also a bunch of bugs related to the
Playbackwere fixed:PlaybackEndreached;MoveToTimehas no effect if it’s executed just before the firstStartmethod call;IsRunningcan return invalid value due to race conditions whenLoopproperty is set totrue;Startand thenStopcalls in the middle of a note can cause unexpected behavior whenInterruptNotesOnStopandTrackNotesare set totrue.Data tracking is now on by default. So in case of jumps in time you’ll get correctly applied program, pitch and control values.
TrackNotesis nowtrueby default too. Of course you can turn the feature off via corresponding properties if you want.Several new things were added:
Playback: addedSendNoteOffEventsForNonActiveNotesandSendNoteOnEventsForActiveNotesproperties;PlaybackSettings: addedCalculateTempoMapproperty;NotesPlaybackStartedandNotesPlaybackFinishedevents args: added original notes (seeNotesEventArgs.OriginalNotes).Please note that there are some breaking changes:
Playmethod has been removed. It causes confusion and does nothing but just callingStartand thenSpinWait.SpinUntil(() => !IsRunning). You can do these actions by yourself if you for some reason want the blocking playback.PlaybackHinthas been removed fromPlaybackSettings. There was no noticeable performance gain in using this feature. You can just disable data tracking if you want.Snappingproperty within thePlaybackanymore. Snapping functionality was moved just right into thePlayback.Snapping.IsEnabledis replaced withIsSnappingEnabled.SnapToNotesStartsandSnapToNotesEndsmethods are replaced with the much more flexibleSnapToEventsone.New features and improvements
CsvSerializerSettingsintoCsvSerializationSettingsfor serialization methods andCsvDeserializationSettingsfor deserialization ones.UnknownRecordPolicyproperty toCsvDeserializationSettings.CsvExceptionwhich replacesFormatExceptioninCsvSerializer.BytesArrayDelimiterproperty toCsvSerializationSettingsandCsvDeserializationSettings.RemoveDuplicatedControlChangeEventsproperty toSanitizingSettings.RemoveOrphanedNoteOnEventsproperty ofSanitizingSettingswithOrphanedNoteOnEventsPolicywhich provides more ways to handle orphaned Note On events.Small changes and bug fixes
ManageTempoMapmethods of theTempoMapManagingUtilities(#321).MidiFileUtilities.GetDurationmethods.7.2.0
Objects managing methods are unified
Now it's possible to process objects of different types simultaneously. Thus now you can call, for example, just
midiFile.ProcessObjects(ObjectType.Chord | ObjectType.Note, ...)instead ofProcessChordsafterProcessNotes. The same story for objects removal. So in addition to this set of methodsGetTimedEvents/GetNotes/GetChordsProcessTimedEvents/ProcessNotes/ProcessChordsRemoveTimedEvents/RemoveNotes/RemoveChordswe have
GetObjectsProcessObjectsRemoveObjectsAlso objects detection settings were decoupled. So
ChordDetectionSettingsdoesn't containNoteDetectionSettingsfrom now, as well asNoteDetectionSettingsdoesn't containTimedEventDetectionSettings. Methods shown in the first list accept those settings as separate parameters now.PatternBuilderimprovementsNow you can insert simple patterns more quickly – via new
PianoRollmethod. For example:Please read the PianoRoll section of the Pattern article to learn more.
Also a couple of new methods have been added to the
PatternBuilder:ControlChangeandPitchBend.Small changes
SanitizingSettings.RemoveDuplicatedNotesproperty.SanitizingSettings.RemoveDuplicatedSequenceTrackNameEventsproperty.SanitizingSettings.NoteMinVelocityproperty.SanitizingSettings.Trimproperty tofalsesince trimming can be undesirable.settingsparameter of the methods fromRestsUtilitiesis optional now.7.1.0
Rests redesigned
Now you can get rests between different types of objects and by any logic you will describe. Please read updated Rests section of the docs. This entails a breaking change – there is no
ObjectType.Restoption anymore. So to get, for example, notes and rests between them you need to write following code:To feel the power of the new approach, just take a look to the snippet:
Here we get notes, chords and rests between notes with note number > 100 separately for each note number. Rests won't be built for chords and notes with note number <= 100.
CSV serialization redesigned
CSV serialization and deserialization have been completely reworked with the new CsvSerializer class. Please read CSV serializer article to learn more.
Small changes
EventRecordedevent to theRecording.Repeater.Trimfeature toSanitizer.7.0.2
This a micro-release, which fixes a couple of bugs ✨ 🎄 ✨
Small changes and bug fixes
7.0.1
New features and improvements
IObjectIdremoved. Please read updated SplitByObjects section of the docs.filterparameter toSplitObjectsAtDistance,SplitObjectsByGrid,SplitObjectsByPartsNumberandSplitObjectsByStepmethods of theSplitter.PlaybackHint.TimedObjectsManager.SaveChangesmethod.TimedObjectUtilities.AddObjectsmethod when target events collection is empty.Playback.Small changes and bug fixes
TempoMap.Equals.SmpteOffsetEvent.MidiClockwhen there are speed changes.NotesPlaybackStartedandNotesPlaybackFinishedevents of thePlaybackcan be fired with empty notes collection.7.0.0
Breaking changes
This version of the library has following breaking changes:
NoteSearchContextandChordSearchContext.CombineInSequenceandCombineInParallelmethods ofPatternUtilitiestoMergeSequentiallyandMergeSimultaneouslycorrespondingly.New features and improvements
Sanitizertool.MergeSequentiallyandMergeSimultaneouslymethods to theMergertool.StopReadingOnExpectedTrackChunksCountReachedproperty toReadingSettings(#244).ChordProcessingHint(#256).NoteProcessingHint.TimedEventProcessingHint.FromDoublemethod forMusicalTimeSpan.PositionandLengthproperties toMidiToken.Small changes and bug fixes
Quantizerperformance.PitchBendEventto8192.GetTimedEventsmethods for multiple track chunks returns original events if a single track chunk is in the collection.Chord's length setting below the distance between chord's start and its last note's time.6.1.4
Small changes and bug fixes
GetTempoMapmethods.WaitForCompleteSysExEventproperty toInputDevice.AccessViolationExceptionthrown sometimes onHighPrecisionTickGeneratorstop on Windows.6.1.3
Lazy reading/writing API
DryWetMIDI now provides ways to read/write data from/to a MIDI file sequentially token by token which allows to keep low memory consumption. Here the new methods and classes aimed for this task:
MidiFile.ReadLazy;MidiFile.WriteLazy;MidiTokensReader;MidiTokensWriter;TimedObjectsWriter.Small changes and bug fixes
EnumerateObjectsmethod to theGetObjectsUtilities.MidiFile.Equalsdon't respectTimeDivision.Mergerskips objects sometimes (#225).6.1.2
Apple Silicon support
DryWetMIDI multimedia API now supports Apple Silicon chips when used on macOS (#204). Thanks to @ThaddeusChristopher for testing!
Nativeless version
The library has now nativeless version where all native-dependent API is cut out. More info in the Nativeless package article.
New features and improvements
FfStatusBytePolicyproperty from BytesToMidiEventConverter.IDisposable(#205).6.1.1
This release continues unifying API to work with different MIDI objects finishing the work done in the previous release.
New features and improvements
Small changes and bug fixes
6.1.0
This release focuses on unifying API to work with different MIDI objects.
Tools
First of all, new tool added –
Repeater. It allows repeat MIDI data specified number of times with different options applied.Also, some old tools were unified into single ones:
TimedEventsQuantizer,NotesQuantizerandChordsQuantizerhave been replaced by newQuantizertool which can quantize objects of different types simultaneously. More than that, it can now quantize start and end times at the same time, applying randomization if specified (and thusRandomizertool is now obsolete). More info in the Quantizer article.NotesSplitterandChordsSplitterhave been replaced by newSplittertool which can split objects of different types simultaneously. Also all methods fromMidiFileSplitterclass have been moved to theSplitterone. More info in the Splitter articles.Objects managers
Also the work has been done on unifying separate manager classes for each object type. So now
TimedEventsManager,NotesManagerandChordsManagerclasses are now obsolete. You should useTimedObjectsManagerclass now which can manage objects of different types simultaneously. More info in the Objects managers article.New features and improvements
Clonemethod has been moved from separate classes (likeNoteorTimedEvent) toITimedObjectinterface.Splitmethod has been moved from separate classes (likeNoteorChord) toILengthedObject.SetTimemethod toTimedObjectUtilities(SetTimewithinTimedEventsManagingUtilitiesis obsolete now).SetLengthmethod toLengthedObjectUtilities(SetTimeAndLengthmethods withinNotesManagingUtilitiesandChordsManagingUtilitiesare obsolete now).MoveToStartmethod toPatternBuilderclass.RepeatSettingstype toPatternBuilder'sRepeatmethods.Notemethods by a note string toPatternBuilder.Chordmethods by a chord string toPatternBuilder.Playback.InterruptNotesOnStopproperty totrue.MusicTheory.Noteignores case now.Chord.GetNamesmethod supports7b9,add11,7#11,7+11,7(#11)and7aug11chords now (see complete list of supported chords here).TimeTypeproperty to thePlaybackCurrentTimeWatcher.PlaybackCurrentTimeWatcheris now public so you can create different watchers.WatchOnlyRunningPlaybacksproperty to thePlaybackCurrentTimeWatcherSettings.SetPlaybackTimeTypemethod to thePlaybackCurrentTimeWatcher.Note's constructor by pair of timed events.TimedEventDetectionSettingstype to timed events managing methods.ConstructorandTimedEventDetectionSettingsproperties toNoteDetectionSettings.Constructorproperty toChordDetectionSettings.Small changes and bug fixes
MetricTimeSpan(#144).NotEnoughBytesPolicyis ignored on reading some events.TrackChunkis written on saving toSingleTrackformat even if there are no track chunks in a file.Playbackposition jumps on speed changing.GetObjectsmethods sometimes return not all objects if uncompleted chord encountered.6.0.1
This is a minor release containing following changes:
HighPrecisionTickGeneratorimplementation for macOS uses less CPU now and comsume less power.GetAllstatic method for InputDevice and for OutputDevice returnsICollectionnow.VirtualDevice.IsEnableddoesn't work.EndOfTrackEventwritten incorrectly in some cases if it present in a MIDI file withReadingSettings.EndOfTrackStoringPolicyset toEndOfTrackStoringPolicy.Storeon reading the file.6.0.0
Devices API available for macOS now
DryWetMIDI allows now work with MIDI devices on macOS! More than that, a couple of new classes are available for macOS only:
Also HighPrecisionTickGenerator implemented for macOS too so you can now use Playback with default settings on that platform. Its implementation for macOS is not good (in terms of performance) for now but will be optimized for the next release of the library.
Breaking changes
This version of the library has following breaking changes:
Melanchall.DryWetMidi.Devicesnamespace renamed to Melanchall.DryWetMidi.Multimedia to reflect its content more precisely since not only devices are there.DriverManufacturer,ProductIdentifierandDriverVersionproperties were removed from the MidiDevice class and replaced byGetPropertymethod for InputDevice and for OutputDevice.Channels,DeviceType,NotesNumber,SupportsLeftRightVolumeControl,SupportsPatchCaching,SupportsVolumeControl,VoicesNumberandVolumeproperties were removed from OutputDevice and replaced by GetProperty method.InvalidSysExEventReceivedandInvalidShortEventReceivedevents from InputDevice and replaced them with ErrorOccurred one.New features
GetPropertymethod for InputDevice and for OutputDevice.GetSupportedPropertiesmethod for InputDevice and for OutputDevice.ConvertMultiplemethods to BytesToMidiEventConverter (#134).WritingSettingsproperty of MidiEventToBytesConverter into separate properties.ReadingSettingsproperty of BytesToMidiEventConverter into separate properties.GetByIndexmethod for InputDevice and for OutputDevice.Small changes and bug fixes
GetObjectsmethods of the GetObjectsUtilities sometimes return wrong chords when notes are gathered across different track chunks.Commits viewable in compare view.
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)