diff --git a/Docs/docfx.json b/Docs/docfx.json index 8cab287f4..333a633e6 100644 --- a/Docs/docfx.json +++ b/Docs/docfx.json @@ -38,7 +38,7 @@ "_enableSearch": true, "_appLogoPath": "images/logo.png", "_appFaviconPath": "images/favicon.png", - "_appFooter": "2024 / Generated by DocFX", + "_appFooter": "2023 / Generated by DocFX", "_disableContribution": true }, "template": [ diff --git a/DryWetMidi/Common/MathUtilities.cs b/DryWetMidi/Common/MathUtilities.cs index 8109b7fd8..7d7d88e09 100644 --- a/DryWetMidi/Common/MathUtilities.cs +++ b/DryWetMidi/Common/MathUtilities.cs @@ -133,11 +133,9 @@ public static long LeastCommonMultiple(long a, long b) public static long GreatestCommonDivisor(long a, long b) { - long remainder; - while (b != 0) { - remainder = a % b; + var remainder = a % b; a = b; b = remainder; } diff --git a/DryWetMidi/Composing/Actions/StepAction.cs b/DryWetMidi/Composing/Actions/StepAction.cs index 9c2fe89d9..02136fc84 100644 --- a/DryWetMidi/Composing/Actions/StepAction.cs +++ b/DryWetMidi/Composing/Actions/StepAction.cs @@ -6,7 +6,7 @@ internal abstract class StepAction : PatternAction { #region Constructor - public StepAction(ITimeSpan step) + protected StepAction(ITimeSpan step) { Step = step; } diff --git a/DryWetMidi/Core/Events/Base/MidiEvent.cs b/DryWetMidi/Core/Events/Base/MidiEvent.cs index 54e7f097d..438096774 100644 --- a/DryWetMidi/Core/Events/Base/MidiEvent.cs +++ b/DryWetMidi/Core/Events/Base/MidiEvent.cs @@ -34,7 +34,7 @@ public abstract class MidiEvent /// Initializes a new instance of the with the specified event type. /// /// The type of event. - public MidiEvent(MidiEventType eventType) + protected MidiEvent(MidiEventType eventType) { EventType = eventType; } diff --git a/DryWetMidi/Core/Events/Meta/BaseTextEvent.cs b/DryWetMidi/Core/Events/Meta/BaseTextEvent.cs index 80b2a1f64..4dc9864e9 100644 --- a/DryWetMidi/Core/Events/Meta/BaseTextEvent.cs +++ b/DryWetMidi/Core/Events/Meta/BaseTextEvent.cs @@ -18,7 +18,7 @@ public abstract class BaseTextEvent : MetaEvent /// /// Initializes a new instance of the . /// - public BaseTextEvent(MidiEventType eventType) + protected BaseTextEvent(MidiEventType eventType) : base(eventType) { } @@ -29,7 +29,7 @@ public BaseTextEvent(MidiEventType eventType) /// The type of event. /// Text contained in the event. /// specified an invalid value. - public BaseTextEvent(MidiEventType eventType, string text) + protected BaseTextEvent(MidiEventType eventType, string text) : this(eventType) { Text = text; diff --git a/DryWetMidi/Core/MidiReader.cs b/DryWetMidi/Core/MidiReader.cs index 1e582d727..16b24250e 100644 --- a/DryWetMidi/Core/MidiReader.cs +++ b/DryWetMidi/Core/MidiReader.cs @@ -298,10 +298,11 @@ public int ReadVlqNumber() public long ReadVlqLongNumber() { long result = 0; - byte b; try { + byte b; + do { b = ReadByte(); diff --git a/DryWetMidi/Interaction/Chords/ChordsBuilder.cs b/DryWetMidi/Interaction/Chords/ChordsBuilder.cs index 5eeb49487..4ca1cbf0e 100644 --- a/DryWetMidi/Interaction/Chords/ChordsBuilder.cs +++ b/DryWetMidi/Interaction/Chords/ChordsBuilder.cs @@ -11,7 +11,7 @@ private class ChordDescriptor { private readonly int _notesMinCount; - public ChordDescriptor(Note firstNote, int notesMinCount) + protected ChordDescriptor(Note firstNote, int notesMinCount) { Time = firstNote.Time; Notes.Add(firstNote); diff --git a/DryWetMidi/Interaction/Chords/ChordsManagingUtilities.cs b/DryWetMidi/Interaction/Chords/ChordsManagingUtilities.cs index bbca38407..406ddec93 100644 --- a/DryWetMidi/Interaction/Chords/ChordsManagingUtilities.cs +++ b/DryWetMidi/Interaction/Chords/ChordsManagingUtilities.cs @@ -1052,7 +1052,7 @@ internal static int ProcessChordsInternal( : null; var chordsBuilder = new ChordsBuilder(settings); - var chords = chordsBuilder.GetChordsLazy(eventsCollections.GetTimedEventsLazy(eventsCount, settings?.NoteDetectionSettings?.TimedEventDetectionSettings, false), collectedTimedEvents != null, collectedTimedEvents); + var chords = chordsBuilder.GetChordsLazy(eventsCollections.GetTimedEventsLazy(eventsCount, settings.NoteDetectionSettings?.TimedEventDetectionSettings, false), collectedTimedEvents != null, collectedTimedEvents); foreach (var chordAt in chords) { diff --git a/DryWetMidi/Interaction/GetObjects/GetObjectsUtilities.cs b/DryWetMidi/Interaction/GetObjects/GetObjectsUtilities.cs index 47a561a1a..5a52c7bff 100644 --- a/DryWetMidi/Interaction/GetObjects/GetObjectsUtilities.cs +++ b/DryWetMidi/Interaction/GetObjects/GetObjectsUtilities.cs @@ -414,7 +414,6 @@ private static IEnumerable EnumerateObjectsFromSortedTimedObjects( ?? (getChords ? settings.ChordDetectionSettings?.NoteDetectionSettings : null) ?? new NoteDetectionSettings(); var chordDetectionSettings = settings.ChordDetectionSettings ?? new ChordDetectionSettings(); - var restDetectionSettings = settings.RestDetectionSettings ?? new RestDetectionSettings(); var timedObjects = processedTimedObjects; @@ -429,11 +428,6 @@ private static IEnumerable EnumerateObjectsFromSortedTimedObjects( // - var notesLastEndTimes = new Dictionary(); - var noteDescriptorProvider = NoteDescriptorProviders[restDetectionSettings.RestSeparationPolicy]; - var setRestChannel = SetRestChannel[restDetectionSettings.RestSeparationPolicy]; - var setRestNoteNumber = SetRestNoteNumber[restDetectionSettings.RestSeparationPolicy]; - foreach (var timedObject in timedObjects) { var processed = false; diff --git a/DryWetMidi/Interaction/Notes/NotesManagingUtilities.cs b/DryWetMidi/Interaction/Notes/NotesManagingUtilities.cs index b487924d5..cf1d6134b 100644 --- a/DryWetMidi/Interaction/Notes/NotesManagingUtilities.cs +++ b/DryWetMidi/Interaction/Notes/NotesManagingUtilities.cs @@ -22,7 +22,7 @@ private abstract class NoteOnsHolderBase where TDescriptor : IObjec private readonly Stack> _nodesStack; private readonly Queue> _nodesQueue; - public NoteOnsHolderBase(NoteStartDetectionPolicy noteStartDetectionPolicy) + protected NoteOnsHolderBase(NoteStartDetectionPolicy noteStartDetectionPolicy) { switch (noteStartDetectionPolicy) { @@ -110,13 +110,13 @@ private interface IObjectDescriptorIndexed : IObjectDescriptor private class NoteDescriptor : IObjectDescriptor { + private TimedEvent _noteOnTimedEvent; + public NoteDescriptor(TimedEvent noteOnTimedEvent) { - NoteOnTimedEvent = noteOnTimedEvent; + _noteOnTimedEvent = noteOnTimedEvent; } - public TimedEvent NoteOnTimedEvent { get; } - public TimedEvent NoteOffTimedEvent { get; set; } public bool IsCompleted => NoteOffTimedEvent != null; @@ -125,9 +125,9 @@ public ITimedObject GetObject(Func constructor) { return IsCompleted ? (constructor == null - ? new Note(NoteOnTimedEvent, NoteOffTimedEvent, false) - : constructor(new NoteData(NoteOnTimedEvent, NoteOffTimedEvent))) - : (ITimedObject)NoteOnTimedEvent; + ? new Note(_noteOnTimedEvent, NoteOffTimedEvent, false) + : constructor(new NoteData(_noteOnTimedEvent, NoteOffTimedEvent))) + : (ITimedObject)_noteOnTimedEvent; } } @@ -166,18 +166,18 @@ public TimedObjectAt GetIndexedObject(Func constru private class TimedEventDescriptor : IObjectDescriptor { + private TimedEvent _timedEvent; + public TimedEventDescriptor(TimedEvent timedEvent) { - TimedEvent = timedEvent; + _timedEvent = timedEvent; } - public TimedEvent TimedEvent { get; } - public bool IsCompleted { get; } = true; public ITimedObject GetObject(Func constructor) { - return TimedEvent; + return _timedEvent; } } diff --git a/DryWetMidi/Interaction/TimeSpan/Converters/BarBeatFractionTimeSpanConverter.cs b/DryWetMidi/Interaction/TimeSpan/Converters/BarBeatFractionTimeSpanConverter.cs index d8f2c1b53..33b552f31 100644 --- a/DryWetMidi/Interaction/TimeSpan/Converters/BarBeatFractionTimeSpanConverter.cs +++ b/DryWetMidi/Interaction/TimeSpan/Converters/BarBeatFractionTimeSpanConverter.cs @@ -158,7 +158,6 @@ public long ConvertFrom(ITimeSpan timeSpan, long time, TempoMap tempoMap) lastBarLength = BarBeatUtilities.GetBarLength(lastTimeSignature, ticksPerQuarterNote); lastBeatLength = BarBeatUtilities.GetBeatLength(lastTimeSignature, ticksPerQuarterNote); - // TODO: lastBarLength can be 0 var currentBars = Math.Min(deltaTime / lastBarLength, bars); bars -= currentBars; lastTime += currentBars * lastBarLength; diff --git a/DryWetMidi/Interaction/TimeSpan/Converters/BarBeatTicksTimeSpanConverter.cs b/DryWetMidi/Interaction/TimeSpan/Converters/BarBeatTicksTimeSpanConverter.cs index 987e260c6..f10fe7858 100644 --- a/DryWetMidi/Interaction/TimeSpan/Converters/BarBeatTicksTimeSpanConverter.cs +++ b/DryWetMidi/Interaction/TimeSpan/Converters/BarBeatTicksTimeSpanConverter.cs @@ -148,7 +148,6 @@ public long ConvertFrom(ITimeSpan timeSpan, long time, TempoMap tempoMap) lastBarLength = BarBeatUtilities.GetBarLength(lastTimeSignature, ticksPerQuarterNote); lastBeatLength = BarBeatUtilities.GetBeatLength(lastTimeSignature, ticksPerQuarterNote); - // TODO: lastBarLength can be 0 var currentBars = Math.Min(deltaTime / lastBarLength, bars); bars -= currentBars; lastTime += currentBars * lastBarLength; diff --git a/DryWetMidi/Interaction/TimeSpan/Parsers/MidiTimeSpanParser.cs b/DryWetMidi/Interaction/TimeSpan/Parsers/MidiTimeSpanParser.cs index fcabe6ca1..c9a4a36dc 100644 --- a/DryWetMidi/Interaction/TimeSpan/Parsers/MidiTimeSpanParser.cs +++ b/DryWetMidi/Interaction/TimeSpan/Parsers/MidiTimeSpanParser.cs @@ -12,7 +12,7 @@ internal static class MidiTimeSpanParser private static readonly string[] Patterns = new[] { - $@"{TimeSpanGroup}", + TimeSpanGroup, }; private const string OutOfRange = "Time span is out of range."; diff --git a/DryWetMidi/Interaction/TimeSpan/Parsers/MusicalTimeSpanParser.cs b/DryWetMidi/Interaction/TimeSpan/Parsers/MusicalTimeSpanParser.cs index e45a4aff6..ddbf72ab1 100644 --- a/DryWetMidi/Interaction/TimeSpan/Parsers/MusicalTimeSpanParser.cs +++ b/DryWetMidi/Interaction/TimeSpan/Parsers/MusicalTimeSpanParser.cs @@ -117,7 +117,7 @@ internal static ParsingResult TryParse(string input, out MusicalTimeSpan timeSpa private static string GetMnemonicGroup(string groupName, IEnumerable mnemonics) { - return $@"(?<{groupName}>[{string.Join(string.Empty, mnemonics)}])"; + return $"(?<{groupName}>[{string.Join(string.Empty, mnemonics)}])"; } #endregion diff --git a/DryWetMidi/Interaction/TimedEvents/TimedEventsManagingUtilities.cs b/DryWetMidi/Interaction/TimedEvents/TimedEventsManagingUtilities.cs index ead23ebd9..2d3e537f4 100644 --- a/DryWetMidi/Interaction/TimedEvents/TimedEventsManagingUtilities.cs +++ b/DryWetMidi/Interaction/TimedEvents/TimedEventsManagingUtilities.cs @@ -843,8 +843,6 @@ internal static IEnumerable GetTimedEventsLazy(this IEnumerable GetTimedEventsLazy(this IEnumerable(); - var timedEvent = timedObject as TimedEvent; if (timedEvent != null) return new[] { timedEvent }; diff --git a/DryWetMidi/Melanchall.DryWetMidi.csproj b/DryWetMidi/Melanchall.DryWetMidi.csproj index 42b359c1e..fc9d45fc7 100644 --- a/DryWetMidi/Melanchall.DryWetMidi.csproj +++ b/DryWetMidi/Melanchall.DryWetMidi.csproj @@ -33,7 +33,7 @@ * Build musical compositions. * Perform complex musical tasks like quantizing, notes splitting or converting MIDI files to CSV. - Copyright © Melanchall 2024 + Copyright © Melanchall 2023 midi smf music composing notes chords device playback record true snupkg diff --git a/DryWetMidi/Multimedia/Clock/TickGenerator/Session/TickGeneratorSession.cs b/DryWetMidi/Multimedia/Clock/TickGenerator/Session/TickGeneratorSession.cs index b43dc3c35..2b0f0b5a4 100644 --- a/DryWetMidi/Multimedia/Clock/TickGenerator/Session/TickGeneratorSession.cs +++ b/DryWetMidi/Multimedia/Clock/TickGenerator/Session/TickGeneratorSession.cs @@ -20,7 +20,6 @@ public static IntPtr GetSessionHandle() { if (_handle == IntPtr.Zero) { - var apiType = CommonApiProvider.Api.Api_GetApiType(); NativeApiUtilities.HandleTickGeneratorNativeApiResult( TickGeneratorSessionApiProvider.Api.Api_OpenSession(out _handle)); } diff --git a/DryWetMidi/Multimedia/InputDevice/InputDevice.cs b/DryWetMidi/Multimedia/InputDevice/InputDevice.cs index ff4671e3e..c4e02f570 100644 --- a/DryWetMidi/Multimedia/InputDevice/InputDevice.cs +++ b/DryWetMidi/Multimedia/InputDevice/InputDevice.cs @@ -589,7 +589,7 @@ private void OnPacket_Mac(IntPtr pktlist, int packetIndex, out int packetsCount) } catch (Exception ex) { - var exception = new MidiDeviceException($"Failed to parse message.", ex); + var exception = new MidiDeviceException("Failed to parse message.", ex); exception.Data.Add("Data", data); OnError(exception); } @@ -717,7 +717,7 @@ private void OnShortMessage(int message) } catch (Exception ex) { - var exception = new MidiDeviceException($"Failed to parse short message.", ex); + var exception = new MidiDeviceException("Failed to parse short message.", ex); exception.Data.Add("Message", message); OnError(exception); } @@ -755,7 +755,7 @@ private void OnSysExMessage(IntPtr sysExHeaderPointer) } catch (Exception ex) { - var exception = new MidiDeviceException($"Failed to parse system exclusive message.", ex); + var exception = new MidiDeviceException("Failed to parse system exclusive message.", ex); exception.Data.Add("Data", data); OnError(exception); } diff --git a/DryWetMidi/Multimedia/MidiDevice.cs b/DryWetMidi/Multimedia/MidiDevice.cs index a270418d6..bca9b1a36 100644 --- a/DryWetMidi/Multimedia/MidiDevice.cs +++ b/DryWetMidi/Multimedia/MidiDevice.cs @@ -1,6 +1,6 @@ -using System; +using Melanchall.DryWetMidi.Common; +using System; using System.Collections.Generic; -using Melanchall.DryWetMidi.Common; namespace Melanchall.DryWetMidi.Multimedia { @@ -157,7 +157,7 @@ public override string ToString() public void Dispose() { if (Context == CreationContext.VirtualDevice) - throw new InvalidOperationException($"Disposing of a subdevice of a virtual device is prohibited."); + throw new InvalidOperationException("Disposing of a subdevice of a virtual device is prohibited."); Dispose(true); GC.SuppressFinalize(this); diff --git a/DryWetMidi/Multimedia/NativeHandle.cs b/DryWetMidi/Multimedia/NativeHandle.cs index 64a76e84e..6dc0361f7 100644 --- a/DryWetMidi/Multimedia/NativeHandle.cs +++ b/DryWetMidi/Multimedia/NativeHandle.cs @@ -7,7 +7,7 @@ internal abstract class NativeHandle : SafeHandle { #region Constructor - public NativeHandle(IntPtr validHandle) + protected NativeHandle(IntPtr validHandle) : base(IntPtr.Zero, true) { SetHandle(validHandle); diff --git a/DryWetMidi/Multimedia/Playback/PlaybackDataTracker.cs b/DryWetMidi/Multimedia/Playback/PlaybackDataTracker.cs index cf50d2c91..8706f25c0 100644 --- a/DryWetMidi/Multimedia/Playback/PlaybackDataTracker.cs +++ b/DryWetMidi/Multimedia/Playback/PlaybackDataTracker.cs @@ -40,13 +40,13 @@ public EventWithMetadata(MidiEvent midiEvent, object metadata) private abstract class DataChange : IMetadata { - public DataChange(TData data, object metadata) + protected DataChange(TData data, object metadata) { Data = data; Metadata = metadata; } - public DataChange(TData data, object metadata, bool isDefault) + protected DataChange(TData data, object metadata, bool isDefault) : this(data, metadata) { IsDefault = isDefault; @@ -56,7 +56,7 @@ public DataChange(TData data, object metadata, bool isDefault) public object Metadata { get; set; } - public bool IsDefault { get; set; } + public bool IsDefault { get; } } private sealed class ProgramChange : DataChange diff --git a/DryWetMidi/MusicTheory/ChordProgression/ChordProgressionParser.cs b/DryWetMidi/MusicTheory/ChordProgression/ChordProgressionParser.cs index f20715089..9c31d45c2 100644 --- a/DryWetMidi/MusicTheory/ChordProgression/ChordProgressionParser.cs +++ b/DryWetMidi/MusicTheory/ChordProgression/ChordProgressionParser.cs @@ -11,14 +11,14 @@ internal static class ChordProgressionParser private const string ScaleDegreeGroupName = "sd"; - private static readonly string ScaleDegreeGroup = $@"(?<{ScaleDegreeGroupName}>(?i:M{{0,4}}(CM|CD|D?C{{0,3}})(XC|XL|L?X{{0,3}})(IX|IV|V?I{{0,3}})))"; + private static readonly string ScaleDegreeGroup = $"(?<{ScaleDegreeGroupName}>(?i:M{{0,4}}(CM|CD|D?C{{0,3}})(XC|XL|L?X{{0,3}})(IX|IV|V?I{{0,3}})))"; private static readonly string[] Patterns = new[] { $@"{ScaleDegreeGroup}\s*{ChordParser.ChordCharacteristicsGroup}" }; - private static Dictionary RomanMap = new Dictionary + private static readonly Dictionary RomanMap = new Dictionary { ['i'] = 1, ['v'] = 5, diff --git a/DryWetMidi/MusicTheory/Note/NoteNameParser.cs b/DryWetMidi/MusicTheory/Note/NoteNameParser.cs index c062aabd8..5a83640b8 100644 --- a/DryWetMidi/MusicTheory/Note/NoteNameParser.cs +++ b/DryWetMidi/MusicTheory/Note/NoteNameParser.cs @@ -18,7 +18,7 @@ internal static class NoteNameParser private static readonly string[] Patterns = new[] { $@"{NoteNameGroup}\s*{AccidentalGroup}", - $@"{NoteNameGroup}", + NoteNameGroup, }; #endregion diff --git a/DryWetMidi/Tools/Merger/Merger.MergeFiles.cs b/DryWetMidi/Tools/Merger/Merger.MergeFiles.cs index 6da44e44b..f14d14d2c 100644 --- a/DryWetMidi/Tools/Merger/Merger.MergeFiles.cs +++ b/DryWetMidi/Tools/Merger/Merger.MergeFiles.cs @@ -41,7 +41,7 @@ public ChunkDescriptor(MidiChunk chunk) private static readonly Dictionary> DefaultEventsGetters = GetDefaultEventsGetters(); - private static MidiEventEqualityCheckSettings MidiEventEqualityCheckSettings = new MidiEventEqualityCheckSettings + private static readonly MidiEventEqualityCheckSettings MidiEventEqualityCheckSettings = new MidiEventEqualityCheckSettings { CompareDeltaTimes = false }; @@ -97,7 +97,6 @@ public static MidiFile MergeSequentially( var resultTrackChunksCreationPolicy = settings.ResultTrackChunksCreationPolicy; var offset = 0L; - var initialState = true; var eventsContext = new Dictionary(); foreach (var midiFile in midiFiles) @@ -105,7 +104,7 @@ public static MidiFile MergeSequentially( var tempoMap = midiFile.GetTempoMap(); var fileDuration = GetFileDuration(midiFile, tempoMap, settings.FileDurationRoundingStep); - var chunks = GetChunksForProcessing(midiFile, initialState, eventsContext); + var chunks = GetChunksForProcessing(midiFile, eventsContext); InsertMarkers(midiFile, chunks, fileDuration, settings); var deltaTimeFactor = GetDeltaTimeFactor(timeDivision, midiFile.TimeDivision); @@ -133,8 +132,6 @@ public static MidiFile MergeSequentially( if (resultTrackChunksCreationPolicy == ResultTrackChunksCreationPolicy.MinimizeCount) AddTrackChunksMinimizingCount(result, newChunks); - - initialState = false; } return result; @@ -284,6 +281,8 @@ private static void AddTrackChunksMinimizingCount( { result.Chunks.Add(newChunks[i]); } + + trackChunksEnumerator.Dispose(); } private static void ScaleTrackChunk(TrackChunk trackChunk, int deltaTimeFactor) @@ -327,7 +326,6 @@ private static void AddOffset(IEnumerable chunks, long offset) private static ICollection GetChunksForProcessing( MidiFile midiFile, - bool initialState, Dictionary eventsContext) { var chunksCount = midiFile.Chunks.Count; diff --git a/DryWetMidi/Tools/Merger/ObjectsMerger.cs b/DryWetMidi/Tools/Merger/ObjectsMerger.cs index ed9567469..853853d65 100644 --- a/DryWetMidi/Tools/Merger/ObjectsMerger.cs +++ b/DryWetMidi/Tools/Merger/ObjectsMerger.cs @@ -97,7 +97,7 @@ public virtual ILengthedObject MergeObjects(ObjectsMergingSettings settings) case ObjectType.Note: return MergeNotes(settings); case ObjectType.Rest: - return MergeRests(settings); + return MergeRests(); case ObjectType.Chord: return MergeChords(settings); } @@ -110,7 +110,7 @@ private Note MergeNotes(ObjectsMergingSettings settings) return MergeNotes(_objects.Cast(), settings); } - private Rest MergeRests(ObjectsMergingSettings settings) + private Rest MergeRests() { var result = (Rest)_objects.First().Clone(); var lastRest = _objects.Last(); @@ -121,7 +121,6 @@ private Rest MergeRests(ObjectsMergingSettings settings) private Chord MergeChords(ObjectsMergingSettings settings) { - var result = new Chord(); var notesCount = ((Chord)_objects.First()).Notes.Count; return new Chord(Enumerable diff --git a/DryWetMidi/Tools/Quantizer/Quantizer.cs b/DryWetMidi/Tools/Quantizer/Quantizer.cs index 4d51c14a2..bb56ad404 100644 --- a/DryWetMidi/Tools/Quantizer/Quantizer.cs +++ b/DryWetMidi/Tools/Quantizer/Quantizer.cs @@ -349,7 +349,7 @@ private static QuantizedTime FindNearestTime( long[] candidateTimes; int bottomGridTimeIndex; - var bottomGridTime = MathUtilities.GetLastElementBelowThreshold(grid, time, _ => _, out bottomGridTimeIndex); + MathUtilities.GetLastElementBelowThreshold(grid, time, _ => _, out bottomGridTimeIndex); if (bottomGridTimeIndex < 0) { candidateTimes = new[] { grid[0] }; diff --git a/DryWetMidi/Tools/Resizer/Resizer.Resize.cs b/DryWetMidi/Tools/Resizer/Resizer.Resize.cs index 58a496e86..6c28a47c5 100644 --- a/DryWetMidi/Tools/Resizer/Resizer.Resize.cs +++ b/DryWetMidi/Tools/Resizer/Resizer.Resize.cs @@ -167,7 +167,6 @@ public static void Resize(this MidiFile midiFile, double ratio) ThrowIfArgument.IsNull(nameof(midiFile), midiFile); ThrowIfArgument.IsNegative(nameof(ratio), ratio, "Ratio is negative."); - var tempoMap = midiFile.GetTempoMap(); midiFile.GetTrackChunks().Resize(ratio); } diff --git a/DryWetMidi/Tools/Splitter/Splitter.CutPart.cs b/DryWetMidi/Tools/Splitter/Splitter.CutPart.cs index aa10ebc9c..13b58f7b3 100644 --- a/DryWetMidi/Tools/Splitter/Splitter.CutPart.cs +++ b/DryWetMidi/Tools/Splitter/Splitter.CutPart.cs @@ -109,7 +109,7 @@ public static MidiFile CutPart(this MidiFile midiFile, ITimeSpan partStart, ITim using (var slicer = MidiFileSlicer.CreateFromFile(midiFile)) { var startPart = slicer.GetNextSlice(times[0], internalSettings); - var mid = slicer.GetNextSlice(times[1], internalSettings); + slicer.GetNextSlice(times[1], internalSettings); var endPart = slicer.GetNextSlice(Math.Max(times.Last(), midiFile.GetDuration()) + 1, internalSettings); if (internalSettings.PreserveTimes) diff --git a/Utilities/Common/UiUtilities.cs b/Utilities/Common/UiUtilities.cs index 27910e55a..dd8a55eef 100644 --- a/Utilities/Common/UiUtilities.cs +++ b/Utilities/Common/UiUtilities.cs @@ -8,7 +8,7 @@ public static class UiUtilities public static void WriteHello() => WriteLines( Assembly.GetCallingAssembly().GetName().Name, - "2024", + "2023", "Powered by Melanchall's DryWetMIDI library", "====================================================", string.Empty);