MP3 Header einlesen !! (problem)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MP3 Header einlesen !! (problem)

    Ich versuche gerade den Header einer MP3-Datei einzulesen um heraus zu finden welche Bitrate das File hat.

    PHP-Code:
    <?php
    $handle
    =opendir(".\\upload\\");
    while (
    $filename readdir ($handle))
    {
        if (
    $filename != "." && $filename != "..")
        {
            echo 
    "$filename \n";
            
    $file_handle fopen (".\\upload\\".$filename"rb");

            
    // 1. Byte als integer ausgeben
            
    $header_byte fread ($file_handle1);
            
           
    settype($header_byte"integer");
           echo 
    $header_byte;

            echo 
    "<br>\n";

            
    fclose ($file_handle);
        }
    }
    closedir($handle);
    ?>
    Mein Problem ist jetzt nur das als integerwert für das erste Byte immer 0 ausgibt. Das erste Byte einer MP3-datei sehen aber so aus: FF

    Wie man nun weiß entspicht FF dem Dezimalwert 255.

    Kann mir jemand einen Tip geben was ich da falsch mache ???

  • #2
    $file_handle = fopen (".upload".$filename, "rb");

    muss das nicht so heißen:

    $file_handle = fopen ('.\upload\\'.$filename, 'rb');
    PHP-Code:
    <?php
    $handle
    =opendir('.\\upload');
    while (
    $filename readdir ($handle))
    {
        if (
    $filename != '.' && $filename != '..')
        {
            echo 
    "$filename n";
            
    $file_handle fopen ('.\\upload\\\\'.$filename'rb');
            if (!
    $file_handle)
            {
                    echo 
    'Datei konnte nicht geöffnet werden.<br />';
                    continue;
            }
            
    // 1. Byte als integer ausgeben
            
    $header_byte fread ($file_handle1);
            
           
    settype($header_byte"integer");
           echo 
    $header_byte;

            echo 
    "<br>n";

            
    fclose ($file_handle);
        }
    }
    closedir($handle);
    ?>
    Zuletzt geändert von mrhappiness; 01.02.2003, 11:27.
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      mir ist nicht klar, weshalb du settype() verwendest.
      settype($header_byte, "integer");
      was soll das bringen?

      hier wird irgendein numerischer wert erwartet, 'FF' ist aber keiner, deshalb wird 0 zurückgegeben.
      martin

      Kommentar


      • #4
        ich denke eher nicht, dass es daran liegt. Er liest ja auch nur ein Zeichen, also kann maximal ein F drinstehen, was allerdings 0 ergibt.

        mach doch vor dem (imo unnötigen) umwandeln per settype das hier: echo '---'.$header_byte.'---'; Was steht da für ne Zahl?
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          also wenn ich das settype nicht mache bekomme ich folgendes Zeichen :

          ÿ

          ich hatte eigentlich gedacht das settype mir den ASCII-Code des Chars liefert, denn dieser währe 255 !!!

          Und übrigens mit FF ist der HEX-Code des ersten Bytes gemeint.

          $file_handle = fopen (".upload".$filename, "rb");

          muss das nicht so heißen:

          $file_handle = fopen ('.\upload\'.$filename, 'rb');
          Ja das muss so heissen nur hat das Forum den Code leider verändert und den \\ gelöscht !!

          Kommentar


          • #6
            Ord is das was du suchst
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Original geschrieben von mrhappiness
              ich denke eher nicht, dass es daran liegt. Er liest ja auch nur ein Zeichen, also kann maximal ein F drinstehen, was allerdings 0 ergibt.
              nee, happy, das ist quatsch...

              das dateisystem arbeitet mit 8 bit = 1 byte gleich wertebereich 0 bis 255.

              wenn du dir mal eine datei in einem hex-editor ansiehst, werden dort die einzelnen bytes ja auch mit zwei zeichen angezeigt, weil 0 bis 255 hexadezimal nun mal 00 bis ff entspricht.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Original geschrieben von martin_de
                settype($header_byte, "integer");
                ...
                hier wird irgendein numerischer wert erwartet, 'FF' ist aber keiner, deshalb wird 0 zurückgegeben.
                ich bezog mich dadrauf und das fread($file_handle,1);
                wollte bloß klarmachen, dass in $header_byte nich zweimal der buchstabe F drinsteht
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  wollte bloß klarmachen, dass in $header_byte nich zweimal der buchstabe F drinsteht
                  ach so.
                  aber eigentlich doch - kommt nur drauf an, in welchem format du dir das byte anzeigen lässt *g*
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    *g* auch wieder wahr

                    aber dann steht in der variablen ja auch 0377 drin
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      @ mrhappiness

                      ord() war genau die funktion die ich brauchte

                      So jetzt habe ich die ersten 32 Bits als String jetzt muss ich den String nur wieder teilen und zwar in 12 , 1 , 2 , 1 , 4 , 2 , 1 , 1 , 2 , 2 , 1 , 1 und 2 byte lange Strings.

                      Gibt es da auch eine nützliche Funktion oder muss ich das alles per 'Hand machen.

                      Kommentar


                      • #12
                        wenn es da ein einheitliches trennzeichen gibt, kannst du die ersten 32bit als ganzes nehmen und dann exploden
                        PHP-Code:
                        $teile=explode($trennzeichen,$die32bit); 
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          Es gibt leider gar kein trennzeichen den der String sieht z.B. so aus:

                          11111111111110111001001001000000

                          ich müßte das ganze jetzt folgendermassen aufsplitten :

                          111111111111 1 01 1 1001 00 1 0 01 00 0 0 00

                          Später nuss ich diese Teile wieder mit bindec() in eine Dezimalzahl umwandeln.

                          Kommentar


                          • #14
                            dann wünsch ich dir viel spaß mit substr *g*
                            Ich denke, also bin ich. - Einige sind trotzdem...

                            Kommentar


                            • #15
                              So ich habe das Script fertig gestellt und es mal in das andere Forum gepostet.

                              MP3 Header einlesen (lösung)
                              Zuletzt geändert von DarkMight0; 01.02.2003, 21:01.

                              Kommentar

                              Lädt...
                              X