コード例 #1
0
        private void WriteSuffixComments(Stream outStream)
        {
            var comtChunk  = new DsdChunksContainer(DsdChunk.IdType.COMT);
            var comtSource = GetChunkById(DsdChunk.IdType.COMT);

            var numComments = 3;

            if (comtSource != null)
            {
                numComments += comtSource.Comments.Length;
            }

            comtChunk.WriteUInt16((ushort)numComments);

            PutCommentIntoChunk(comtChunk, new DsdChunk.DsdComment
            {
                Ref       = 0,
                Type      = 3,
                TimeStamp = DateTime.Now,
                Text      = "File was processed in DSDXOVER software crossover by dePhonica sound labs."
            });

            PutCommentIntoChunk(comtChunk, new DsdChunk.DsdComment
            {
                Ref       = 0,
                Type      = 3,
                TimeStamp = DateTime.Now,
                Text      = "(C) 2010-" + DateTime.Now.Year + " dePhonica sound labs."
            });

            PutCommentIntoChunk(comtChunk, new DsdChunk.DsdComment
            {
                Ref       = 0,
                Type      = 3,
                TimeStamp = DateTime.Now,
                Text      = "http://dephonica.com - dePhonica sound labs. official site"
            });

            if (comtSource != null)
            {
                foreach (var dsdComment in comtSource.Comments)
                {
                    PutCommentIntoChunk(comtChunk, dsdComment);
                }
            }

            comtChunk.FlushToStream(outStream);
        }
コード例 #2
0
        private void PutCommentIntoChunk(DsdChunksContainer comtChunk, DsdChunk.DsdComment comment)
        {
            DsdChunksContainer.WriteUInt16(comtChunk.GetStream(), (ushort)comment.TimeStamp.Year);
            DsdChunksContainer.WriteUInt8(comtChunk.GetStream(), (byte)comment.TimeStamp.Month);
            DsdChunksContainer.WriteUInt8(comtChunk.GetStream(), (byte)comment.TimeStamp.Day);
            DsdChunksContainer.WriteUInt8(comtChunk.GetStream(), (byte)comment.TimeStamp.Hour);
            DsdChunksContainer.WriteUInt8(comtChunk.GetStream(), (byte)comment.TimeStamp.Minute);

            DsdChunksContainer.WriteUInt16(comtChunk.GetStream(), comment.Type);
            DsdChunksContainer.WriteUInt16(comtChunk.GetStream(), comment.Ref);

            if ((comment.Text.Length % 2) != 0)
            {
                comment.Text += " ";
            }
            DsdChunksContainer.WriteInt32(comtChunk.GetStream(), comment.Text.Length);
            DsdChunksContainer.WriteIdString(comtChunk.GetStream(), comment.Text);
        }
コード例 #3
0
        private void WriteHeader()
        {
            // DSDIFF signature
            DsdChunksContainer.WriteId(_outStream, DsdChunk.IdType.FRM8);
            DsdChunksContainer.WriteInt64(_outStream, 0);  // Will write correct data size later
            DsdChunksContainer.WriteId(_outStream, DsdChunk.IdType.DSD);

            // File version
            DsdChunksContainer.WriteId(_outStream, DsdChunk.IdType.FVER);
            DsdChunksContainer.WriteInt64(_outStream, 4);
            DsdChunksContainer.WriteUInt32(_outStream, 0x01050000);

            // Properties composed chunk
            var propChunk = new DsdChunksContainer(DsdChunk.IdType.PROP);

            propChunk.WriteId(DsdChunk.IdType.SND);

            // > FS - frequency
            var fsChunk = new DsdChunksContainer(DsdChunk.PropChunk.FS);

            fsChunk.WriteUInt32(2822400);

            // > CHNL - channels
            var chnlChunk = new DsdChunksContainer(DsdChunk.PropChunk.CHNL);

            chnlChunk.WriteUInt16(_channelsCount);

            var chnlId = new[] { "SLFT", "SRGT", "MLFT", "MRGT", "LS", "RS", "C", "LFE",
                                 "C000", "C001", "C002", "C003", "C004", "C005", "C006", "C007", "C008", "C009" };

            for (var n = 0; n < _channelsCount; n++)
            {
                chnlChunk.WriteIdString(chnlId[n]);
            }

            // > CMPR - compression
            var cmprChunk = new DsdChunksContainer(DsdChunk.PropChunk.CMPR);

            cmprChunk.WriteIdString("DSD");

            const string compressorName = "not compressed ";

            cmprChunk.WriteUInt8((byte)compressorName.Length);
            cmprChunk.WriteIdString(compressorName);

            // > ABSS - absolute start time chunk
            var abssChunk = new DsdChunksContainer(DsdChunk.PropChunk.ABSS);

            abssChunk.WriteUInt16(0);
            abssChunk.WriteUInt8(0);
            abssChunk.WriteUInt8(0);
            abssChunk.WriteUInt32(0);

            // > LSCO - loudspeaker configuration
            var lscoChunk = new DsdChunksContainer(DsdChunk.PropChunk.LSCO);

            lscoChunk.WriteUInt16((ushort)(_channelsCount <= 2 ? 0 : 4));

            // << Write all property chunks info container
            propChunk.WriteChunk(fsChunk);
            propChunk.WriteChunk(chnlChunk);
            propChunk.WriteChunk(cmprChunk);
            //propChunk.WriteChunk(abssChunk);
            propChunk.WriteChunk(lscoChunk);

            // Write property chunk info the file
            propChunk.FlushToStream(_outStream);

            // Begin DSD section
            DsdChunksContainer.WriteId(_outStream, DsdChunk.IdType.DSD);
            _dsdLengthPosition = _outStream.Position;
            DsdChunksContainer.WriteInt64(_outStream, 0);
        }