Пример #1
0
        private void ImportKitFromFile(DataTreeNodeViewModel kitNode)
        {
            string?file = ViewServices.ShowOpenFileDialog(FileFilters.KitFiles);

            if (file is null)
            {
                return;
            }
            object loaded;

            try
            {
                loaded = ProtoIo.LoadModel(file, Logger);
            }
            catch (Exception ex)
            {
                Logger.LogError($"Error loading {file}", ex);
                return;
            }
            if (!(loaded is Kit kit))
            {
                Logger.LogError("Loaded file was not a kit");
                return;
            }

            if (!kit.Schema.Identifier.Equals(Module.Schema.Identifier))
            {
                Logger.LogError($"Kit was from {kit.Schema.Identifier.Name}; this module is {Module.Schema.Identifier.Name}");
                return;
            }
            Module.ImportKit(kit, kitNode.KitNumber !.Value);
        }
Пример #2
0
 // TODO: Once we have ModuleData cloning, we can just load once.
 public static Module LoadTD27()
 {
     using (var stream = typeof(ModuleSchemaTest).Assembly.GetManifestResourceStream("td27.vdrum"))
     {
         return((Module)ProtoIo.ReadModel(stream));
     }
 }
Пример #3
0
 // TODO: Once we have ModuleData cloning, we can just load once.
 public static Module LoadTD27()
 {
     using (var stream = typeof(ModuleSchemaTest).Assembly.GetManifestResourceStream("td27.vdrum"))
     {
         // TODO: Validate that there are no validation errors via a logger.
         return((Module)ProtoIo.ReadModel(stream, NullLogger.Instance));
     }
 }
Пример #4
0
        private static Module TryLoadModule(string name)
        {
            var    ns           = typeof(ModuleSchemaTest).Namespace;
            string filename     = name.ToLowerInvariant().Replace("-", "") + ".vdrum";
            string resourceName = $"{ns}.{filename}";

            using (var stream = typeof(ModuleSchemaTest).Assembly.GetManifestResourceStream(resourceName))
            {
                if (stream == null)
                {
                    return(null);
                }
                return((Module)ProtoIo.ReadStream(stream));
            }
        }
Пример #5
0
        public Task <int> InvokeAsync(InvocationContext context)
        {
            var      console = context.Console.Out;
            var      file    = context.ParseResult.ValueForOption <string>("file");
            DrumFile proto;

            using (var stream = File.OpenRead(file))
            {
                proto = ProtoIo.ReadDrumFile(stream);
            }
            switch (proto.FileCase)
            {
            case DrumFile.FileOneofCase.Module:
                DumpModule(proto.Module);
                break;

            case DrumFile.FileOneofCase.Kit:
                DumpKit(proto.Kit);
                break;

            case DrumFile.FileOneofCase.ModuleAudio:
                DumpModuleAudio(proto.ModuleAudio);
                break;
            }
            return(Task.FromResult(0));


            void DumpModule(Module module)
            {
                console.WriteLine($"File type: module");
                DumpIdentifier(module.Identifier);
                console.WriteLine("Data segments:");
                DumpDataSegments(module.Containers);
            }

            void DumpKit(Kit kit)
            {
                console.WriteLine($"File type: kit");
                DumpIdentifier(kit.Identifier);
                console.WriteLine($"Kit number: {kit.DefaultKitNumber}");
                console.WriteLine("Data segments:");
                DumpDataSegments(kit.Containers);
            }

            void DumpModuleAudio(ModuleAudio moduleAudio)
            {
                console.WriteLine($"File type: module audio");
                DumpIdentifier(moduleAudio.Identifier);
                console.WriteLine($"Format: {moduleAudio.Format}");
                console.WriteLine($"Duration per instrument: {moduleAudio.DurationPerInstrument}");
                foreach (var capture in moduleAudio.InstrumentCaptures)
                {
                    console.WriteLine($"{(capture.Preset ? "Preset" : "Sample")} {capture.InstrumentId}: {capture.AudioData}");
                }
            }

            void DumpIdentifier(ModuleIdentifier identifier)
            {
                // JSON representation is fine here.
                console.WriteLine($"Identifier: {identifier}");
            }

            void DumpDataSegments(IEnumerable <FieldContainerData> segments)
            {
                foreach (var segment in segments)
                {
                    console.WriteLine($"{segment.Address:x8}: {BitConverter.ToString(segment.Data.ToByteArray())}");
                }
            }
        }
Пример #6
0
        static void Main(string[] args)
        {
            string file = args[0];

            for (int i = 0; i < 10; i++)
            {
                var model = (Module)Timing.DebugConsoleLogTiming("Loaded model", () => ProtoIo.LoadModel(file, NullLogger.Instance));

                var containers = model.Schema.PhysicalRoot.DescendantsAndSelf().OfType <FieldContainer>().ToList();
                Timing.DebugConsoleLogTiming("Populated dictionaries", () => containers.ForEach(fc => fc.GetFieldOrNull("".AsSpan())));
            }
        }
Пример #7
0
 // It's unpleasant having this here, but I'm not sure of the alternative...
 /// <summary>
 /// Reads the given stream as drum data, returning a Kit or a Module depending
 /// on the data within the stream.
 /// </summary>
 public static object ReadStream(Stream stream) => ProtoIo.ReadStream(stream);