Skip to content

Commit

Permalink
MIDI file converter fixes for type 1 to type 1 conversions
Browse files Browse the repository at this point in the history
  • Loading branch information
markheath committed Feb 12, 2016
1 parent a90d18d commit 097737f
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 18 deletions.
4 changes: 2 additions & 2 deletions MidiFileConverter/AboutForm.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

28 changes: 15 additions & 13 deletions MidiFileConverter/MidiConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using NAudio.Utils;
using NAudio.Midi;
Expand Down Expand Up @@ -191,7 +192,7 @@ private void ConvertMidi(MidiFile midiFile, string target, string[] context)
if (midiFile.FileFormat == 0)
outputTrackCount = 2;
else
outputTrackCount = midiFile.Tracks;
outputTrackCount = Math.Max(midiFile.Tracks,2); // at least two tracks because we'll move notes onto track 1 always
}


Expand Down Expand Up @@ -327,11 +328,8 @@ private void ConvertMidi(MidiFile midiFile, string target, string[] context)
{
if (outputFileType == 1)
{
// if we are converting type 0 to type 1 and recreating end markers,
if (midiFile.FileFormat == 0)
{
AppendEndMarker(events[1]);
}
// make sure track 1 has an end track marker
AppendEndMarker(events[1]);
}
// make sure that track zero has an end track marker
AppendEndMarker(events[0]);
Expand Down Expand Up @@ -397,20 +395,24 @@ private void ConvertMidi(MidiFile midiFile, string target, string[] context)

private bool HasNotes(IList<MidiEvent> midiEvents)
{
foreach (MidiEvent midiEvent in midiEvents)
{
if (midiEvent.CommandCode == MidiCommandCode.NoteOn)
return true;
}
return false;
return midiEvents.Any(midiEvent => midiEvent.CommandCode == MidiCommandCode.NoteOn);
}

private bool IsEndTrack(MidiEvent midiEvent)
{
var meta = midiEvent as MetaEvent;
return meta?.MetaEventType == MetaEventType.EndTrack;
}

private void AppendEndMarker(IList<MidiEvent> eventList)
{
long absoluteTime = 0;

if (eventList.Count > 0)
absoluteTime = eventList[eventList.Count - 1].AbsoluteTime;
eventList.Add(new MetaEvent(MetaEventType.EndTrack, 0, absoluteTime));

if (!IsEndTrack(eventList.LastOrDefault()))
eventList.Add(new MetaEvent(MetaEventType.EndTrack, 0, absoluteTime));
}

private string CreateEzdName(string[] context)
Expand Down
8 changes: 5 additions & 3 deletions MidiFileConverter/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Mark Heath")]
[assembly: AssemblyProduct("MIDI File Converter")]
[assembly: AssemblyCopyright("Copyright © Mark Heath 2007")]
[assembly: AssemblyCopyright("Copyright © Mark Heath 2016")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

Expand All @@ -29,8 +29,8 @@
// Build Number
// Revision
//
[assembly: AssemblyVersion("0.3.10.0")]
[assembly: AssemblyFileVersion("0.3.10.0")]
[assembly: AssemblyVersion("0.3.11.0")]
[assembly: AssemblyFileVersion("0.3.11.0")]

// build 1 29 Oct 2006
// build 1 is experimental
Expand Down Expand Up @@ -73,6 +73,8 @@
// and converting from type 0 to type 1
// build 10 5 Apr 2007
// updated to use new MidiEventCollection
// build 11 12 Feb 2016
// ensuring end track markers persent converting type 1 to 1

// revamp help for advanced options

Expand Down

0 comments on commit 097737f

Please sign in to comment.