public void FileTest(string fileName, int numFrames) { Assert.That(File.Exists(fileName)); Mp3StreamReader reader = new Mp3StreamReader ( new BufferedStream ( new FileStream ( fileName, FileMode.Open, FileAccess.Read ) ) ); int frameCount = 0; foreach (IMp3StreamRegion region in reader) { if (region is Mp3Frame) { frameCount++; } } Assert.That(frameCount, Is.EqualTo(numFrames)); }
public void GetEnumerator_FreeBitrateJunkBeforeTest() { builder.AddJunk(20); builder.AddFreeFrame(MpegVersion.V1, MpegLayer.Layer3, true, 0, 30); builder.AddFreeFrame(MpegVersion.V1, MpegLayer.Layer3, true, 0, 40); builder.AddFreeFrame(MpegVersion.V1, MpegLayer.Layer3, false, 0, 50); builder.AddFreeFrame(MpegVersion.V1, MpegLayer.Layer3, false, 0, 60); int count = 0; reader = CreateReader(builder.BuildStream()); foreach (IMp3StreamRegion region in reader) { if (count == 0) { Assert.That(region, Is.InstanceOfType(typeof(JunkRegion))); } else { Assert.That(region, Is.InstanceOfType(typeof(Mp3Frame))); } Assert.That(region.Bytes.Count, Is.EqualTo(count * 10 + 20)); count++; } Assert.That(count, Is.EqualTo(5)); }
public void GetEnumerator_AsIEnumerableTest() { builder.AddFrame(MpegVersion.V1, MpegLayer.Layer3, false, 0, 0); builder.AddFrame(MpegVersion.V1, MpegLayer.Layer3, false, 0, 0); builder.AddFrame(MpegVersion.V1, MpegLayer.Layer3, false, 0, 0); int count = 0; reader = CreateReader(builder.BuildStream()); foreach (IMp3StreamRegion region in (System.Collections.IEnumerable) reader) { Assert.That(region, Is.InstanceOfType(typeof(Mp3Frame))); count++; } Assert.That(count, Is.EqualTo(3)); }
public static void Main(string[] args) { string filename = //"compl.bit"; //"01-Lovecraft_s Death.mp3"; //"01-enochian_crescent-tatan.mp3"; //"bad-info-crc.mp3"; //"test-id3v1.mp3"; //"test-id3v2.mp3"; "test-lame.mp3"; Stream mp3Stream = new BufferedStream( new FileStream( filename, FileMode.Open, FileAccess.Read)); Mp3Validator validator = new Mp3Validator(); validator.OnValidationFailure += ValidationFailureEventHandler; validator.Validate(mp3Stream); Console.WriteLine("Done"); mp3Stream.Seek(0, SeekOrigin.Begin); Mp3StreamReader reader = new Mp3StreamReader(mp3Stream); foreach (IMp3StreamRegion region in reader) { } Console.WriteLine("Done"); mp3Stream.Seek(0, SeekOrigin.Begin); while (-1 != mp3Stream.ReadByte()) { } Console.WriteLine("Done"); Console.ReadKey(); }
/// <summary> /// Begins the traversal /// </summary> public void BeginStreamProcessEventHandler(BeginStreamProcessEventArgs e) { try { Mp3StreamReader reader = new Mp3StreamReader(e.Stream); foreach (IMp3StreamRegion region in reader) { try { if (region is Mp3Frame) { if (OnFoundMp3Frame != null) { OnFoundMp3Frame(new FoundMp3FrameEventArgs(region as Mp3Frame)); } } else if (region is JunkRegion) { if (OnFoundJunkRegion != null) { OnFoundJunkRegion(new FoundJunkRegionEventArgs(region as JunkRegion)); } } else { Debug.Fail("Unexpected region type"); } } catch (Exception ex1) { // Keep going Trace.WriteLine("Unexpected exception: " + ex1.Message); } } } catch (Exception ex2) { Trace.WriteLine("Unexpected exception: " + ex2.Message); if (OnValidationFailure != null) { OnValidationFailure( new ValidationFailureEventArgs( new ValidationFailure( "Parser failure", ex2.Message))); return; } } }
public void GetEnumerator_TruncatedFrameTest( int truncatedIndex, int truncatedFrameLength, bool useCrc) { const int NUM_FRAMES = 5; // Row sanity test Assert.That(truncatedIndex, Is.LessThan(NUM_FRAMES)); for (int frameNumber = 0; frameNumber < NUM_FRAMES; frameNumber++) { if (frameNumber != truncatedIndex) { this.builder.AddFrame(MpegVersion.V1, MpegLayer.Layer3, false, 0, 0); } else { this.builder.AddFrame(MpegVersion.V1, MpegLayer.Layer3, useCrc, 0, truncatedFrameLength); } } int count = 0; this.reader = CreateReader(this.builder.BuildStream()); foreach (IMp3StreamRegion region in this.reader) { if (count == truncatedIndex && count == 0) { // truncated frame at beginning of stream shouldn't be identified Assert.That(region, Is.InstanceOfType(typeof(JunkRegion))); } else { Assert.That(region, Is.InstanceOfType(typeof(Mp3Frame))); } if (count == truncatedIndex) { Assert.That(region.Bytes.Count, Is.EqualTo(truncatedFrameLength)); } count++; } Assert.That(count, Is.EqualTo(NUM_FRAMES)); }
public void GetEnumerator_TruncatedFrameAfterJunkTest( int truncatedIndex, int truncatedFrameLength, int junkLength, bool useCrc) { const int NUM_FRAMES = 5; // Row sanity test Assert.That(truncatedIndex, Is.LessThan(NUM_FRAMES)); for (int frameNumber = 0; frameNumber < NUM_FRAMES; frameNumber++) { if (frameNumber != truncatedIndex) { builder.AddFrame(MpegVersion.V1, MpegLayer.Layer3, true, 0, 0); } else { builder.AddJunk(junkLength); builder.AddFrame(MpegVersion.V1, MpegLayer.Layer3, useCrc, 0, truncatedFrameLength); } } int count = 0; reader = CreateReader(builder.BuildStream()); foreach (IMp3StreamRegion region in reader) { if (truncatedIndex == 1) { // first frame, junk, and truncated frame are all one junk region if (count == 0) { Assert.That(region, Is.TypeOf(typeof(JunkRegion))); } else { Assert.That(region, Is.TypeOf(typeof(Mp3Frame))); } } else if (truncatedIndex == NUM_FRAMES - 2) // second to last { // junk, truncated frame, and last frame are all one junk region if (count == NUM_FRAMES - 2) { Assert.That(region, Is.TypeOf(typeof(JunkRegion))); } else { Assert.That(region, Is.TypeOf(typeof(Mp3Frame))); } } else { // junk and truncated frame are both junk if (count == truncatedIndex) { Assert.That(region, Is.TypeOf(typeof(JunkRegion))); } else { Assert.That(region, Is.TypeOf(typeof(Mp3Frame))); } } count++; } if (truncatedIndex == 1 || truncatedIndex == NUM_FRAMES - 2) { Assert.That(count, Is.EqualTo(NUM_FRAMES - 1)); } else { Assert.That(count, Is.EqualTo(NUM_FRAMES)); } }
public void GetEnumerator_SmokeTest(bool useCrc) { builder.AddFrame(MpegVersion.V1, MpegLayer.Layer3, useCrc, 0, 0); builder.AddFrame(MpegVersion.V1, MpegLayer.Layer3, useCrc, 0, 0); builder.AddFrame(MpegVersion.V1, MpegLayer.Layer3, useCrc, 0, 0); int count = 0; reader = CreateReader(builder.BuildStream()); foreach (IMp3StreamRegion region in reader) { Assert.That(region, Is.InstanceOfType(typeof(Mp3Frame))); count++; } Assert.That(count, Is.EqualTo(3)); }
public void GetEnumerator_NotReEnumerableTest() { int count = 0; reader = CreateReader(builder.BuildStream()); foreach (IMp3StreamRegion region in reader) { count++; } reader.GetEnumerator().MoveNext(); }
public void GetEnumerator_NotReentrantTest() { builder.AddFrame(MpegVersion.V1, MpegLayer.Layer3, false, 0, 0); builder.AddFrame(MpegVersion.V1, MpegLayer.Layer3, false, 0, 0); builder.AddFrame(MpegVersion.V1, MpegLayer.Layer3, false, 0, 0); int count = 0; reader = CreateReader(builder.BuildStream()); foreach (IMp3StreamRegion region in reader) { if (count == 1) break; count++; } object o = reader.GetEnumerator().MoveNext(); }
public void GetEnumerator_JunkMiddleStreamTest(int junkCount) { builder.AddFrame(MpegVersion.V1, MpegLayer.Layer3, false, 0, 0); // junk builder.AddJunk(junkCount); builder.AddFrame(MpegVersion.V1, MpegLayer.Layer3, true, 0, 0); // frame builder.AddFrame(MpegVersion.V1, MpegLayer.Layer3, true, 0, 0); // frame builder.AddJunk(junkCount); // junk builder.AddFrame(MpegVersion.V1, MpegLayer.Layer3, true, 0, 0); // frame builder.AddFrame(MpegVersion.V1, MpegLayer.Layer3, true, 0, 0); // frame builder.AddJunk(junkCount); // junk builder.AddFrame(MpegVersion.V1, MpegLayer.Layer3, true, 0, 0); int count = 0; reader = CreateReader(builder.BuildStream()); foreach (IMp3StreamRegion region in reader) { if (count == 0 || count == 3 || count == 6) { Assert.That(region, Is.InstanceOfType(typeof(JunkRegion))); } else { Assert.That(region, Is.InstanceOfType(typeof(Mp3Frame))); } count++; } // TODO: should the last frame be counted or not? Assert.That(count, Is.EqualTo(7)); }
public void GetEnumerator_JunkEndNonEstablishedStreamTest(int junkCount) { builder.AddFrame(MpegVersion.V1, MpegLayer.Layer3, false, 0, 0); builder.AddJunk(junkCount); int count = 0; reader = CreateReader(builder.BuildStream()); foreach (IMp3StreamRegion region in reader) { Assert.That(region, Is.InstanceOfType(typeof(JunkRegion))); count++; } Assert.That(count, Is.EqualTo(1)); }
public void GetEnumerator_IdenticalStreamTest() { Random r = new Random(0x1234); builder.UseRandom = true; const int NUM_REGIONS = 1000; for (int regionCount = 0; regionCount < NUM_REGIONS; regionCount++) { if (r.Next() % 2 == 0) { builder.AddJunk(r.Next() % 50 + 1); } else { if (r.Next() % 2 == 0) { builder.AddFrame(MpegVersion.V1, MpegLayer.Layer2, true, 0, 0); } else { builder.AddFrame(MpegVersion.V2, MpegLayer.Layer1, false, - (r.Next() % 10), 0); } } } byte[] streamCopy; { MemoryStream stream = (MemoryStream) builder.BuildStream(); streamCopy = stream.ToArray(); reader = CreateReader(stream); } int copyIndex = 0; foreach (IMp3StreamRegion region in reader) { foreach (byte b in region.Bytes) { Assert.That(b, Is.EqualTo(streamCopy[copyIndex])); copyIndex++; } } }