public void StreamUtils_LongConverters() { ulong longValue = 0x45976248; byte[] byteValue = BitConverter.GetBytes(longValue); Assert.AreEqual(longValue, StreamUtils.DecodeUInt64(byteValue)); byteValue = StreamUtils.EncodeBEUInt64(longValue); Assert.AreEqual((long)longValue, StreamUtils.DecodeBEInt64(byteValue)); }
public static void FromStream(Stream source, MetaDataIO meta, ReadTagParams readTagParams) { string str; byte[] data = new byte[256]; // Description source.Read(data, 0, 256); str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data).Trim()); if (str.Length > 0) { meta.SetMetaField("bext.description", str, readTagParams.ReadAllMetaFrames); } // Originator source.Read(data, 0, 32); str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data, 0, 32).Trim()); if (str.Length > 0) { meta.SetMetaField("bext.originator", str, readTagParams.ReadAllMetaFrames); } // OriginatorReference source.Read(data, 0, 32); str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data, 0, 32).Trim()); if (str.Length > 0) { meta.SetMetaField("bext.originatorReference", str, readTagParams.ReadAllMetaFrames); } // OriginationDate source.Read(data, 0, 10); str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data, 0, 10).Trim()); if (str.Length > 0) { meta.SetMetaField("bext.originationDate", str, readTagParams.ReadAllMetaFrames); } // OriginationTime source.Read(data, 0, 8); str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data, 0, 8).Trim()); if (str.Length > 0) { meta.SetMetaField("bext.originationTime", str, readTagParams.ReadAllMetaFrames); } // TimeReference source.Read(data, 0, 8); ulong timeReference = StreamUtils.DecodeUInt64(data); meta.SetMetaField("bext.timeReference", timeReference.ToString(), readTagParams.ReadAllMetaFrames); // BEXT version source.Read(data, 0, 2); int intData = StreamUtils.DecodeUInt16(data); meta.SetMetaField("bext.version", intData.ToString(), readTagParams.ReadAllMetaFrames); // UMID source.Read(data, 0, 64); str = ""; int usefulLength = 32; // "basic" UMID if (data[12] > 19) { usefulLength = 64; // data[12] gives the size of remaining UMID } for (int i = 0; i < usefulLength; i++) { str = str + data[i].ToString("X2"); } meta.SetMetaField("bext.UMID", str, readTagParams.ReadAllMetaFrames); // LoudnessValue source.Read(data, 0, 2); intData = StreamUtils.DecodeInt16(data); meta.SetMetaField("bext.loudnessValue", (intData / 100.0).ToString(), readTagParams.ReadAllMetaFrames); // LoudnessRange source.Read(data, 0, 2); intData = StreamUtils.DecodeInt16(data); meta.SetMetaField("bext.loudnessRange", (intData / 100.0).ToString(), readTagParams.ReadAllMetaFrames); // MaxTruePeakLevel source.Read(data, 0, 2); intData = StreamUtils.DecodeInt16(data); meta.SetMetaField("bext.maxTruePeakLevel", (intData / 100.0).ToString(), readTagParams.ReadAllMetaFrames); // MaxMomentaryLoudness source.Read(data, 0, 2); intData = StreamUtils.DecodeInt16(data); meta.SetMetaField("bext.maxMomentaryLoudness", (intData / 100.0).ToString(), readTagParams.ReadAllMetaFrames); // MaxShortTermLoudness source.Read(data, 0, 2); intData = StreamUtils.DecodeInt16(data); meta.SetMetaField("bext.maxShortTermLoudness", (intData / 100.0).ToString(), readTagParams.ReadAllMetaFrames); // Reserved source.Seek(180, SeekOrigin.Current); // CodingHistory long initialPos = source.Position; if (StreamUtils.FindSequence(source, new byte[2] { 13, 10 } /* CR LF */)) { long endPos = source.Position - 2; source.Seek(initialPos, SeekOrigin.Begin); if (data.Length < (int)(endPos - initialPos)) { data = new byte[(int)(endPos - initialPos)]; } source.Read(data, 0, (int)(endPos - initialPos)); str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data, 0, (int)(endPos - initialPos)).Trim()); if (str.Length > 0) { meta.SetMetaField("bext.codingHistory", str, readTagParams.ReadAllMetaFrames); } } }
public void StreamUtils_Exceptions() { Assert.IsFalse(StreamUtils.ArrEqualsArr(new byte[1], new byte[2])); Assert.IsFalse(StreamUtils.StringEqualsArr(".", new char[2])); try { StreamUtils.DecodeBEUInt16(new byte[1]); Assert.Fail(); } catch { } try { StreamUtils.DecodeUInt16(new byte[1]); Assert.Fail(); } catch { } try { StreamUtils.DecodeInt16(new byte[1]); Assert.Fail(); } catch { } try { StreamUtils.DecodeBEInt16(new byte[1]); Assert.Fail(); } catch { } try { StreamUtils.DecodeBEInt24(new byte[2]); Assert.Fail(); } catch { } try { StreamUtils.DecodeBEUInt24(new byte[2]); Assert.Fail(); } catch { } try { StreamUtils.EncodeBEUInt24(0x01FFFFFF); Assert.Fail(); } catch { } try { StreamUtils.DecodeBEUInt32(new byte[3]); Assert.Fail(); } catch { } try { StreamUtils.DecodeUInt32(new byte[3]); Assert.Fail(); } catch { } try { StreamUtils.DecodeBEInt32(new byte[3]); Assert.Fail(); } catch { } try { StreamUtils.DecodeInt32(new byte[3]); Assert.Fail(); } catch { } try { StreamUtils.DecodeUInt64(new byte[7]); Assert.Fail(); } catch { } try { StreamUtils.DecodeBEInt64(new byte[7]); Assert.Fail(); } catch { } try { StreamUtils.DecodeSynchSafeInt(new byte[6]); Assert.Fail(); } catch { } try { StreamUtils.DecodeSynchSafeInt32(new byte[6]); Assert.Fail(); } catch { } try { StreamUtils.EncodeSynchSafeInt(1, 0); Assert.Fail(); } catch { } try { StreamUtils.EncodeSynchSafeInt(1, 6); Assert.Fail(); } catch { } try { StreamUtils.ReadBits(new BinaryReader(new MemoryStream()), 0, 0); Assert.Fail(); } catch { } try { StreamUtils.ReadBits(new BinaryReader(new MemoryStream()), 0, 33); Assert.Fail(); } catch { } }