예제 #1
0
        public override byte[] GetBytes(ID3v2TagVersion tagVersion)
        {
            if (Items.Count == 0)
            {
                return(new byte[0]);
            }

            // Set TextEncoding to Unicode/UTF8 if required
            if (TextEncoding == EncodingType.ISO88591)
            {
                foreach (ILanguageItem languageItem in Items)
                {
                    byte[] languageCodeData = ID3v2Utils.GetStringBytes(tagVersion, TextEncoding, languageItem.LanguageCode, true);
                    this.RequiresFix(tagVersion, languageItem.LanguageCode, languageCodeData);
                }
            }

            using (MemoryStream frameData = new MemoryStream())
            {
                frameData.WriteByte((byte)TextEncoding);
                bool isTerminated = true; //(tagVersion == TagVersion.ID3v24);
                for (int i = 0; i < Items.Count; i++)
                {
                    ILanguageItem languageItem = Items[i];
                    if (i == Items.Count - 1)
                    {
                        isTerminated = false;
                    }
                    frameData.Write(ID3v2Utils.GetStringBytes(tagVersion, TextEncoding, languageItem.LanguageCode, isTerminated));
                }
                return(_frameHeader.GetBytes(frameData, tagVersion, GetFrameID(tagVersion)));
            }
        }
예제 #2
0
        public override byte[] GetBytes(ID3v2TagVersion tagVersion)
        {
            // TODO: Test

            if (string.IsNullOrEmpty(Text))
            {
                return(new byte[0]);
            }

            byte[] contentDescriptorData;
            byte[] textData;
            do
            {
                contentDescriptorData = ID3v2Utils.GetStringBytes(tagVersion, TextEncoding, ContentDescriptor, true);
                textData = ID3v2Utils.GetStringBytes(tagVersion, TextEncoding, Text, false);
            } while (
                this.RequiresFix(tagVersion, ContentDescriptor, contentDescriptorData) ||
                this.RequiresFix(tagVersion, Text, textData)
                );

            using (MemoryStream frameData = new MemoryStream())
            {
                frameData.WriteByte((byte)TextEncoding);
                frameData.Write(ByteUtils.ISO88591GetBytes(LanguageCode));
                frameData.Write(contentDescriptorData);
                frameData.Write(textData);
                return(_frameHeader.GetBytes(frameData, tagVersion, GetFrameID(tagVersion)));
            }
        }
예제 #3
0
파일: AudioText.cs 프로젝트: Livila/stuffa
        public override byte[] GetBytes(ID3v2TagVersion tagVersion)
        {
            if (_audioData == null || _audioData.Length == 0)
            {
                return(new byte[0]);
            }

            string frameID = GetFrameID(tagVersion);

            if (frameID == null)
            {
                return(new byte[0]);
            }

            using (MemoryStream frameData = new MemoryStream())
            {
                byte[] mimeType = ID3v2Utils.GetStringBytes(tagVersion, EncodingType.ISO88591, MimeType, true);

                byte[] equivText;
                do
                {
                    equivText = ID3v2Utils.GetStringBytes(tagVersion, TextEncoding, EquivalentText, true);
                } while (this.RequiresFix(tagVersion, EquivalentText, equivText));

                frameData.WriteByte((byte)TextEncoding);
                frameData.Write(mimeType, 0, mimeType.Length);
                frameData.WriteByte((byte)(_isMpegOrAac ? 0 : 1));
                frameData.Write(equivText, 0, equivText.Length);
                frameData.Write(_audioData, 0, _audioData.Length);

                return(_frameHeader.GetBytes(frameData, tagVersion, frameID));
            }
        }
예제 #4
0
파일: Comments.cs 프로젝트: kiliman/IdSharp
        public override byte[] GetBytes(ID3v2TagVersion tagVersion)
        {
            if (string.IsNullOrEmpty(Value))
            {
                return(new byte[0]);
            }

            if (LanguageCode == null || LanguageCode.Length != 3)
            {
                LanguageCode = "eng";
            }

            byte[] descriptionData;
            byte[] valueData;

            do
            {
                descriptionData = ID3v2Utils.GetStringBytes(tagVersion, TextEncoding, Description, true);
                valueData       = ID3v2Utils.GetStringBytes(tagVersion, TextEncoding, Value, false);
            } while (
                this.RequiresFix(tagVersion, Description, descriptionData) ||
                this.RequiresFix(tagVersion, Value, valueData)
                );

            using (MemoryStream frameData = new MemoryStream())
            {
                frameData.WriteByte((byte)TextEncoding);
                frameData.Write(ByteUtils.ISO88591GetBytes(LanguageCode));
                frameData.Write(descriptionData);
                frameData.Write(valueData);
                return(_frameHeader.GetBytes(frameData, tagVersion, GetFrameID(tagVersion)));
            }
        }
예제 #5
0
        public override byte[] GetBytes(ID3v2TagVersion tagVersion)
        {
            if (_additionalData == null || _additionalData.Length == 0)
            {
                return(new byte[0]);
            }

            if (tagVersion == ID3v2TagVersion.ID3v22)
            {
                if (_frameIdentifier == null || _frameIdentifier.Length != 3)
                {
                    return(new byte[0]);
                }
            }
            else
            {
                if (_frameIdentifier == null || _frameIdentifier.Length != 4)
                {
                    return(new byte[0]);
                }
            }

            using (MemoryStream frameData = new MemoryStream())
            {
                frameData.Write(ByteUtils.ISO88591GetBytes(_frameIdentifier));
                frameData.Write(ID3v2Utils.GetStringBytes(tagVersion, EncodingType.ISO88591, _url, true));
                frameData.Write(_additionalData);

                return(_frameHeader.GetBytes(frameData, tagVersion, GetFrameID(tagVersion)));
            }
        }
예제 #6
0
        public override byte[] GetBytes(ID3v2TagVersion tagVersion)
        {
            if (string.IsNullOrEmpty(_value))
            {
                return(new byte[0]);
            }

            byte[] descriptionData;
            byte[] valueData;
            do
            {
                descriptionData = ID3v2Utils.GetStringBytes(tagVersion, TextEncoding, Description, true);
                valueData       = ID3v2Utils.GetStringBytes(tagVersion, TextEncoding, Value, false);
            } while (
                this.RequiresFix(tagVersion, Description, descriptionData) ||
                this.RequiresFix(tagVersion, Value, valueData)
                );

            using (MemoryStream stream = new MemoryStream())
            {
                stream.WriteByte((byte)TextEncoding);
                stream.Write(descriptionData);
                stream.Write(valueData);
                return(_frameHeader.GetBytes(stream, tagVersion, GetFrameID(tagVersion)));
            }
        }
예제 #7
0
        public override byte[] GetBytes(ID3v2TagVersion tagVersion)
        {
            if (_encapsulatedObject == null || _encapsulatedObject.Length == 0)
            {
                return(new byte[0]);
            }

            using (MemoryStream frameData = new MemoryStream())
            {
                byte[] fileNameData;
                byte[] descriptionData;

                do
                {
                    fileNameData    = ID3v2Utils.GetStringBytes(tagVersion, TextEncoding, FileName, true);
                    descriptionData = ID3v2Utils.GetStringBytes(tagVersion, TextEncoding, Description, true);
                } while (
                    this.RequiresFix(tagVersion, FileName, fileNameData) ||
                    this.RequiresFix(tagVersion, Description, descriptionData)
                    );

                frameData.WriteByte((byte)TextEncoding);
                frameData.Write(ID3v2Utils.GetStringBytes(tagVersion, EncodingType.ISO88591, MimeType, true));
                frameData.Write(fileNameData);
                frameData.Write(descriptionData);
                frameData.Write(_encapsulatedObject);

                return(_frameHeader.GetBytes(frameData, tagVersion, GetFrameID(tagVersion)));
            }
        }
예제 #8
0
        public override byte[] GetBytes(ID3v2TagVersion tagVersion)
        {
            if (Items.Count == 0)
            {
                return(new byte[0]);
            }

            // Sets appropriate TextEncoding if ISO-8859-1 is insufficient
            if (TextEncoding == EncodingType.ISO88591)
            {
                foreach (IInvolvedPerson involvedPerson in Items)
                {
                    if (string.IsNullOrEmpty(involvedPerson.Involvement) && string.IsNullOrEmpty(involvedPerson.Name))
                    {
                        continue;
                    }

                    byte[] involvementData = ID3v2Utils.GetStringBytes(tagVersion, _textEncoding, involvedPerson.Involvement, true);
                    byte[] nameData        = ID3v2Utils.GetStringBytes(tagVersion, _textEncoding, involvedPerson.Name, true);

                    if (this.RequiresFix(tagVersion, involvedPerson.Involvement, involvementData))
                    {
                        break;
                    }
                    if (this.RequiresFix(tagVersion, involvedPerson.Name, nameData))
                    {
                        break;
                    }
                }
            }

            using (MemoryStream frameData = new MemoryStream())
            {
                frameData.WriteByte((byte)_textEncoding);

                bool foundItem = false;
                foreach (IInvolvedPerson involvedPerson in Items)
                {
                    if (string.IsNullOrEmpty(involvedPerson.Involvement) && string.IsNullOrEmpty(involvedPerson.Name))
                    {
                        continue;
                    }

                    frameData.Write(ID3v2Utils.GetStringBytes(tagVersion, _textEncoding, involvedPerson.Involvement, true));
                    frameData.Write(ID3v2Utils.GetStringBytes(tagVersion, _textEncoding, involvedPerson.Name, true));
                    foundItem = true;
                }

                if (!foundItem)
                {
                    return(new byte[0]);
                }

                return(_frameHeader.GetBytes(frameData, tagVersion, GetFrameID(tagVersion)));
            }
        }
예제 #9
0
 public override byte[] GetBytes(ID3v2TagVersion tagVersion)
 {
     using (MemoryStream frameData = new MemoryStream())
     {
         frameData.Write(ID3v2Utils.GetStringBytes(tagVersion, EncodingType.ISO88591, _ownerIdentifier, true));
         frameData.WriteByte(_groupSymbol);
         if (_groupDependentData != null)
         {
             frameData.Write(_groupDependentData);
         }
         return(_frameHeader.GetBytes(frameData, tagVersion, GetFrameID(tagVersion)));
     }
 }
예제 #10
0
 public override byte[] GetBytes(ID3v2TagVersion tagVersion)
 {
     using (MemoryStream stream = new MemoryStream())
     {
         stream.Write(ID3v2Utils.GetStringBytes(tagVersion, EncodingType.ISO88591, OwnerIdentifier, true));
         stream.Write(ByteUtils.Get2Bytes(PreviewStart));
         stream.Write(ByteUtils.Get2Bytes(PreviewLength));
         if (_encryptionInfo != null)
         {
             stream.Write(_encryptionInfo);
         }
         return(_frameHeader.GetBytes(stream, tagVersion, GetFrameID(tagVersion)));
     }
 }
예제 #11
0
        public override byte[] GetBytes(ID3v2TagVersion tagVersion)
        {
            if (_rating == 0 && _playCount == 0)
            {
                return(new byte[0]);
            }

            using (MemoryStream frameData = new MemoryStream())
            {
                frameData.Write(ID3v2Utils.GetStringBytes(tagVersion, EncodingType.ISO88591, _userEmail, true));
                frameData.WriteByte(_rating);
                frameData.Write(ByteUtils.GetBytesMinimal(_playCount));
                return(_frameHeader.GetBytes(frameData, tagVersion, GetFrameID(tagVersion)));
            }
        }
예제 #12
0
        public override byte[] GetBytes(ID3v2TagVersion tagVersion)
        {
            if (_pictureData == null || _pictureData.Length == 0)
            {
                return(new byte[0]);
            }

            // iTunes doesn't like Unicode in APIC descriptions - fixed in iTunes 7.1.0.59
            //TextEncoding = EncodingType.ISO88591;

            using (MemoryStream stream = new MemoryStream())
            {
                byte[] descriptionData;

                do
                {
                    descriptionData = ID3v2Utils.GetStringBytes(tagVersion, _textEncoding, _description, true);
                } while (
                    this.RequiresFix(tagVersion, _description, descriptionData)
                    );

                stream.WriteByte((byte)_textEncoding);
                if (tagVersion == ID3v2TagVersion.ID3v22)
                {
                    string format = PictureExtension;
                    if (string.IsNullOrEmpty(format) || format.Length < 3)
                    {
                        format = "   ";
                    }
                    else if (format.Length > 3)
                    {
                        format = format.Substring(0, 3);
                    }

                    stream.Write(Encoding.ASCII.GetBytes(format));
                }
                else
                {
                    SetMimeType();       // iTunes needs this set properly
                    stream.Write(ByteUtils.ISO88591GetBytes(_mimeType));
                    stream.WriteByte(0); // terminator
                }
                stream.WriteByte((byte)_pictureType);
                stream.Write(descriptionData);
                stream.Write(_pictureData);
                return(_frameHeader.GetBytes(stream, tagVersion, GetFrameID(tagVersion)));
            }
        }
예제 #13
0
        public override byte[] GetBytes(ID3v2TagVersion tagVersion)
        {
            if (Items.Count == 0)
            {
                return(new byte[0]);
            }

            if (TextEncoding == EncodingType.ISO88591)
            {
                foreach (ISynchronizedTextItem item in Items)
                {
                    byte[] textData = ID3v2Utils.GetStringBytes(tagVersion, TextEncoding, item.Text, true);
                    if (this.RequiresFix(tagVersion, item.Text, textData))
                    {
                        break;
                    }
                }
            }

            byte[] contentDescriptorData;
            do
            {
                contentDescriptorData = ID3v2Utils.GetStringBytes(tagVersion, TextEncoding, ContentDescriptor, true);
            } while (this.RequiresFix(tagVersion, ContentDescriptor, contentDescriptorData));

            using (MemoryStream frameData = new MemoryStream())
            {
                frameData.WriteByte((byte)TextEncoding);
                frameData.Write(ByteUtils.ISO88591GetBytes(LanguageCode));
                frameData.WriteByte((byte)TimestampFormat);
                frameData.WriteByte((byte)ContentType);
                frameData.Write(contentDescriptorData);
                foreach (ISynchronizedTextItem item in Items)
                {
                    frameData.Write(ID3v2Utils.GetStringBytes(tagVersion, TextEncoding, item.Text, true));
                    frameData.Write(ByteUtils.Get4Bytes(item.Timestamp));
                }

                return(_frameHeader.GetBytes(frameData, tagVersion, GetFrameID(tagVersion)));
            }
        }
예제 #14
0
        public override byte[] GetBytes(ID3v2TagVersion tagVersion)
        {
            if (string.IsNullOrEmpty(_value))
            {
                return(new byte[0]);
            }

            byte[] valueData;
            do
            {
                valueData = ID3v2Utils.GetStringBytes(tagVersion, _textEncoding, _value, false);
            } while (this.RequiresFix(tagVersion, _value, valueData));

            using (MemoryStream frameData = new MemoryStream())
            {
                frameData.WriteByte((byte)_textEncoding);
                frameData.Write(ByteUtils.ISO88591GetBytes(_languageCode));
                frameData.Write(valueData);
                return(_frameHeader.GetBytes(frameData, tagVersion, GetFrameID(tagVersion)));
            }
        }
예제 #15
0
        public override byte[] GetBytes(ID3v2TagVersion tagVersion)
        {
            if (string.IsNullOrEmpty(Value))
            {
                return(new byte[0]);
            }

            byte[] descriptionData;
            do
            {
                descriptionData = ID3v2Utils.GetStringBytes(tagVersion, TextEncoding, Description, true);
            } while (this.RequiresFix(tagVersion, Description, descriptionData));

            using (MemoryStream frameData = new MemoryStream())
            {
                frameData.WriteByte((byte)TextEncoding);
                frameData.Write(descriptionData);
                frameData.Write(ByteUtils.ISO88591GetBytes(Value));

                return(_frameHeader.GetBytes(frameData, tagVersion, GetFrameID(tagVersion)));
            }
        }
예제 #16
0
파일: Commercial.cs 프로젝트: Livila/stuffa
        public override byte[] GetBytes(ID3v2TagVersion tagVersion)
        {
            if (_priceList.Count == 0)
            {
                return(new byte[0]);
            }

            using (MemoryStream frameData = new MemoryStream())
            {
                byte[] nameOfSellerData;
                byte[] descriptionData;
                do
                {
                    nameOfSellerData = ID3v2Utils.GetStringBytes(tagVersion, _textEncoding, _nameOfSeller, true);
                    descriptionData  = ID3v2Utils.GetStringBytes(tagVersion, _textEncoding, _description, true);
                } while (
                    this.RequiresFix(tagVersion, _nameOfSeller, nameOfSellerData) ||
                    this.RequiresFix(tagVersion, _description, descriptionData)
                    );

                frameData.WriteByte((byte)_textEncoding);

                string priceString = string.Empty;
                foreach (IPriceInformation priceInfo in _priceList)
                {
                    if (priceInfo.CurrencyCode != null && priceInfo.CurrencyCode.Length == 3)
                    {
                        if (priceString != string.Empty)
                        {
                            priceString += "/";
                        }
                        priceString += string.Format("{0}{1:0.00}", priceInfo.CurrencyCode, priceInfo.Price);
                    }
                }

                // No valid price items
                if (priceString == string.Empty)
                {
                    return(new byte[0]);
                }

                frameData.Write(ByteUtils.ISO88591GetBytes(priceString));
                frameData.WriteByte(0); // terminator
                frameData.Write(ByteUtils.ISO88591GetBytes(_validUntil.ToString("yyyyMMdd")));
                frameData.Write(ByteUtils.ISO88591GetBytes(_contactUrl));
                frameData.WriteByte(0); // terminator
                frameData.WriteByte((byte)_receivedAs);
                frameData.Write(nameOfSellerData);
                frameData.Write(descriptionData);

                // This section is optional
                if (_sellerLogo != null && _sellerLogo.Length != 0)
                {
                    frameData.Write(ByteUtils.ISO88591GetBytes(_sellerLogoMimeType));
                    frameData.WriteByte(0); // terminator
                    frameData.Write(_sellerLogo);
                }

                return(_frameHeader.GetBytes(frameData, tagVersion, GetFrameID(tagVersion)));
            }
        }