コード例 #1
0
ファイル: VorbisTag.cs プロジェクト: skolmer/atldotnet
        protected override int write(TagData tag, BinaryWriter w, string zone)
        {
            long   counterPos;
            uint   counter = 0;
            string vendor;

            if (AdditionalFields.ContainsKey(VENDOR_METADATA_ID))
            {
                vendor = AdditionalFields[VENDOR_METADATA_ID];
            }
            else
            {
                // Even when no existing field, vendor field is mandatory in OGG structure
                // => a file with no vendor is a FLAC file
                vendor = VENDOR_DEFAULT_FLAC;
            }

            w.Write((uint)vendor.Length);
            w.Write(Encoding.UTF8.GetBytes(vendor));

            counterPos = w.BaseStream.Position;
            w.Write((uint)0); // Tag counter placeholder to be rewritten in a few lines

            counter = writeFrames(tag, w);

            if (writeMetadataFramingBit)
            {
                w.Write((byte)1);                          // Framing bit (mandatory for OGG container)
            }
            // PADDING MANAGEMENT
            // Write the remaining padding bytes, if any detected during initial reading
            if (managePadding)
            {
                long paddingSizeToWrite;
                if (tag.PaddingSize > -1)
                {
                    paddingSizeToWrite = tag.PaddingSize;
                }
                else
                {
                    paddingSizeToWrite = TrackUtils.ComputePaddingSize(initialPaddingOffset, initialPaddingSize, initialPaddingOffset, w.BaseStream.Position);
                }
                if (paddingSizeToWrite > 0)
                {
                    for (int i = 0; i < paddingSizeToWrite; i++)
                    {
                        w.Write((byte)0);
                    }
                }
            }

            long finalPos = w.BaseStream.Position;

            w.BaseStream.Seek(counterPos, SeekOrigin.Begin);
            w.Write(counter);
            w.BaseStream.Seek(finalPos, SeekOrigin.Begin);

            return((int)counter);
        }
コード例 #2
0
ファイル: FLAC.cs プロジェクト: iaingoodhew/atldotnet
        private WriteResult writePaddingBlock(BinaryWriter w, long cumulativeDelta)
        {
            long paddingSizeToWrite = TrackUtils.ComputePaddingSize(initialPaddingOffset, initialPaddingSize, -cumulativeDelta);

            if (paddingSizeToWrite > 0)
            {
                w.Write(META_PADDING);
                w.Write(StreamUtils.EncodeBEUInt24((uint)paddingSizeToWrite));
                for (int i = 0; i < paddingSizeToWrite; i++)
                {
                    w.Write((byte)0);
                }
                return(new WriteResult(WriteMode.REPLACE, 1));
            }
            else
            {
                return(new WriteResult(WriteMode.REPLACE, 0));
            }
        }