Ejemplo n.º 1
0
        public MetaData GetMetadata(uint index)
        {
            if (index >= bankData.EntryCount)
            {
                throw new ArgumentOutOfRangeException("index");
            }

            var metadata = new MetaData();

            if ((bankData.Flags & BankDataFlags.Compact) == BankDataFlags.Compact)
            {
                var  entry = compactMetadata[index];
                uint offset, length;

                entry.ComputeLocations(out offset, out length, index, header, bankData, compactMetadata);

                metadata.Duration    = EntryCompact.GetDuration(length, bankData, FindSeekTable(index));
                metadata.LoopStart   = metadata.LoopLength = 0;
                metadata.OffsetBytes = offset;
                metadata.LengthBytes = length;
            }
            else
            {
                var entry = metaData[index];

                metadata.Duration    = entry.FlagsAndDuration.Duration;
                metadata.LoopStart   = entry.LoopRegion.StartSample;
                metadata.LoopLength  = entry.LoopRegion.TotalSamples;
                metadata.OffsetBytes = entry.PlayRegion.Offset;
                metadata.LengthBytes = entry.PlayRegion.Length;
            }

            return(metadata);
        }
Ejemplo n.º 2
0
            public void ComputeLocations(out uint offset, out uint length, uint index, Header header, BankData data, EntryCompact[] entries)
            {
                offset = this.Offset * data.Alignment;

                if (index < (data.EntryCount - 1))
                {
                    length = (entries[index + 1].Offset * data.Alignment) - offset - LengthDeviation;
                }
                else
                {
                    length = header.Segments[SegmentIndex.EntryWaveData].Length - offset - LengthDeviation;
                }
            }