Ecoute d'un extrait de musique depuis une base de données
Résolu
jollymathi
Messages postés
11
Statut
Membre
-
jollymathi Messages postés 11 Statut Membre -
jollymathi Messages postés 11 Statut Membre -
Bonjour,
Je suis en 2e année de DUT Informatique et je dois réaliser un site de e-commerce proposant un catalogue de musiques. Je souhaiterais pouvoir faire écouter un extrait de chaque musique d'un album. Ces extraits sont enregistrés dans une base de donnée SQL. J'ai déjà réussi à afficher les images des pochettes des oeuvres et je pensais que le code était à peu près le même pour récupérer un extrait mais mon code ne fonctionne pas. Les titres des extraits s'affichent bien et un lecteur de musique apparait brièvement en dessous de chacun.
J'ai cherché des explications sur google mais je ne trouve rien correspondant à mon problème. J'espère avoir été assez claire. Quelqu'un pourrait-il m'aider ?
Voici le code qui affiche les noms et les extraits (listeEnrCompo.php):
Le code qui récupère un enregistrement en fonction de son identifiant, repris du code pour récupérer une image (Enregistrement.php) :
Edit: Précision du langage dans la coloration syntaxique.
Je suis en 2e année de DUT Informatique et je dois réaliser un site de e-commerce proposant un catalogue de musiques. Je souhaiterais pouvoir faire écouter un extrait de chaque musique d'un album. Ces extraits sont enregistrés dans une base de donnée SQL. J'ai déjà réussi à afficher les images des pochettes des oeuvres et je pensais que le code était à peu près le même pour récupérer un extrait mais mon code ne fonctionne pas. Les titres des extraits s'affichent bien et un lecteur de musique apparait brièvement en dessous de chacun.
J'ai cherché des explications sur google mais je ne trouve rien correspondant à mon problème. J'espère avoir été assez claire. Quelqu'un pourrait-il m'aider ?
Voici le code qui affiche les noms et les extraits (listeEnrCompo.php):
<?php
$codeOeuvre = $_GET['CodeOeuvre'];
$codeMus = $_GET['CodeMus'];
$driver = 'sqlsrv';
$host = 'xxx';
$nomDb = 'xxx';
$user = 'xxx';
$password = 'xxx';
$pdodsn = "$driver:Server=$host;Database=$nomDb";
$pdo = new PDO($pdodsn, $user, $password);
// Affichage du compositeur
$requete = "Select Nom_Musicien From Musicien Where Code_Musicien = $codeMus";
$arr = $pdo->query($requete)->fetch();
// et du titre de l'oeuvre
$requete = "Select Titre_Oeuvre From Oeuvre Where Code_Oeuvre = $codeOeuvre";
$arr2 = $pdo->query($requete)->fetch();
echo '<h1>' . $arr2['Titre_Oeuvre'] . ' de ' . $arr['Nom_Musicien'] . '</h1>';
//Affichage des enregistrements
$requete = "SELECT distinct Code_Morceau, Titre "
. "FROM Enregistrement "
. "Inner Join Composition on Composition.Code_Composition=Enregistrement.Code_Composition "
. "Inner Join Composition_Oeuvre on Composition_Oeuvre.Code_Composition=Composition.Code_Composition "
. "Where Composition_Oeuvre.Code_Oeuvre=$codeOeuvre";
foreach ($pdo->query($requete) as $row) {
echo '<p>'. $row['Titre'] .'</p>';
echo '<audio src="Enregistrement.php?CodeMorc=' . $row['Code_Morceau'] . '" controls></audio>';
}
$pdo = null;
?>
Le code qui récupère un enregistrement en fonction de son identifiant, repris du code pour récupérer une image (Enregistrement.php) :
<?php
$pdo = new PDO("sqlsrv:Server=xxx;Database=xxx", "xxx", "xxx");
$stmt = $pdo->prepare("SELECT Extrait "
. "FROM Enregistrement "
. "WHERE Code_Morceau=?");
$stmt->execute(array($_GET['CodeMorc']));
$stmt->bindColumn(1, $lob, PDO::PARAM_LOB);
$stmt->fetch(PDO::FETCH_BOUND);
// $image = pack("H*", $lob); // A modifier, adapté pour images actuellement
//header("Content-Type: image/jpeg");// idem
echo $stmt;
?>
Edit: Précision du langage dans la coloration syntaxique.
5 réponses
-
Salut,
Solution ici : http://41mag.fr/lecture-dun-fichier-mp3-ou-audio-en-html5.html
T'es sur que tu as enregistrer un fichier audio dans ta base de donnée ? tu n'a pas fait juste une url et stocké les extrait audio sur ton FTP ? parce-que j'ai jamais vu de fichier audio "physiquement" dans une bdd...-
Et bien je ne sais pas trop comment ils sont stockés. L'IUT nous a donné une base de donnée. Dedans il y a une table Enregistrement dans laquelle il y a un champ Extrait qui est de type VARCHAR. Je dois avouer que je ne vois pas bien comment on peut utiliser ça pour avoir de la musique.
Et ton lien ne m'aide pas malheureusement. C'est ce que je trouve partout mais le problème est que ce n'est pas un fichier mp3 que j'ai.
Je devrais peut-être demander des détails à l'administrateur de l'IUT.- Je crois que j'ai trouver la solution : http://methylbro.titaxium.org/post/2009/11/15/mysql-stocker-un-fichier-dans-une-base-de-donnees
Je ne connais pas les BLOB ou LONGBLOB, c'est donc bien possible de stocker des fichiers directement dans une bdd.
C'est en 4 parties, tu devrais trouver ton bonheur :
http://methylbro.titaxium.org/post/2009/11/24/php-mysql-enregistrer-et-lire-des-fichiers-dans-une-base-de-donnees
-
-
-
-
Salut
Je sais pas si ça peut vous aidez mais j'utilise ça sur mon site pour diffuser de la musique :
http://www.dewplayer.fr -
Merci Ben314 mais j'ai déjà un lecteur, le problème est juste de récupérer les extraits musicaux de la base de données.
-
Moi je aussi je me demande comment vous stocker vos MP3 ???
il ne sont pas dans la BD ??? il sont sur le FTP !! ou ailleurs ???
Du coup dans la bd il suffit juste de mettre le lien vers votre fichier .mp3, puis de l'appeler dans vos page avec une joli bout de code PHP/mysql
Selon l'hébergeur faut stocker le lien complet (http....) soit le lien direct /mp3/son.mp3
C'est pas évidement à expliqué, puis moi et pdo ont est pas franchement ami ^^ -
-
-
Salut jollymathi,
Si ton fichier son est stocké dans la base, et que tu veux le jouer avec html5, tu peux sauvegarder les données récupérées avec ta requête dans un répertoire accessible par le serveur dans un fichier avec un nom unique.
Puis passer ce fichier à la balise audio de html5.
lien utiles :
https://www.php.net/manual/fr/function.tempnam.php
https://www.php.net/manual/fr/function.uniqid.php
https://stackoverflow.com/questions/460164/unique-and-temporary-file-names-in-php
https://www.w3schools.com/html/html5_audio.asp
https://www.w3schools.com/tags/ref_av_dom.asp
Si tu ignores le type de ton fichier son, tu peux le trouver de plusieurs façons.
sous Linux, utilise la commandefile nomdufichier
.
autrement, ouvre le fichier dans un éditeur hexadécimal, ou même un éditeur de texte, et regarde les données du début où se trouvent les nombres "magiques" de signature du format.
Par exemple, un fichier mp3, selon le format, pourra avoir :
- "FF FB" en hexa, soit une sorte de point et un u accentué en encodage ISO 8859-1,
- ou "49 44 33" en hexa, soit "ID3" en ASCII
https://en.wikipedia.org/wiki/List_of_file_signatures
Dal -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
C'est bon j'ai trouvé ! En fait il fallait bien reprendre le code que j'avais fait pour extraire les images et modifier seulement le header. Voici le code final :
Code de Enregistrement.php :<?php $pdo = new PDO("sqlsrv:Server=xxx;Database=xxx", "xxx", "xxx"); $stmt = $pdo->prepare("SELECT Extrait " . "FROM Enregistrement " . "WHERE Code_Morceau=?"); $stmt->execute(array($_GET['CodeMorc'])); $stmt->bindColumn(1, $data, PDO::PARAM_LOB); $stmt->fetch(PDO::FETCH_BOUND); $musique = pack("H*", $data); header("Content-Type: audio/mpeg"); echo $musique; ?>
Et j'ai légerement modifé le foreach de ListEnrCompo.php :foreach ($pdo->query($requete) as $row) { echo '<p>'. $row['Titre'] .'</p>'; echo '<audio controls="controls" preload="none">' .'<source src="Enregistrement.php?CodeMorc=' . $row['Code_Morceau'] . '" type="audio/mp3" />' .'Votre navigateur n\'est pas compatible' .'</audio>'; }
Je vous remercie pour l'aide que vous m'avez apportée !