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

Résolu/Fermé
jollymathi Messages postés 9 Date d'inscription dimanche 8 mai 2011 Statut Membre Dernière intervention 8 janvier 2015 - Modifié par Whismeril le 8/01/2015 à 11:34
jollymathi Messages postés 9 Date d'inscription dimanche 8 mai 2011 Statut Membre Dernière intervention 8 janvier 2015 - 8 janv. 2015 à 19:29
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

Anth0x Messages postés 2736 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 20 avril 2016 965
Modifié par Anth0x le 8/01/2015 à 11:58
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
jollymathi Messages postés 9 Date d'inscription dimanche 8 mai 2011 Statut Membre Dernière intervention 8 janvier 2015
Modifié par jollymathi le 8/01/2015 à 12:05
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
Anth0x Messages postés 2736 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 20 avril 2016 965 > jollymathi Messages postés 9 Date d'inscription dimanche 8 mai 2011 Statut Membre Dernière intervention 8 janvier 2015
8 janv. 2015 à 12:11
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
jollymathi Messages postés 9 Date d'inscription dimanche 8 mai 2011 Statut Membre Dernière intervention 8 janvier 2015
8 janv. 2015 à 12:14
Merci, je vais regarder ça et je vous tiendrez au courant !
0
Anth0x Messages postés 2736 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 20 avril 2016 965 > jollymathi Messages postés 9 Date d'inscription dimanche 8 mai 2011 Statut Membre Dernière intervention 8 janvier 2015
Modifié par Anth0x le 8/01/2015 à 12:33
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
jollymathi Messages postés 9 Date d'inscription dimanche 8 mai 2011 Statut Membre Dernière intervention 8 janvier 2015
8 janv. 2015 à 12:48
Oui certainement. En tout cas ton lien semble correspondre à ce que je recherche.
0
Ben314 Messages postés 2312 Date d'inscription lundi 12 décembre 2011 Statut Membre Dernière intervention 1 mai 2017 1 491
8 janv. 2015 à 12:05
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
jollymathi Messages postés 9 Date d'inscription dimanche 8 mai 2011 Statut Membre Dernière intervention 8 janvier 2015
8 janv. 2015 à 12:08
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
Ben314 Messages postés 2312 Date d'inscription lundi 12 décembre 2011 Statut Membre Dernière intervention 1 mai 2017 1 491
Modifié par Ben314 le 8/01/2015 à 12:21
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
jollymathi Messages postés 9 Date d'inscription dimanche 8 mai 2011 Statut Membre Dernière intervention 8 janvier 2015
8 janv. 2015 à 12:28
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
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 8/01/2015 à 13:00
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jollymathi Messages postés 9 Date d'inscription dimanche 8 mai 2011 Statut Membre Dernière intervention 8 janvier 2015
8 janv. 2015 à 15:39
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
Anth0x Messages postés 2736 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 20 avril 2016 965
Modifié par Anth0x le 8/01/2015 à 15:48
Donc en gros c'était juste ta balise audi html qui n'était pas bien codé/balisé ^^
0
jollymathi Messages postés 9 Date d'inscription dimanche 8 mai 2011 Statut Membre Dernière intervention 8 janvier 2015
8 janv. 2015 à 19:29
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