Beispiel #1
0
        public static WaveDisplayDataDescriptor <T> Parse(ref ReadOnlySpan <byte> buffer)
        {
            WaveDisplayDataDescriptor <T> descriptor = default;

            ParseHeader(ref buffer, Tag.Span);
            descriptor.Kind = ParseShort(ref buffer);

            descriptor.HeadSize = ParseInt(ref buffer);
            descriptor.TagSize  = ParseInt(ref buffer);
            if (descriptor.HeadSize == 24)
            {
                descriptor.Unknown1 = ParseInt(ref buffer);
            }
            descriptor.DataPoints = ParseWaveDataPoints <T>(ref buffer, out descriptor.Unknown2);

            return(descriptor);
        }
Beispiel #2
0
        public static void ParseFile(ref ReadOnlySpan <byte> file,
                                     Action <MainFileDescriptor> mainFileDescriptorAction = null,
                                     FilePathDescriptorAction filePathDescriptorAction    = null,
                                     CueObjectDescriptorAction cueObjectDescriptorAction  = null,
                                     QuantizedTimeZonesDescriptorAction quantizedTimeZonesDescriptorAction = null,
                                     VbrSeekTableDescriptorAction vbrSeekTableDescriptorAction             = null,
                                     WaveDisplayDataDescriptorAction <ColoredWaveDataPoint> coloredWaveDisplayDataDescriptorAction       = null,
                                     WaveDisplayDataDescriptorAction <NonColoredWaveDataPoint> nonColoredWaveDisplayDataDescriptorAction = null,
                                     UnknownHeaderDescriptorAction unknownHeaderDescriptorAction = null)
        {
            while (!file.IsEmpty)
            {
                var type = PeekType(file);

                if (type.SequenceEqual(MainFileDescriptor.Tag.Span))
                {
                    MainFileDescriptor mainFileDescriptor = MainFileDescriptor.Parse(ref file);
                    mainFileDescriptorAction?.Invoke(mainFileDescriptor);
                }
                else if (type.SequenceEqual(FilePathDescriptor.Tag.Span))
                {
                    FilePathDescriptor filePathDescriptor = FilePathDescriptor.Parse(ref file);
                    filePathDescriptorAction?.Invoke(filePathDescriptor);
                }
                else if (type.SequenceEqual(CueObjectDescriptor.Tag.Span))
                {
                    CueObjectDescriptor cueObjectDescriptor = CueObjectDescriptor.Parse(ref file);
                    cueObjectDescriptorAction?.Invoke(cueObjectDescriptor);
                }
                else if (type.SequenceEqual(QuantizedTimeZonesDescriptor.Tag.Span))
                {
                    QuantizedTimeZonesDescriptor quantizedTimeZonesDescriptor = QuantizedTimeZonesDescriptor.Parse(ref file);
                    quantizedTimeZonesDescriptorAction?.Invoke(quantizedTimeZonesDescriptor);
                }
                else if (type.SequenceEqual(VbrSeekTableDescriptor.Tag.Span))
                {
                    VbrSeekTableDescriptor vbrSeekTableDescriptor = VbrSeekTableDescriptor.Parse(ref file);
                    vbrSeekTableDescriptorAction?.Invoke(vbrSeekTableDescriptor);
                }
                else if (type.StartsWith(WaveDisplayDataDescriptor <bool> .Tag.Span))
                {
                    if (WaveDisplayDataDescriptor <bool> .IsColored(type))
                    {
                        WaveDisplayDataDescriptor <ColoredWaveDataPoint> coloredWaveDisplayDataDescriptor = WaveDisplayDataDescriptor <ColoredWaveDataPoint> .Parse(ref file);

                        coloredWaveDisplayDataDescriptorAction?.Invoke(coloredWaveDisplayDataDescriptor);
                    }
                    else
                    {
                        WaveDisplayDataDescriptor <NonColoredWaveDataPoint> nonColoredWaveDisplayDataDescriptor = WaveDisplayDataDescriptor <NonColoredWaveDataPoint> .Parse(ref file);

                        nonColoredWaveDisplayDataDescriptorAction?.Invoke(nonColoredWaveDisplayDataDescriptor);
                    }
                }
                else
                {
                    UnknownHeaderDescriptor unknownHeaderDescriptor = UnknownHeaderDescriptor.Parse(ref file);
                    // Console.WriteLine("Unknown header: " + unknownHeaderDescriptor.GetHeaderName());
                    unknownHeaderDescriptorAction?.Invoke(unknownHeaderDescriptor);
                }
            }
        }