mp3 aufbau



  • Hallo ich bin immer noch dabei mit allen möglichen Dateien herumzuspielen.
    Nachdem ich es geschafft habe MP3-Tags auslesen zu lassen möchte ich nun
    die MP3 Frames auslesen.

    Wenn ich mich nicht irre beginnt ein Frame immer mit 11 Bits '1'.

    Nunja, ich versuche mir provisorisch was zusammenzuschustern, aber im moment klappt es noch nicht ganz so wie ich es will:

    Als erstes möchte ich mir eine RandomAccessFile anlegen, die ich aus einer MP3 erzeuge. Der Einfachkeit halber ist diese bereits festgelegt, es muss also nichts überprüft werden:

    RandomAccessFile raf;
    raf = new RandomAccessFile(new File("test.mp3"),"r");
    

    Weiterhin möchte ich erstmal nicht alle aber eine Menge bytes einlesen:

    byte[] b= new byte[50000];
    raf.read(b);
    

    diese Bytes wandel ich mir nun weil ich zunächst mal keine andere ahnung habe wie ichs machen sollte um in einen String der aus Nullen und einsen besteht die die einzelnen bytes repräsentieren, dafür habe ich die Funktion tiBit

    public static String toBit(byte[] arg)
    {
            String r = "";
    	for(int i=0; i< arg.length; i++)
    	{
    		if( arg[i] >= 0)
    		{
    			String tstr = "";
    			for( int j =0; j < 7; j++)
    			{
    				tstr = tstr + arg[i]% 2;
    				arg[i] /= 2;
    			}
    			tstr = tstr + 0;
    			r = r + invert(tstr); 
    		}
    		else
    		{
    			int tmp = (int) arg[i];
    			tmp = tmp +256;
    			String tstr = "";
    			for( int j =0; j < 7; j++)
    			{
    				tstr = tstr + arg[i]% 2;
    				arg[i] /= 2;
    			}
    			tstr = tstr + 1;
    			r = r + invert(tstr); 
    		}
    	}
    	return r;
    }
    

    die invertfunktion dreht mir einen string um, auch das ist nicht auf profiniveau sollte aber funktionieren denke ich:

    public static String invert(String a)
    {
    
    	char[] arr = new char[a.length()];
    	for(int i=0; i< a.length(); i++)
    	{
    		arr[i] = a.charAt(a.length()-(i+1));
    	}
    	return new String(arr);
    }
    

    nun sollte ich eine menge Nullen und einsen haben, die eig genau meine mp3 wiedergeben.
    NUn möchte ich Frames suchen, ich will wissen wie viele ich finde.

    public static int findElevenOnes(String a)
    {
    	int matches = 0;
    	int t = 0;
    	for(int i =0; i< a.length(); i++)
    	{
    		if(a.charAt(i)== '1')
    		{
    			t = t+1;
    			if(t == 11)
    			{
    				matches++;
    				t=0;
    			}
    	}
    		else
    		{
    			t = 0;
    		}
    	}
    	return matches;
    }
    

    das ganze habe ich jetzt mal auf meine test.mp3 losgelassen.
    habe aber keinen einzigen treffer.

    Stelle ich mir das alles zu einfach vor oder hab ich irgendwo einen denkfehler oder nur einen kleienn fehler?

    danke im voraus^^



  • Ach, hab es geschafft!

    Kann geschlossen werden



  • dass ich schreibe dass geschlossen werden kann wenn ich gar nicht anwesend war...
    da hat sich ein witzbold einen scherz erlaubt...

    thema ist noch relevant auch wenn ich zumindest einen fehler gefunden habe
    [wie komm ich auf diese 2erkomplementumrechnung?!]



  • is zwar keine direkte lösung aber hier findest ein bissi mp3 code
    http://www.wotsit.org/list.asp?search=mp3&button=GO!



  • ich habe jetzt die mp3 in einen string aus nullen und einsen umgewandelt, der die bits repräsentiert.

    Nun versuche ich die frames zu finden.

    laut http://www.fh-jena.de/contrib/fb/et/personal/ansorg/mp3/mp3_2_res.htm
    stehen am anfang eines frames 12 [oder 11 im falle von mpeg 2.5] einsen.

    Diese aufzuspüren ist kein Problem. Nur wie kann ich entscheiden ob ich damit einen neuen Frame entdeckt habe oder diese folge zufällig ist?
    Soviel ich bisher gelesen habe steht ja nirgends die länge eines frames...

    bin für jeden tipp dankbar



  • Vielleicht hilft dir das hier weiter:

    http://oreilly.com/catalog/mp3/chapter/ch02.html#71109

    ziemlich weit unten steht was über Frames und deren Länge...


Anmelden zum Antworten