Besoin d'aide ?

Problème de lecture d'un fichier mp3 avec fseek

Avatar de lavarelkyi
lavarelkyi

Salut, alors j'ai un script qui doit normalement me renvoyer la durée de lecture d'un fichier mp3, mais je ne sais pourquoi j'ai une erreur disant ceci : Warning: fseek(): stream does not support seeking

Voici mon appel de ce script :

if($validators->passes()){
            $musique = $request->file('musique');
            if($musique){
                //Compter les derniers enregistrés afin de les ajouter a la playlist
                $count=0;
                foreach ($musique as $chanson) {
                $musiques = new Chanson();
                $musiques->album_id = $request->nom_album;
                $music_full_name = time().$chanson->getClientOriginalName();
                $upload_path = config('musique.path');
                $music_url = $upload_path.$music_full_name;
                $success = $chanson->move($upload_path,$music_full_name);
                if($success){
                    $musiques->title = $music_full_name;
                    $musiques->paths = asset($music_url);
                    $mp3file = new MP3File($musiques->paths);
                    $duremp3 = MP3File::formatTime($mp3file->getDuration());
                    $musiques->save();
                    $count++;
                }
            }
            }

ensuite la fonction renvoyant la durée:

public function getDuration($use_cbr_estimate=false)
    {
        $fd = fopen($this->filename, "rb");
        // dd($fd);
        $duration=0;
        $block = fread($fd, 100);
        // dd($block);
        $offset = $this->skipID3v2Tag($block);
        fseek($fd, $offset, SEEK_SET); //Je crois que l'erreur ce trouve à ce niveau mais je ne sais comment le resoudre
        while (!feof($fd))
        {
            $block = fread($fd, 10);
            if (strlen($block)<10) { break; }
            //looking for 1111 1111 111 (frame synchronization bits)
            else if ($block[0]=="\xff" && (ord($block[1])&0xe0) )
            {
                $info = self::parseFrameHeader(substr($block, 0, 4));
                if (empty($info['Framesize'])) { return $duration; } //some corrupt mp3 files
                fseek($fd, $info['Framesize']-10, SEEK_CUR);
                $duration += ( $info['Samples'] / $info['Sampling Rate'] );
            }
            else if (substr($block, 0, 3)=='TAG')
            {
                fseek($fd, 128-10, SEEK_CUR);//skip over id3v1 tag size
            }
            else
            {
                fseek($fd, -9, SEEK_CUR);
            }
            if ($use_cbr_estimate && !empty($info))
            { 
                return $this->estimateDuration($info['Bitrate'],$offset); 
            }
        }
        return round($duration);
    }

Merci de bien vouloir m'aider à resoudre se problème ...

Posté il y a 1 an

Vous ne pouvez pas répondre à ce sujet.