Besoin d'aide ?

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

  • Avatar de lavarelkyi
    Membre depuis :
    20/12/2017
    Messages :
    111

    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 ...

Vous ne pouvez pas répondre à ce sujet.