public void testReadWithSpeexAudio() throws IOException {
        OggFile ogg = new OggFile(getTheoraSpeexFile());
        tf = new TheoraFile(ogg);

        // Check the Info
        assertEquals("3.2.1", tf.getInfo().getVersion());
        assertEquals(3, tf.getInfo().getMajorVersion());
        assertEquals(2, tf.getInfo().getMinorVersion());
        assertEquals(1, tf.getInfo().getRevisionVersion());

        assertEquals(40, tf.getInfo().getFrameWidthMB());
        assertEquals(30, tf.getInfo().getFrameHeightMB());
        assertEquals(640, tf.getInfo().getFrameWidth());
        assertEquals(480, tf.getInfo().getFrameHeight());
        assertEquals(640, tf.getInfo().getPictureRegionWidth());
        assertEquals(480, tf.getInfo().getPictureRegionHeight());
        assertEquals(0, tf.getInfo().getPictureRegionXOffset());
        assertEquals(0, tf.getInfo().getPictureRegionYOffset());

        assertEquals(1, tf.getInfo().getFrameRateNumerator());
        assertEquals(1, tf.getInfo().getFrameRateDenominator());
        assertEquals(0, tf.getInfo().getPixelAspectNumerator());
        assertEquals(0, tf.getInfo().getPixelAspectDenomerator());

        assertEquals(0, tf.getInfo().getColourSpace());
        assertEquals(0, tf.getInfo().getNominalBitrate());
        assertEquals(38, tf.getInfo().getQualityHint());
        assertEquals(6, tf.getInfo().getKeyFrameNumberGranuleShift());
        assertEquals(0, tf.getInfo().getPixelFormat());

        // Check the Comments
        assertEquals(
                "Xiph.Org libtheora 1.1 20090822 (Thusnelda)",
                tf.getComments().getVendor()
        );
        assertEquals(
                "ffmpeg2theora-0.27",
                tf.getComments().getComments("ENCODER").get(0)
        );
        assertEquals(1, tf.getComments().getAllComments().size());

        // TODO - proper setup packet checking
        assertEquals(255*12+0x90, tf.getSetup().getData().length);

        // Doesn't have a skeleton stream
        assertEquals(null, tf.getSkeleton());

        // Has a single, speex soundtrack
        assertNotNull(tf.getSoundtracks());
        assertNotNull(tf.getSoundtrackStreams());
        assertEquals(1, tf.getSoundtracks().size());
        assertEquals(1, tf.getSoundtrackStreams().size());
        assertEquals(OggStreamIdentifier.SPEEX_AUDIO, 
                     tf.getSoundtracks().iterator().next().getType());


        // Has a handful of video and audio frames interleaved
        OggStreamAudioVisualData avd = null;

        int numTheora = 0;
        int numAudio = 0;
        while ((avd = tf.getNextAudioVisualPacket()) != null) {
            if (avd instanceof TheoraVideoData) numTheora++;
            if (avd instanceof OggStreamAudioData) numAudio++;
        }

        assertTrue("Not enough video, found " + numTheora, numTheora > 0);
        assertTrue("Not enough audio, found " + numAudio,  numAudio > 0);

        avd = tf.getNextAudioVisualPacket();
        assertNull( avd );
    }