Fonction php qui renvoie le bitrate (en kbps) d'un fichier mp3

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 943 fois - Téléchargée 33 fois

Contenu du snippet

Voici une fonction assez simple qui prend en paramètre d'entrée le chemin vers un fichier (type MP3)
et renvoie le bitrate de ce mp3 (en kbps)
Exemple : 128 kbps

On pourrait également récupérer plein d'autres infos (ID3) mais j'ai simplifié pour ceux qui n'ont besoin QUE du bitrate.

Source / Exemple :


//  Classe pour trouver le bitrate du fichier mp3
class mp3var 
{                   
	var $bitrate1 = array (
			0x10 =>  32,
			0x20 =>  40,
			0x30 =>  48,
			0x40 =>  56,
			0x50 =>  64,
			0x60 =>  80,
			0x70 =>  96,
			0x80 => 112,
			0x90 => 128,
			0xA0 => 160,
			0xB0 => 192,
			0xC0 => 224,
			0xD0 => 256,
			0xE0 => 320
	);
	
	
	var $bitrate2 = array (
			0x10 =>   8,
			0x20 =>  16,
			0x30 =>  24,
			0x40 =>  32,
			0x50 =>  40,
			0x60 =>  48,
			0x70 =>  56,
			0x80 =>  64,
			0x90 =>  80,
			0xA0 =>  96,
			0xB0 => 112,
			0xC0 => 128,
			0xD0 => 144,
			0xE0 => 160
	);
	

	// Methode qui renvoie le bitrate du fichier (MP3) entré
	function getBitrate($nom_fichier)
	{           
		$done=false;
		if(!$file=fopen($nom_fichier, "r")) 
		{ 
			print "IMPOSSIBLE D'OUVRIR LE FICHIER $nom_fichier";
			return false;
		} 
		else 
		{
			$point=0;
			// recherche du ID3
			while ((!feof($file)) and (!$done))
			{
				fseek($file, $point);
				$data=fread($file,2);
				$data=unpack ("Cint/Cint2",$data);
				if (($data[int] == 0xFF) and ($data[int2] < 0xFF) and ($data[int2] >= 0xF0))
				{
					$done=true;
					$id3=$point;
				}
				$point++;
			}
			fseek($file, $id3);   // On se déplace au bon endroit dans le fichier $file
			$bindata = fread($file, 4);  // On lit les 4 prochains octets
			fclose($file);
			if(! ($bindata = unpack('nint/C2', $bindata)) ) return false;
			if (($bindata[int] & 0xFFF0) != 0xFFF0) return false;
			if (($bindata[int] & 0x08) == 0x08) 
				$this->info[bitrate] = $this->bitrate1[($bindata[1] & 0xF0)];
			if (($bindata[int] & 0x08) == 0x00) 
				$this->info[bitrate] = $this->bitrate2[($bindata[1] & 0xF0)];
			// On retourne le Bitrate
			return $this->info[bitrate];
		}
	}  // Fin de la fonction
       
}  // Fin de la classe

//         APPEL DE LA FONCTION . . . UTILISATION		
		

/************************************************************/
/*  Calcul et affichage du bitrate du fichier MP3 (en kbps)  */
/************************************************************/
		
$fichier = "../MonFichier.mp3"; 	// Chemin vers le fichier mp3
$mp3 = new mp3var;		// Instanciation de la classe "mp3var"
$btr = $mp3->getBitrate($fichier);	// Appel de la méthode getBitrate()
echo $btr;			// Affichage du bitrate
print " kbps";

Conclusion :


Pas la peine de tout expliquer.
On ouvre le fichier
on va chercher les bons bits
on fait un MASK pour récupérer ce qui nous intéresse, et voilà le travail,
. . . ;o) enjoy !

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
lundi 9 avril 2007
Statut
Membre
Dernière intervention
24 novembre 2012

salut, merci pour ta sources, elle fonctionne, mais dit mois, quel est la formule pour calculer la durée de la zic?
Messages postés
7
Date d'inscription
jeudi 5 juillet 2007
Statut
Membre
Dernière intervention
23 juin 2010

Quece que c'est que int2? Ce n'est pas une variable, ce n'est pas déclaré...
Use of undefined constant int - assumed 'int'

Ca ne fait pas une moyenne pour les bitrates variables au cours du temps? Comme lire tout le fichier et faire une moyenne?

merci.
Messages postés
1
Date d'inscription
vendredi 30 septembre 2005
Statut
Membre
Dernière intervention
7 janvier 2007

Bravo, ton script et assez simple et fonctionnel.
Mais il ya un petit hic. Qu'en est-t-il des mp3
avec un bitrate de 184, 164 ,etc. Malheursement ca existe,
alors que faire pour remedier à ce problème.
Car j'ai remarqué que les fichiers qui ont comme valeurs autres
que ceux spécifiées dans tes 2 tableaux (array) retournent 128 kbits ????
De même que des fois un fichier de 192 kbits retourne 128 !!!
Messages postés
116
Date d'inscription
vendredi 18 février 2005
Statut
Membre
Dernière intervention
18 août 2006

Bonjour,
Sans doute hors sujet, mais je tente...

Je cherhe une fonction (sûrement encore plus simple) qui permet de vérifier qu'un fichier est bien un mp3 et pas un jpg renommé en mp3 par ex.

J'ai bien un site (http://www.mp3-tech.org/) qui donne plein d'infos sur les frame header des fichiers MPEG Audio Layer I/II/III, mais je ne sais vraiment pas comment vérifier tout celà...

merci.
Messages postés
2093
Date d'inscription
mercredi 21 août 2002
Statut
Contributeur
Dernière intervention
23 août 2020
2
Pour la variation du bitrate c'est simple c'est qu'l s'agit d'un MP3 VBR (Variable BitRate) en opposition à un MP CBR (Constant BitRate)
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.