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))); } }
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))); } }
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)); } }
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))); } }
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))); } }
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))); } }
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))); } }
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))); } }
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))); } }
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))); } }
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))); } }
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))); } }
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))); } }
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))); } }
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))); } }
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))); } }