package com.limegroup.gnutella.metadata; import junit.framework.Test; import com.limegroup.gnutella.util.CommonUtils; /** * Test MP3Info class * * * @author cHANCE mOORE, ctmoore@gottapee.com - 30 July 2002 */ //34567890123456789012345678901234567890123456789012345678901234567890123456789 public class MP3Test extends com.limegroup.gnutella.util.BaseTestCase { private static final int runs = 900; private static final String d = "com/limegroup/gnutella/metadata/"; private static final String file[] = new String[] { d+"mpg1layIII_96k-RIFFWAV_441000hz_joint_Xing.wav", d+"mpg1layI_0h_448k_frame14_48000hz_dual_fl5Orig.mp3", d+"mpg1layI_43h_32k_f256_44100hz_dual_50-15emph_CRCcopyOrig_sectest.mp3", d+"mpg1layII_0h_384k_frame24_48000hz_stereo_CRCOrig_Gogo1sectest.mp3", d+"mpg1layIII_212k-VBRq0_f1655_441hz_stereo_FhgTAGID3v1_waterson.mp3", d+"mpg1layIII_0h_58k-VBRq30_frame1211_44100hz_joint_XingTAG_sample.mp3", d+"mpg1layIII_138k-VBRq44_f2895_44100hz_joint_XingTAG_ID3v2_Lame.mp3", d+"mpg1layIII_170k-VBRq66_f1721_441hz_stereo_XingTAGcopyID3v1_mutter.mp3", d+"mpg1layII_0h_192k_frame44_44100hz_joint_CRCfl11.mp2", d+"mpg2.5layIII_8k-VBRq95_f149_8000khz_mono_ID3v2Orig_XingTAG_Lame.mp3", d+"mpg2layI_0h_128k_frame54_22050hz_joint_CRCOrig_test33.mp3", d+"mpg2layII_1504h_16k_frame56_24000hz_joint_CRCOrigID3v1&2_test27.mp3", d+"mpg2layIII_0h_40k_764or744frame_22050hz_mono_Orig_Fhgl3Frank.mp3", d+"mpg2layIII_12kABRq55_f1202_16hz_stereo_XingLameTAG_CRCOrigwaterson.mp3", d+"mpgPlus_210k-VBR_f1149_441hz_joint_copy__NOTmp1lay_448k_f540_5015.mpc", d+"mpgPRO2layIII_0h_64k_frame2036or2015_22050hz_joint_thomson.mp3", d+"mpg4_golem160x90first120.avi", d+"corruptFileWithBadHeaders.mp3"}; public MP3Test(String name) { super(name); } /** * * @param args java.lang.String[] */ public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } protected void setUp() { } public static Test suite() { return buildTestSuite(MP3Test.class); } protected void tearDown() { } private MP3Info newMP3Info(String loc) throws Exception { return new MP3Info(CommonUtils.getResourceFile(loc).getPath()); } /** * * All values (where possible) have been validated by * Winamp winamp.com * EncSpot guerillasoft.com * LAME * MusicMatch musicmatch.com * */ public void testMP3() throws Exception { MP3Info info = null; /* mpg1layI_0h_448k_frame14_48000hz_dual_fl5Orig.mp3 */ info = newMP3Info(file[1]); assertEquals(info.getFileSize(), 21952L); assertEquals(info.getBitRate() , 448); assertTrue(!info.isCoprighted()); assertTrue(info.isOriginal()); assertTrue(!info.isPadded()); assertTrue(!info.isPrivate()); assertTrue(info.isProtected()); assertTrue(!info.isRiffWav()); assertEquals(info.getFrequency() , 48000); assertEquals(info.getHeaderBitRate() , 448); assertEquals(info.getLayer_Numeric() , 1); assertEquals(info.getLengthInSeconds() , 0); assertEquals(info.getMode() , "Dual Channel"); assertEquals(info.getVersion_Numeric() , 1.0d, 0D); assertEquals(info.getNumberOfFrames() , 1); //14-encspot 16-winamp////////////////////////////////////// assertEquals(info.getEmphasis() , "none"); assertTrue(!info.hasVariableBitRate()); /* mpg1layI_32k_f256_441hz_dual_5015emph_CRCcopyOrig_sectest.mp3 */ info = newMP3Info(file[2]); assertEquals(info.getFileSize(), 26645L); assertEquals(info.getBitRate() , 32); assertTrue(info.isCoprighted()); assertTrue(info.isOriginal()); assertTrue(!info.isPadded()); assertTrue(info.isPrivate()); assertTrue(info.isProtected()); assertTrue(!info.isRiffWav()); assertEquals(info.getFrequency() , 44100); assertEquals(info.getHeaderBitRate() , 32); assertEquals(info.getLayer_Numeric() , 1); assertEquals(info.getLengthInSeconds() , 6); assertEquals(info.getMode() , "Dual Channel"); assertEquals(info.getVersion_Numeric() , 1.0d, 0D); assertEquals(info.getNumberOfFrames() , 2); //256-winamp no encspot///////////////////////////////////// assertEquals(info.getEmphasis() , "50/15 ms"); assertTrue(!info.hasVariableBitRate()); /* mpg1layII_384k_f24_48hz_stereo_CRCOrig_Gogo1sectest.mp3 */ info = newMP3Info(file[3]); assertEquals(info.getFileSize(), 31104L); assertEquals(info.getBitRate() , 384); assertTrue(!info.isCoprighted()); assertTrue(info.isOriginal()); assertTrue(!info.isPadded()); assertTrue(!info.isPrivate()); assertTrue(info.isProtected()); assertTrue(!info.isRiffWav()); assertEquals(info.getFrequency() , 48000); assertEquals(info.getHeaderBitRate() , 384); assertEquals(info.getLayer_Numeric() , 2); assertEquals(info.getLengthInSeconds() , 0); assertEquals(info.getMode() , "Stereo"); assertEquals(info.getVersion_Numeric() , 1.0d, 0D); assertEquals(info.getNumberOfFrames() , 27); //24-encspot 27-winamp///////////////////////////////////// assertEquals(info.getEmphasis() , "none"); assertTrue(!info.hasVariableBitRate()); /* mpg1layIII_58k-VBRq30_f1211_441hz_joint_XingTAG_sample.mp3 */ info = newMP3Info(file[5]); assertEquals(info.getFileSize(), 232295L); assertEquals(info.getBitRate() , 58); //59-winamp(wrong) 58-encspot assertTrue(info.isCoprighted()); assertTrue(info.isOriginal()); assertTrue(!info.isPadded()); assertTrue(!info.isPrivate()); assertTrue(!info.isProtected()); assertTrue(!info.isRiffWav()); assertEquals(info.getFrequency() , 44100); assertEquals(info.getHeaderBitRate() , 48); assertEquals(info.getLayer_Numeric() , 3); assertEquals(info.getLengthInSeconds() , 31); assertEquals(info.getMode() , "Joint Stereo"); assertEquals(info.getVersion_Numeric() , 1.0d, 0D); assertEquals(info.getNumberOfFrames() , 1212); assertEquals(info.getEmphasis() , "none"); assertTrue(info.hasVariableBitRate()); assertEquals(info.getVBRHeader().getScale() , 30); assertNotNull(info.getVBRHeader().getTableOfContents()); /* mpg1layII_0h_192k_frame44_44100hz_joint_CRCfl11.mp2 */ info = newMP3Info(file[8]); assertEquals(info.getFileSize(), 30720L); assertEquals(info.getBitRate() , 192); assertTrue(!info.isCoprighted()); assertTrue(!info.isOriginal()); assertTrue(info.isPadded()); assertTrue(!info.isPrivate()); assertTrue(info.isProtected()); assertTrue(!info.isRiffWav()); assertEquals(info.getFrequency() , 44100); assertEquals(info.getHeaderBitRate() , 192); assertEquals(info.getLayer_Numeric() , 2); assertEquals(info.getLengthInSeconds() , 1); assertEquals(info.getMode() , "Stereo"); assertEquals(info.getVersion_Numeric() , 1.0d, 0D); assertEquals(info.getNumberOfFrames() , 48); //44-encspot 49-winamp///////////////////////////////////// assertEquals(info.getEmphasis() , "none"); assertTrue(!info.hasVariableBitRate()); /* mpg2.5layIII_8k-VBRq95_f149_8khz_mono_ID3v2Orig_XingTAGLame.mp3 !!Can't find Xing tag!! which is why stuff is messed up */ info = newMP3Info(file[9]); assertEquals(info.getFileSize(), 14336L); assertEquals(info.getBitRate() , 32); //18-winamp 8-encspot///////////////////////////////////////////// assertTrue(!info.isCoprighted()); assertTrue(info.isOriginal()); assertTrue(!info.isPadded()); assertTrue(!info.isPrivate()); assertTrue(!info.isProtected()); assertTrue(!info.isRiffWav()); assertEquals(info.getFrequency() , 8000); assertEquals(info.getHeaderBitRate() , 32); //18-winamp 8-encspot////////////////////////////////////// assertEquals(info.getLayer_Numeric() , 3); assertEquals(info.getLengthInSeconds() , 3); //5-winamp 10-encspot///////////////////////////////////// assertEquals(info.getMode() , "Single Channel"); assertEquals(info.getVersion_Numeric() , 2.5d, 0D); assertEquals(info.getNumberOfFrames() , 24); //149-winamp&encspot////////////////////////////////////// assertEquals(info.getEmphasis() , "none"); assertTrue(!info.hasVariableBitRate()); // assertEquals(info.getVBRHeader().getScale() , 95); // assertNotNull(info.getVBRHeader().getTableOfContents()); /* mpg2layI_128k_f54_22050hz_joint_CRCOrig_test33.mp3 */ info = newMP3Info(file[10]); assertEquals(info.getFileSize(), 22572L); assertEquals(info.getBitRate() , 128); assertTrue(!info.isCoprighted()); assertTrue(info.isOriginal()); assertTrue(info.isPadded()); assertTrue(!info.isPrivate()); assertTrue(info.isProtected()); assertTrue(!info.isRiffWav()); assertEquals(info.getFrequency() , 22050); assertEquals(info.getHeaderBitRate() , 128); assertEquals(info.getLayer_Numeric() , 1); assertEquals(info.getLengthInSeconds() , 1); assertEquals(info.getMode() , "Joint Stereo"); assertEquals(info.getVersion_Numeric() , 2.0d, 0D); assertEquals(info.getNumberOfFrames() , 1); //54-winamp no encspot////////////////////////////////////// assertEquals(info.getEmphasis() , "none"); assertTrue(!info.hasVariableBitRate()); /* mpg2layII_16k_f56_24000hz_joint_CRCOrigID3v1&2_test27.mp3 */ info = newMP3Info(file[11]); assertEquals(info.getFileSize(), 4224L); assertEquals(info.getBitRate() , 16); assertTrue(!info.isCoprighted()); assertTrue(info.isOriginal()); assertTrue(!info.isPadded()); assertTrue(!info.isPrivate()); assertTrue(info.isProtected()); assertTrue(!info.isRiffWav()); assertEquals(info.getFrequency() , 24000); assertEquals(info.getHeaderBitRate() , 16); assertEquals(info.getLayer_Numeric() , 2); assertEquals(info.getLengthInSeconds() , 2); //1-winamp 43-musicmatch(correct)////////////////////////// assertEquals(info.getMode() , "Joint Stereo"); assertEquals(info.getVersion_Numeric() , 2.0d, 0D); assertEquals(info.getNumberOfFrames() , 44); // 56-winamp no encspot////////////////////////////////// assertEquals(info.getEmphasis() , "none"); assertTrue(!info.hasVariableBitRate()); /* mpgPlus_210k-VBR_f1149_441hz_joint_protectedUnt_NOTm1lay-448k-f540-5015.mpc */ info = newMP3Info(file[14]); assertEquals(info.getFileSize(), 789752L); assertEquals(info.getBitRate() , 448); //448-winamp 210-encspot assertTrue(info.isCoprighted()); assertTrue(!info.isOriginal()); assertTrue(info.isPadded()); assertTrue(!info.isPrivate()); assertTrue(!info.isProtected()); assertTrue(!info.isRiffWav()); assertEquals(info.getFrequency() , 44100); assertEquals(info.getHeaderBitRate() , 448); //448-winamp 210-encspot assertEquals(info.getLayer_Numeric() , 1); assertEquals(info.getLengthInSeconds() , 14); //30-encspot assertEquals(info.getMode() , "Joint Stereo"); assertEquals(info.getVersion_Numeric() , 1.0d, 0D); assertEquals(info.getNumberOfFrames() , 65); // 540-winamp 1149-encspot assertEquals(info.getEmphasis() , "50/15 ms"); assertTrue(!info.hasVariableBitRate()); //encspot true /* mpg4_golem160x90first120.avi MPEG 4 files contain a 'possible' MP3 header info = newMP3Info(file[18] ); assertEquals(info.getFileSize(), 743933L); assertEquals(info.getBitRate() , 40); assertTrue(!info.isCoprighted()); assertTrue(!info.isOriginal()); assertTrue(!info.isPadded()); assertTrue(info.isPrivate()); assertTrue(!info.isProtected()); assertTrue(!info.isRiffWav()); assertEquals(info.getFrequency() , 8000); assertEquals(info.getHeaderBitRate() , 40); assertEquals(info.getLayer_Numeric() , 2); assertEquals(info.getLengthInSeconds() , 555); assertEquals(info.getMode() , "Joint Stereo"); assertEquals(info.getVersion_Numeric() , 2.5d, 0D); assertEquals(info.getNumberOfFrames() , 3857); //39626us - 39624 winamp assertEquals(info.getEmphasis() , "none"); assertTrue(!info.hasVariableBitRate()); */ /* corruptFileWithBadHeaders.mp3 */ try { info = newMP3Info(file[19]); fail("Corrupt file with headers passed!"); //shouldn't make it } catch (Exception e) {} } /** * timing new code */ public void notestTIME() throws Exception { int i = runs; long start = 0; newMP3Info(file[5]); start = System.currentTimeMillis(); while (--i >= 0) { newMP3Info(file[i%9]); } System.out.println("NEW time:" + (System.currentTimeMillis()-start)); } }