Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
Archivo: Slush.cs Proyecto: brson/slush
        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();
        }
Ejemplo n.º 5
0
 /// <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;
         }
     }
 }
Ejemplo n.º 6
0
        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));
        }
Ejemplo n.º 7
0
        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));
            }
        }
Ejemplo n.º 8
0
        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));
        }
Ejemplo n.º 9
0
        public void GetEnumerator_NotReEnumerableTest()
        {
            int count = 0;
            reader = CreateReader(builder.BuildStream());
            foreach (IMp3StreamRegion region in reader)
            {
                count++;
            }

            reader.GetEnumerator().MoveNext();
        }
Ejemplo n.º 10
0
        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();
        }
Ejemplo n.º 11
0
        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));
        }
Ejemplo n.º 12
0
        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));
        }
Ejemplo n.º 13
0
        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++;
                }
            }
        }