public void SerializeMidiFile() { var path = Directory.GetCurrentDirectory() + "/Assets/Plugins/jp.goma_recorder.midity/Tests/Runtime/Sample.mid"; using (var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read)) { var memoryStream = new MemoryStream(); fileStream.CopyTo(memoryStream); var midiFile1 = new MidiDeserializer(memoryStream, CodeName).Load(); using (memoryStream) { MidiSerializer.SerializeFile(midiFile1, memoryStream); var midiFile2 = new MidiDeserializer(memoryStream, CodeName).Load(); Assert.That(midiFile1.Tracks.Count == midiFile2.Tracks.Count); for (var i = 0; i < midiFile1.Tracks.Count; i++) { Assert.That(midiFile1.Tracks[i].Events.Count == midiFile2.Tracks[i].Events.Count); for (var j = 0; j < midiFile1.Tracks[i].Events.Count; j++) { Assert.That( midiFile1.Tracks[i].Events[j].GetType() == midiFile2.Tracks[i].Events[j].GetType()); } } } } }
private static T ReDeserialize <T>(T mTrkEvent) where T : MTrkEvent { var encoding = Encoding.GetEncoding(CodeName); using (var stream = new MemoryStream()) { MidiSerializer.SerializeEvent(mTrkEvent, encoding, stream, 0); stream.Seek(0, SeekOrigin.Begin); var deserializer = new MidiDeserializer(stream, encoding); byte status = 0; return((T)deserializer.ReadEvent(ref status, 0)); } }
public override void OnImportAsset(UnityEditor.AssetImporters.AssetImportContext context) { var assetName = Path.GetFileNameWithoutExtension(assetPath); MidiFile midiFile; byte[] trackBytes; // Main MIDI file asset using (var stream = new FileStream(context.assetPath, FileMode.Open, FileAccess.Read)) { var deserializer = new MidiDeserializer(stream, _characterCodeName); (midiFile, trackBytes) = deserializer.LoadTrackBytes(); } var fileAsset = MidiFileAsset.Instantiate(midiFile, assetName, trackBytes); fileAsset.name = assetName; context.AddObjectToAsset("MidiFileAsset", fileAsset); context.SetMainObject(fileAsset); var trackCount = midiFile.Tracks.Count; var trackAssets = new MidiTrackAsset[trackCount]; for (var i = 0; i < trackCount; i++) { trackAssets[i] = MidiTrackAsset.Instantiate(fileAsset, i); trackAssets[i].name = $"{i}:{midiFile.Tracks[i].Name}"; } // Contained tracks foreach (var track in trackAssets) { context.AddObjectToAsset(track.name, track); } _midiFileAsset = fileAsset; AssetDatabase.ImportAsset(assetPath); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); }