From 023ec17c0878b0e26807d92b2f64eca3159ca47b Mon Sep 17 00:00:00 2001 From: gocha Date: Thu, 26 Jun 2014 17:54:02 +0900 Subject: [PATCH] Migrate from --- src/MidiSplit/FileReaderFactory.cs | 55 ++++ src/MidiSplit/MidiFileData.cs | 11 + src/MidiSplit/MidiFileSerializer.cs | 68 +++++ src/MidiSplit/MidiSplit.cs | 279 ++++++++++++++++++ src/MidiSplit/MidiSplit.csproj | 82 +++++ src/MidiSplit/MidiSplit.sln | 20 ++ src/MidiSplit/Properties/AssemblyInfo.cs | 36 +++ .../CannedBytes.Midi.Components.dll | Bin 0 -> 23552 bytes src/_SharedAssemblies/CannedBytes.Midi.IO.dll | Bin 0 -> 14336 bytes .../CannedBytes.Midi.Message.dll | Bin 0 -> 16384 bytes .../CannedBytes.Midi.Xml.dll | Bin 0 -> 65024 bytes src/_SharedAssemblies/CannedBytes.Midi.dll | Bin 0 -> 55808 bytes .../CannedBytes/CannedBytes.IO.dll | Bin 0 -> 17920 bytes .../CannedBytes/CannedBytes.Media.IO.dll | Bin 0 -> 71168 bytes .../CannedBytes/CannedBytes.Media.dll | Bin 0 -> 15872 bytes .../CannedBytes/CannedBytes.dll | Bin 0 -> 26624 bytes src/_SharedAssemblies/CompilationNote.txt | 12 + .../midinet-AcceptAnyControlChange.patch | 22 ++ .../midinet-MidiFileSysExWriterFix.patch | 37 +++ 19 files changed, 622 insertions(+) create mode 100644 src/MidiSplit/FileReaderFactory.cs create mode 100644 src/MidiSplit/MidiFileData.cs create mode 100644 src/MidiSplit/MidiFileSerializer.cs create mode 100644 src/MidiSplit/MidiSplit.cs create mode 100644 src/MidiSplit/MidiSplit.csproj create mode 100644 src/MidiSplit/MidiSplit.sln create mode 100644 src/MidiSplit/Properties/AssemblyInfo.cs create mode 100644 src/_SharedAssemblies/CannedBytes.Midi.Components.dll create mode 100644 src/_SharedAssemblies/CannedBytes.Midi.IO.dll create mode 100644 src/_SharedAssemblies/CannedBytes.Midi.Message.dll create mode 100644 src/_SharedAssemblies/CannedBytes.Midi.Xml.dll create mode 100644 src/_SharedAssemblies/CannedBytes.Midi.dll create mode 100644 src/_SharedAssemblies/CannedBytes/CannedBytes.IO.dll create mode 100644 src/_SharedAssemblies/CannedBytes/CannedBytes.Media.IO.dll create mode 100644 src/_SharedAssemblies/CannedBytes/CannedBytes.Media.dll create mode 100644 src/_SharedAssemblies/CannedBytes/CannedBytes.dll create mode 100644 src/_SharedAssemblies/CompilationNote.txt create mode 100644 src/_SharedAssemblies/midinet-AcceptAnyControlChange.patch create mode 100644 src/_SharedAssemblies/midinet-MidiFileSysExWriterFix.patch diff --git a/src/MidiSplit/FileReaderFactory.cs b/src/MidiSplit/FileReaderFactory.cs new file mode 100644 index 0000000..f15099b --- /dev/null +++ b/src/MidiSplit/FileReaderFactory.cs @@ -0,0 +1,55 @@ +using System.ComponentModel.Composition.Hosting; +using CannedBytes.ComponentModel.Composition; +using CannedBytes.Media.IO; +using CannedBytes.Media.IO.Services; +using CannedBytes.Midi.IO; + +namespace MidiSplit +{ + internal class FileReaderFactory + { + public static FileChunkReader CreateReader(string filePath) + { + var context = CreateFileContextForReading(filePath); + + var reader = context.CompositionContainer.CreateFileChunkReader(); + + return reader; + } + + public static ChunkFileContext CreateFileContextForReading(string filePath) + { + var context = new ChunkFileContext(); + context.ChunkFile = ChunkFileInfo.OpenRead(filePath); + + context.CompositionContainer = CreateCompositionContextForReading(); + + return context; + } + + public static CompositionContainer CreateCompositionContextForReading() + { + var factory = new CompositionContainerFactory(); + + factory.AddMarkedTypesInAssembly(null, typeof(IFileChunkHandler)); + // add midi exports + factory.AddMarkedTypesInAssembly(typeof(MTrkChunkHandler).Assembly, typeof(IFileChunkHandler)); + + // note that Midi files use big endian. + // and the chunks are not aligned. + factory.AddTypes( + typeof(BigEndianNumberReader), + typeof(SizePrefixedStringReader), + typeof(ChunkTypeFactory), + typeof(FileChunkHandlerManager)); + + var container = factory.CreateNew(); + + var chunkFactory = container.GetService(); + // add midi chunks + chunkFactory.AddChunksFrom(typeof(MTrkChunkHandler).Assembly, true); + + return container; + } + } +} \ No newline at end of file diff --git a/src/MidiSplit/MidiFileData.cs b/src/MidiSplit/MidiFileData.cs new file mode 100644 index 0000000..60c94da --- /dev/null +++ b/src/MidiSplit/MidiFileData.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using CannedBytes.Midi.IO; + +namespace MidiSplit +{ + class MidiFileData + { + public MThdChunk Header; + public IEnumerable Tracks; + } +} \ No newline at end of file diff --git a/src/MidiSplit/MidiFileSerializer.cs b/src/MidiSplit/MidiFileSerializer.cs new file mode 100644 index 0000000..58379c7 --- /dev/null +++ b/src/MidiSplit/MidiFileSerializer.cs @@ -0,0 +1,68 @@ +using System.Collections.Generic; +using System.ComponentModel.Composition.Hosting; +using System.Linq; +using CannedBytes; +using CannedBytes.ComponentModel.Composition; +using CannedBytes.Media.IO; +using CannedBytes.Media.IO.Services; +using CannedBytes.Midi.IO; + +namespace MidiSplit +{ + class MidiFileSerializer : DisposableBase + { + private ChunkFileContext context = new ChunkFileContext(); + + public MidiFileSerializer(string filePath) + { + this.context.ChunkFile = ChunkFileInfo.OpenWrite(filePath); + this.context.CompositionContainer = CreateCompositionContainer(); + } + + private CompositionContainer CreateCompositionContainer() + { + var factory = new CompositionContainerFactory(); + var midiIOAssembly = typeof(MTrkChunkHandler).Assembly; + + // add basic file handlers + factory.AddMarkedTypesInAssembly(null, typeof(IFileChunkHandler)); + + // add midi file handlers + factory.AddMarkedTypesInAssembly(midiIOAssembly, typeof(IFileChunkHandler)); + + // note that Midi files use big endian. + // and the chunks are not aligned. + factory.AddTypes( + typeof(BigEndianNumberWriter), + typeof(SizePrefixedStringWriter), + typeof(ChunkTypeFactory), + typeof(FileChunkHandlerManager)); + + var container = factory.CreateNew(); + + var chunkFactory = container.GetService(); + + // add midi chunks + chunkFactory.AddChunksFrom(midiIOAssembly, true); + + return container; + } + + public void Serialize(MidiFileData midiFileData) + { + FileChunkWriter writer = new FileChunkWriter(this.context); + + writer.WriteNextChunk(midiFileData.Header); + + foreach (MTrkChunk trackChunk in midiFileData.Tracks) + { + writer.WriteNextChunk(trackChunk); + } + } + + protected override void Dispose(DisposeObjectKind disposeKind) + { + this.context.Dispose(); + } + } +} diff --git a/src/MidiSplit/MidiSplit.cs b/src/MidiSplit/MidiSplit.cs new file mode 100644 index 0000000..14a31ae --- /dev/null +++ b/src/MidiSplit/MidiSplit.cs @@ -0,0 +1,279 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Text; +using System.IO; +using CannedBytes.Media.IO; +using CannedBytes.Midi; +using CannedBytes.Midi.IO; +using CannedBytes.Midi.Message; + +namespace MidiSplit +{ + public class MidiSplit + { + public static int Main(string[] args) + { + try + { + string midiInFilePath = null; + string midiOutFilePath = null; + + // parse argument + if (args.Length == 0) + { + Console.WriteLine("Usage: MidiSplit input.mid output.mid"); + return 1; + } + else if (args.Length == 1) + { + midiInFilePath = args[0]; + midiOutFilePath = Path.Combine( + Path.GetDirectoryName(midiInFilePath), + Path.GetFileNameWithoutExtension(midiInFilePath) + "-split.mid" + ); + } + else if (args.Length == 2) + { + midiInFilePath = args[0]; + midiOutFilePath = args[1]; + } + else + { + Console.WriteLine("too many arguments"); + return 1; + } + + // for debug... + Console.WriteLine("Reading midi file: " + midiInFilePath); + Console.WriteLine("Output midi file: " + midiOutFilePath); + + MidiFileData midiInData = MidiSplit.ReadMidiFile(midiInFilePath); + MidiFileData midiOutData = MidiSplit.SplitMidiFile(midiInData); + using (MidiFileSerializer midiFileSerializer = new MidiFileSerializer(midiOutFilePath)) + { + midiFileSerializer.Serialize(midiOutData); + } + return 0; + } + catch (Exception e) + { + Console.WriteLine(e.ToString()); + return 1; + } + } + + static MidiFileData SplitMidiFile(MidiFileData midiInData) + { + MidiFileData midiOutData = new MidiFileData(); + midiOutData.Header = new MThdChunk(); + midiOutData.Header.Format = (ushort)MidiFileFormat.MultipleTracks; + midiOutData.Header.TimeDivision = midiInData.Header.TimeDivision; + + IList tracks = new List(); + foreach (MTrkChunk midiTrackIn in midiInData.Tracks) + { + foreach (MTrkChunk midiTrackOut in MidiSplit.SplitMidiTrack(midiTrackIn)) + { + tracks.Add(midiTrackOut); + } + } + midiOutData.Tracks = tracks; + midiOutData.Header.NumberOfTracks = (ushort)tracks.Count; + return midiOutData; + } + + protected class MTrkChunkWithInstrInfo + { + public int? MidiChannel; + public int? ProgramNumber; + public MTrkChunk Track; + } + + static IEnumerable SplitMidiTrack(MTrkChunk midiTrackIn) + { + const int MaxChannels = 16; + const int MaxNotes = 128; + int?[] currentProgramNumber = new int?[MaxChannels]; + IList trackInfos = new List(); + + // create default output track + trackInfos.Add(new MTrkChunkWithInstrInfo()); + trackInfos[0].Track = new MTrkChunk(); + trackInfos[0].Track.Events = new List(); + + // dispatch events from beginning + // (events must be sorted by absolute time) + MidiFileEvent midiLastEvent = null; + MTrkChunk[,] tracksWithMissingNoteOff = new MTrkChunk[MaxChannels, MaxNotes]; + foreach (MidiFileEvent midiEvent in midiTrackIn.Events) + { + MTrkChunk targetTrack = null; + + // save the last event to verify end of track + midiLastEvent = midiEvent; + + if (midiEvent.Message is MidiChannelMessage) + { + MidiChannelMessage channelMessage = midiEvent.Message as MidiChannelMessage; + + // if this is the first channel message + if (trackInfos[0].MidiChannel == null) + { + // set the channel number to the first track + trackInfos[0].MidiChannel = channelMessage.MidiChannel; + } + + // update current patch # + if (channelMessage.Command == MidiChannelCommand.ProgramChange) + { + currentProgramNumber[channelMessage.MidiChannel] = channelMessage.Parameter1; + } + + // the location to put expected note-off event needs to be determined by note-on location + bool midiEventIsNoteOff = (channelMessage.Command == MidiChannelCommand.NoteOff || + (channelMessage.Command == MidiChannelCommand.NoteOn && channelMessage.Parameter2 == 0)); + if (midiEventIsNoteOff && tracksWithMissingNoteOff[channelMessage.MidiChannel, channelMessage.Parameter1] != null) + { + targetTrack = tracksWithMissingNoteOff[channelMessage.MidiChannel, channelMessage.Parameter1]; + tracksWithMissingNoteOff[channelMessage.MidiChannel, channelMessage.Parameter1] = null; + } + else + { + // search target track + int trackIndex; + for (trackIndex = 0; trackIndex < trackInfos.Count; trackIndex++) + { + MTrkChunkWithInstrInfo trackInfo = trackInfos[trackIndex]; + + if (trackInfo.MidiChannel == channelMessage.MidiChannel && + (trackInfo.ProgramNumber == null || + trackInfo.ProgramNumber == currentProgramNumber[channelMessage.MidiChannel])) + { + // set program number (we need to set it for the first time) + trackInfo.ProgramNumber = currentProgramNumber[channelMessage.MidiChannel]; + + // target track is determined, exit the loop + targetTrack = trackInfo.Track; + break; + } + else if (trackInfo.MidiChannel > channelMessage.MidiChannel) + { + // track list is sorted by channel number + // therefore, the rest isn't what we are searching for + // a new track needs to be assigned to the current index + break; + } + } + + // add a new track if necessary + if (targetTrack == null) + { + MTrkChunkWithInstrInfo newTrackInfo = new MTrkChunkWithInstrInfo(); + newTrackInfo.Track = new MTrkChunk(); + newTrackInfo.Track.Events = new List(); + newTrackInfo.MidiChannel = channelMessage.MidiChannel; + newTrackInfo.ProgramNumber = currentProgramNumber[channelMessage.MidiChannel]; + trackInfos.Insert(trackIndex, newTrackInfo); + targetTrack = newTrackInfo.Track; + } + + // remember new note, to know appropriate note-off location + if (channelMessage.Command == MidiChannelCommand.NoteOn && channelMessage.Parameter2 != 0) + { + tracksWithMissingNoteOff[channelMessage.MidiChannel, channelMessage.Parameter1] = targetTrack; + } + } + } + else + { + targetTrack = trackInfos[0].Track; + } + + // add event to the list, if it's not end of track + if (!(midiEvent.Message is MidiMetaMessage) || + (midiEvent.Message as MidiMetaMessage).MetaType != MidiMetaType.EndOfTrack) + { + IList targetEventList = targetTrack.Events as IList; + targetEventList.Add(midiEvent); + } + } + + // determine the location of end of track + long absoluteTimeOfEndOfTrack = 0; + if (midiLastEvent != null) + { + absoluteTimeOfEndOfTrack = midiLastEvent.AbsoluteTime; + } + + // construct the track list without extra info + IList tracks = new List(); + foreach (MTrkChunkWithInstrInfo trackInfo in trackInfos) + { + tracks.Add(trackInfo.Track); + } + + // fix some conversion problems + foreach (MTrkChunk track in tracks) + { + // fixup delta time artifically... + midiLastEvent = null; + foreach (MidiFileEvent midiEvent in track.Events) + { + midiEvent.DeltaTime = midiEvent.AbsoluteTime - (midiLastEvent != null ? midiLastEvent.AbsoluteTime : 0); + midiLastEvent = midiEvent; + } + + // add end of track manually + MidiFileEvent endOfTrack = new MidiFileEvent(); + endOfTrack.AbsoluteTime = absoluteTimeOfEndOfTrack; + endOfTrack.DeltaTime = absoluteTimeOfEndOfTrack - midiLastEvent.AbsoluteTime; + endOfTrack.Message = new MidiMetaMessage(MidiMetaType.EndOfTrack, new byte[] { }); + (track.Events as IList).Add(endOfTrack); + } + + return tracks; + } + + static MidiFileData ReadMidiFile(string filePath) + { + MidiFileData data = new MidiFileData(); + FileChunkReader reader = FileReaderFactory.CreateReader(filePath); + + data.Header = reader.ReadNextChunk() as MThdChunk; + + List tracks = new List(); + + for (int i = 0; i < data.Header.NumberOfTracks; i++) + { + try + { + var track = reader.ReadNextChunk() as MTrkChunk; + + if (track != null) + { + tracks.Add(track); + } + else + { + Console.WriteLine(String.Format("Track '{0}' was not read successfully.", i + 1)); + } + } + catch (Exception e) + { + reader.SkipCurrentChunk(); + + ConsoleColor prevConsoleColor = Console.ForegroundColor; + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine("Failed to read track: " + (i + 1)); + Console.WriteLine(e); + Console.ForegroundColor = prevConsoleColor; + } + } + + data.Tracks = tracks; + return data; + } + } +} \ No newline at end of file diff --git a/src/MidiSplit/MidiSplit.csproj b/src/MidiSplit/MidiSplit.csproj new file mode 100644 index 0000000..b8ac1de --- /dev/null +++ b/src/MidiSplit/MidiSplit.csproj @@ -0,0 +1,82 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {B20B545B-6BB1-4C0C-BBDD-06E3E61CECA2} + Exe + Properties + MidiSplit + MidiSplit + v4.0 + Client + 512 + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\_SharedAssemblies\CannedBytes\CannedBytes.dll + + + ..\_SharedAssemblies\CannedBytes\CannedBytes.IO.dll + + + ..\_SharedAssemblies\CannedBytes\CannedBytes.Media.IO.dll + + + ..\_SharedAssemblies\CannedBytes.Midi.dll + + + ..\_SharedAssemblies\CannedBytes.Midi.Components.dll + + + ..\_SharedAssemblies\CannedBytes.Midi.IO.dll + + + ..\_SharedAssemblies\CannedBytes.Midi.Message.dll + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/MidiSplit/MidiSplit.sln b/src/MidiSplit/MidiSplit.sln new file mode 100644 index 0000000..30fcabb --- /dev/null +++ b/src/MidiSplit/MidiSplit.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MidiSplit", "MidiSplit.csproj", "{B20B545B-6BB1-4C0C-BBDD-06E3E61CECA2}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x86 = Debug|x86 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B20B545B-6BB1-4C0C-BBDD-06E3E61CECA2}.Debug|x86.ActiveCfg = Debug|x86 + {B20B545B-6BB1-4C0C-BBDD-06E3E61CECA2}.Debug|x86.Build.0 = Debug|x86 + {B20B545B-6BB1-4C0C-BBDD-06E3E61CECA2}.Release|x86.ActiveCfg = Release|x86 + {B20B545B-6BB1-4C0C-BBDD-06E3E61CECA2}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/src/MidiSplit/Properties/AssemblyInfo.cs b/src/MidiSplit/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..8eb2177 --- /dev/null +++ b/src/MidiSplit/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("CannedBytes.Midi.MidiFilePlayer")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("CannedBytes.Midi.MidiFilePlayer")] +[assembly: AssemblyCopyright("Copyright © 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c899da5b-38e8-4c4a-8c66-6165880d2913")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/_SharedAssemblies/CannedBytes.Midi.Components.dll b/src/_SharedAssemblies/CannedBytes.Midi.Components.dll new file mode 100644 index 0000000000000000000000000000000000000000..a343890f4dc0e14a74a43bdbb141cf5ea983af51 GIT binary patch literal 23552 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 S8Xj-`V^#3~>-B%r0{;ii=%l3p literal 0 HcmV?d00001 diff --git a/src/_SharedAssemblies/CannedBytes.Midi.IO.dll b/src/_SharedAssemblies/CannedBytes.Midi.IO.dll new file mode 100644 index 0000000000000000000000000000000000000000..706bcc1aa4a5abd20ac72a3427cb9c7f4474189e GIT binary patch literal 14336 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 literal 0 HcmV?d00001 diff --git a/src/_SharedAssemblies/CannedBytes.Midi.Message.dll b/src/_SharedAssemblies/CannedBytes.Midi.Message.dll new file mode 100644 index 0000000000000000000000000000000000000000..2a0654ab6566ea0156f8f3f60d60c7af0aad14c1 GIT binary patch literal 16384 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 b=_eijUnaPD!SAT8!)qu1@9+PA75M)En6)eJ literal 0 HcmV?d00001 diff --git a/src/_SharedAssemblies/CannedBytes.Midi.dll b/src/_SharedAssemblies/CannedBytes.Midi.dll new file mode 100644 index 0000000000000000000000000000000000000000..9cb1592a0713b1f66139c2f124ae06e99fcf59a2 GIT binary patch literal 55808 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 literal 0 HcmV?d00001 diff --git a/src/_SharedAssemblies/CannedBytes/CannedBytes.Media.IO.dll b/src/_SharedAssemblies/CannedBytes/CannedBytes.Media.IO.dll new file mode 100644 index 0000000000000000000000000000000000000000..6df48420f69ebd2b2674eab9a8f78ce2eb486866 GIT binary patch literal 71168 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 RB8+RUz9i&thW`gG@b6?Pgb@G$ literal 0 HcmV?d00001 diff --git a/src/_SharedAssemblies/CannedBytes/CannedBytes.Media.dll b/src/_SharedAssemblies/CannedBytes/CannedBytes.Media.dll new file mode 100644 index 0000000000000000000000000000000000000000..2120c5e8c5566014611c423af7b28b9f2f212e68 GIT binary patch literal 15872 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 AIRF3v literal 0 HcmV?d00001 diff --git a/src/_SharedAssemblies/CannedBytes/CannedBytes.dll b/src/_SharedAssemblies/CannedBytes/CannedBytes.dll new file mode 100644 index 0000000000000000000000000000000000000000..73ba280ad4b6b2fdc1e52ac5d26a5a72d011ae3a GIT binary patch literal 26624 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 literal 0 HcmV?d00001 diff --git a/src/_SharedAssemblies/CompilationNote.txt b/src/_SharedAssemblies/CompilationNote.txt new file mode 100644 index 0000000..99368db --- /dev/null +++ b/src/_SharedAssemblies/CompilationNote.txt @@ -0,0 +1,12 @@ + +MidiSplit uses MIDI.NET C# library +http://midinet.codeplex.com/ + +I encountered a few problems of MIDI.NET during the development of MidiSplit. +Therefore, I modified the library source code, and recompiled them. +Changes are written in *.patch file. They are small, but important. + +How to build MIDI.NET is explained in VST.NET wiki page. +http://vstnet.codeplex.com/wikipage?title=Building%20the%20Source%20Code +VST.NET is another project by the author of MIDI.NET. +Both they have similar structure, and the explanation is adaptable to MIDI.NET. diff --git a/src/_SharedAssemblies/midinet-AcceptAnyControlChange.patch b/src/_SharedAssemblies/midinet-AcceptAnyControlChange.patch new file mode 100644 index 0000000..0d001db --- /dev/null +++ b/src/_SharedAssemblies/midinet-AcceptAnyControlChange.patch @@ -0,0 +1,22 @@ +--- Code/CannedBytes.Midi.Message/MidiControllerMessage.cs.bak 2013-01-05 05:47:04.359060700 +0900 ++++ Code/CannedBytes.Midi.Message/MidiControllerMessage.cs 2013-01-26 20:06:30.659296900 +0900 +@@ -24,11 +24,14 @@ + "Cannot construct a MidiControllerMessage instance other than MidiChannelCommand.Controller.", "data"); + } + +- if (!Enum.IsDefined(typeof(MidiControllerType), (int)Parameter1)) +- { +- throw new ArgumentException( +- "Invalid type of controller specified in data.", "data"); +- } ++ // gocha: ++ // Even if it's not a well-known controller type, it's still a valid midi message. ++ // I refuse this error check, to accept more MIDI file. ++ //if (!Enum.IsDefined(typeof(MidiControllerType), (int)Parameter1)) ++ //{ ++ // throw new ArgumentException( ++ // "Invalid type of controller specified in data.", "data"); ++ //} + } + + /// diff --git a/src/_SharedAssemblies/midinet-MidiFileSysExWriterFix.patch b/src/_SharedAssemblies/midinet-MidiFileSysExWriterFix.patch new file mode 100644 index 0000000..52123ca --- /dev/null +++ b/src/_SharedAssemblies/midinet-MidiFileSysExWriterFix.patch @@ -0,0 +1,37 @@ +--- Code/CannedBytes.Midi.IO/MidiFileStreamWriter.cs 2013-01-26 23:32:57.612790100 +0900 ++++ Code/CannedBytes.Midi.IO/MidiFileStreamWriter.cs 2013-01-27 08:22:14.736562200 +0900 +@@ -116,11 +116,30 @@ + + this.WriteVariableLength((uint)deltaTime); + +- // length of data +- this.WriteVariableLength((uint)data.Length); ++ if (data.Length > 0 && data[0] == 0xF0) ++ { ++ // sysex marker ++ this.writer.Write((byte)0xF0); + +- // meta data +- this.writer.Write(data); ++ // length of data ++ this.WriteVariableLength((uint)(data.Length - 1)); ++ ++ // meta data ++ byte[] dataTrimmed = new byte[data.Length - 1]; ++ Array.Copy(data, 1, dataTrimmed, 0, data.Length - 1); ++ this.writer.Write(dataTrimmed); ++ } ++ else ++ { ++ // sysex continuation marker ++ this.writer.Write((byte)0xF7); ++ ++ // length of data ++ this.WriteVariableLength((uint)data.Length); ++ ++ // meta data ++ this.writer.Write(data); ++ } + } + + ///