Ecoute d'un extrait de musique depuis une base de données

Résolu/Fermé
Signaler
Messages postés
9
Date d'inscription
dimanche 8 mai 2011
Statut
Membre
Dernière intervention
8 janvier 2015
-
Messages postés
9
Date d'inscription
dimanche 8 mai 2011
Statut
Membre
Dernière intervention
8 janvier 2015
-
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):
<?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

Messages postés
2708
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
20 avril 2016
968
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...
0
Messages postés
9
Date d'inscription
dimanche 8 mai 2011
Statut
Membre
Dernière intervention
8 janvier 2015

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.
0
Messages postés
2708
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
20 avril 2016
968 >
Messages postés
9
Date d'inscription
dimanche 8 mai 2011
Statut
Membre
Dernière intervention
8 janvier 2015

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
0
Messages postés
9
Date d'inscription
dimanche 8 mai 2011
Statut
Membre
Dernière intervention
8 janvier 2015

Merci, je vais regarder ça et je vous tiendrez au courant !
0
Messages postés
2708
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
20 avril 2016
968 >
Messages postés
9
Date d'inscription
dimanche 8 mai 2011
Statut
Membre
Dernière intervention
8 janvier 2015

En gros cette technique est utile pour évitez tout les problèmes de sécurité lié au FTP, vu qu'une bdd est un peu plus sécurisé "par défaut" ^^

De toute façon si ton IUT te fournis pas de FTP c'est que ton prof d'info veut que tu passe par des BLOB ^^
0
Messages postés
9
Date d'inscription
dimanche 8 mai 2011
Statut
Membre
Dernière intervention
8 janvier 2015

Oui certainement. En tout cas ton lien semble correspondre à ce que je recherche.
0
Messages postés
2243
Date d'inscription
lundi 12 décembre 2011
Statut
Membre
Dernière intervention
1 mai 2017
1 499
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
0
Messages postés
9
Date d'inscription
dimanche 8 mai 2011
Statut
Membre
Dernière intervention
8 janvier 2015

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.
0
Messages postés
2243
Date d'inscription
lundi 12 décembre 2011
Statut
Membre
Dernière intervention
1 mai 2017
1 499
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 ^^
0
Messages postés
9
Date d'inscription
dimanche 8 mai 2011
Statut
Membre
Dernière intervention
8 janvier 2015

La base de données est fournie par l'IUT, du coup je ne sais pas exactement ce qui est dans le champs Extrait de la table Enregistrement.
0
Messages postés
5726
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
19 janvier 2022
964
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 commande
file 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
0
Messages postés
9
Date d'inscription
dimanche 8 mai 2011
Statut
Membre
Dernière intervention
8 janvier 2015

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 !
0
Messages postés
2708
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
20 avril 2016
968
Donc en gros c'était juste ta balise audi html qui n'était pas bien codé/balisé ^^
0
Messages postés
9
Date d'inscription
dimanche 8 mai 2011
Statut
Membre
Dernière intervention
8 janvier 2015

Oui, j'avais pris la version du prof qui apparemment ne fonctionnait pas correctement. Mais il y avait aussi une petite modif à faire dans le code de récupération du fichier.
0