nombre = $nombre.'r'.$nombre; $strlen = strlen($this->nombre); $binary = ''; // Contiendra les donnees, juste les donnees. for($i = 0; $i < $strlen; $i++) { $binary .= $this->get_datas('../'.$this->nombre{$i}.'.wav'); } $this->package($binary); } } public function analyse($wav,$arg = FALSE) { if(file_exists('../'.$wav)) { $entete_unpack = 'a4file_type/Lfile_size/a4file_id/A4nom_zone1/Ltaille_zone1/SFormatTag/SChannels/LSamplesPerSec/LAvgBytesPerSec/SBlockAlign/SBitsPerSample/A4nom_data/Ltaille_data'; $fp = fopen('../'.$wav,'r'); $file = fread($fp, 44 ); $entete = unpack($entete_unpack,$file); fclose($fp); if( ($entete['file_type'] !== chr(0x52).chr(0x49).chr(0x46).chr(0x46) ) OR ( $entete['file_id'] !== chr(0x57).chr(0x41).chr(0x56).chr(0x45) ) ) { trigger_error('Le fichier '.$wav.' n\'est pas un fichier wav',E_USER_ERROR); } if(!$arg) return $entete; else return $entete[$arg]; } else { trigger_error('fonction analyse, le fichier '.$wav.' est neccessaire mais manquant', E_USER_ERROR); return FALSE; } } private function get_datas($wav) { if(file_exists('../'.$wav)) { $fp = fopen('../'.$wav,'r'); fseek($fp, 44 ); $datas = fread($fp, $this->analyse($wav, 'taille_data')); fclose($fp); return $datas; } else { trigger_error('fonction analyse, le fichier '.$wav.' est neccessaire mais manquant', E_USER_ERROR); return FALSE; } } private function package($datas) { $entete_pack = 'a4La4A4LSSLLSSA4L'; $entete = $this->analyse('../'.$this->nombre{0}.'.wav'); for($i = 1;$inombre); $i ++) { $entete2 = $this->analyse('../'.$this->nombre{$i}.'.wav'); if($entete !== $entete2) { if($entete['Channels'] !== $entete2['Channels']) { trigger_error('fonction package, un ou plusieurs fichiers wad n\'ont pas le même nombre de canaux',E_USER_ERROR); } if($entete['BitsPerSample'] !== $entete2['BitsPerSample']) { trigger_error('fonction package, un ou plusieurs fichiers wad, n\'on pas le même nombres d\'échantillons par seconde', E_USER_ERROR); } if($entete['SamplesPerSec'] !== $entete2['SamplesPerSec']) { trigger_error('fonction package, un ou plusieurs fichiers wad, n\'ont pas la même fréquence d\'échantillonage', E_USER_WARNING); } } } /* On calcule la taille des donnees que l'on à creer selon la formule de soundeditor */ $entete['taille_data'] = strlen($datas); $entete['taille_data'] /= $entete['BlockAlign']; $entete['taille_data'] *= $entete['BlockAlign']; $entete['file_size'] = 44 + strlen($datas); /* on "pack l entete et on y ajoute les donnees */ $binary = pack($entete_pack, $entete['file_type'],$entete['file_size'],$entete['file_id'],$entete['nom_zone1'], $entete['taille_zone1'],$entete['FormatTag'],$entete['Channels'],$entete['SamplesPerSec'],$entete['AvgBytesPerSec'], $entete['BlockAlign'],$entete['BitsPerSample'],$entete['nom_data'],$entete['taille_data']); $binary .= $datas; /* On transmet ou enregistre */ header('Content-type: audio/x-wav'); header('Content-Disposition: attachment; filename="code.wav"'); echo $binary; } } $wav = new wave($_SESSION['aleat_nbr']); ?>