예제 #1
0
        /// <summary>
        /// Returns the frame in a byte array.
        /// </summary>
        /// <returns>The frame in a byte array.</returns>
        public byte[] ToByteArray()
        {
            using (StreamBuffer sb = new StreamBuffer())
            {
                sb.WriteBigEndianInt32(_header);
                sb.Write(_sampleFrameNumberBytes);
                int blockSize = (_header >> 12) & 0xF;
                switch (blockSize)
                {
                    case 0x06:
                        sb.WriteByte((byte)(BlockSize - 1));
                        break;

                    case 0x07:
                        sb.WriteBigEndianInt16((short)(BlockSize - 1));
                        break;
                }
                int samplingRate = (_header >> 8) & 0xF;
                switch (samplingRate)
                {
                    case 0x0C:
                        sb.WriteByte((byte)(SamplingRate / 1000));
                        break;

                    case 0x0D:
                        sb.WriteBigEndianInt16((short)SamplingRate);
                        break;

                    case 0x0E:
                        sb.WriteBigEndianInt16((short)(SamplingRate / 10));
                        break;
                }
                sb.WriteByte((byte)_crc8);

                foreach (FlacSubFrame subFrame in SubFrames)
                    sb.Write(subFrame.ToByteArray());

                sb.WriteBigEndianInt16((short)_crc16);
                return sb.ToByteArray();
            }
        }
예제 #2
0
        /// <inheritdoc/>
        public override byte[] ToByteArray()
        {
            using (StreamBuffer buf = new StreamBuffer())
            {
                buf.WriteString(Name);
                buf.WriteBigEndianInt32(Flags);

                if ((Flags & XingHeaderFlags.FrameCountFlag) != 0)
                    buf.WriteBigEndianInt32(FrameCount);

                if ((Flags & XingHeaderFlags.FileSizeFlag) != 0)
                    buf.WriteBigEndianInt32(FileSize);

                // Extract TOC (Table of Contents) for more accurate seeking
                if ((Flags & XingHeaderFlags.TocFlag) != 0)
                {
                    for (int i = 0; i < 100; i++)
                        buf.WriteByte((byte)Toc[i]);
                }

                if ((Flags & XingHeaderFlags.VbrScaleFlag) != 0)
                    buf.WriteBigEndianInt32(Quality);

                return buf.ToByteArray();
            }
        }
예제 #3
0
 public void WriteByteTest()
 {
     StreamBuffer target = new StreamBuffer(); // TODO: Initialize to an appropriate value
     byte value = 0; // TODO: Initialize to an appropriate value
     target.WriteByte(value);
     Assert.Inconclusive("A method that does not return a value cannot be verified.");
 }
예제 #4
0
        ////------------------------------------------------------------------------------------------------------------------------------
        /// <inheritdoc/>
        /// <remarks>
        /// The extended tags will only be written when <see cref="UseExtendedTag"/> is set to true.
        /// </remarks>
        public byte[] ToByteArray()
        {
            using (StreamBuffer buffer = new StreamBuffer())
            {
                byte[] byteValue;
                if (UseExtendedTag)
                {
                    // TAG+
                    buffer.Write(ExtendedHeaderIdentifierBytes);

                    // Title - write the last 60 bytes
                    byteValue = _encoding.GetBytes(GetExtendedString(_trackTitle ?? String.Empty, 30, 60, true));
                    buffer.Write(byteValue);
                    buffer.WritePadding(0x00, 60 - byteValue.Length);

                    // Artist - write the last 60 bytes
                    byteValue = _encoding.GetBytes(GetExtendedString(_artist ?? String.Empty, 30, 60, true));
                    buffer.Write(byteValue);
                    buffer.WritePadding(0x00, 60 - byteValue.Length);

                    // Album Title - write the last 60 bytes
                    byteValue = _encoding.GetBytes(GetExtendedString(_albumTitle ?? String.Empty, 30, 60, true));
                    buffer.Write(byteValue);
                    buffer.WritePadding(0x00, 60 - byteValue.Length);

                    // Track Speed
                    buffer.WriteByte((byte)_trackSpeed);

                    // Extended Track Genre
                    byteValue = _encoding.GetBytes(ExtendedTrackGenre ?? String.Empty);
                    buffer.Write(byteValue);
                    buffer.WritePadding(0x00, 30 - byteValue.Length);

                    // Start-time
                    long startTimeMinutes = (StartTime.Days * 24 * 60) + (StartTime.Hours * 60) + StartTime.Minutes;
                    long startTimeSeconds = StartTime.Seconds;
                    string startTime = startTimeMinutes.ToString("000") + ":" + startTimeSeconds.ToString("00");
                    byteValue = _encoding.GetBytes(GetTruncatedEncodedString(startTime, 6));
                    buffer.Write(byteValue);

                    // End-time
                    long endTimeMinutes = (EndTime.Days * 24 * 60) + (EndTime.Hours * 60) + EndTime.Minutes;
                    long endTimeSeconds = EndTime.Seconds;
                    string endTime = endTimeMinutes.ToString("000") + ":" + endTimeSeconds.ToString("00");
                    byteValue = _encoding.GetBytes(GetTruncatedEncodedString(endTime, 6));
                    buffer.Write(byteValue);
                }

                // TAG
                buffer.Write(HeaderIdentifierBytes);

                // Track Title
                byteValue = _encoding.GetBytes(GetTruncatedEncodedString(_trackTitle ?? String.Empty, 30));
                buffer.Write(byteValue);
                buffer.WritePadding(0x00, 30 - byteValue.Length);

                // Artist
                byteValue = _encoding.GetBytes(GetTruncatedEncodedString(_artist ?? String.Empty, 30));
                buffer.Write(byteValue);
                buffer.WritePadding(0x00, 30 - byteValue.Length);

                // Album Title
                byteValue = _encoding.GetBytes(GetTruncatedEncodedString(_albumTitle ?? String.Empty, 30));
                buffer.Write(byteValue);
                buffer.WritePadding(0x00, 30 - byteValue.Length);

                // Album Year
                byteValue = _encoding.GetBytes(AlbumYear ?? String.Empty);
                buffer.Write(byteValue);
                buffer.WritePadding(0x00, 4 - byteValue.Length);

                // Track comment
                byteValue = _encoding.GetBytes(TrackComment ?? String.Empty);
                buffer.Write(byteValue);
                buffer.WritePadding(0x00, TrackCommentLength - byteValue.Length);

                // Track Number
                if (Version >= Id3v1Version.Id3v11)
                {
                    buffer.WriteByte(0x00);
                    buffer.WriteByte(TrackNumber);
                }

                // Genre
                buffer.WriteByte((byte)Genre);

                return buffer.ToByteArray();
            }
        }
예제 #5
0
 ////------------------------------------------------------------------------------------------------------------------------------
 /// <summary>
 /// Places the <see cref="LameTag"/> into a byte array.
 /// </summary> 
 /// <returns>A byte array that represents the <see cref="LameTag"/> instance.</returns>
 public byte[] ToByteArray()
 {
     using (StreamBuffer buffer = new StreamBuffer())
     {
         if (Version < 3.09f)
         {
             buffer.WriteString(EncoderVersion, Encoding.ASCII, 20);
         }
         else
         {
             buffer.WriteString(EncoderVersion, Encoding.ASCII, 9);
             buffer.WriteByte((byte)((InfoTagRevision & 0xF0) | (VbrMethod & 0x0F)));
             buffer.WriteByte((byte)LowpassFilterValue);
             buffer.WriteFloat(PeakSignalAmplitude);
             buffer.WriteShort(RadioReplayGain);
             buffer.WriteShort(AudiophileReplayGain);
             buffer.WriteByte((byte)EncodingFlags);
             buffer.WriteByte((byte)BitRate);
             buffer.WriteBytes(EncoderDelays, 3);
             buffer.WriteByte((byte)Misc);
             buffer.WriteByte((byte)Mp3Gain);
             buffer.WriteShort(PresetSurroundInfo);
             buffer.WriteBigEndianInt32(MusicLength);
             buffer.WriteBigEndianInt16(_musicCrc);
             buffer.WriteBigEndianInt16(_infoTagCrc);
         }
         return buffer.ToByteArray();
     }
 }