Exemple #1
0
            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());
                            }
                        }
                    }
                }
            }
Exemple #2
0
            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));
                }
            }
Exemple #3
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();
        }