Je construis une petite archive sonore pour nos clients internes, afin qu'ils puissent rechercher des sons et des effets et les utiliser. Pour cela je cours le petit outil MAMP, qui partage un dossier plein de fichiers audio sur le réseau. Un petit script php répertorie les fichiers, lit les types de fichiers et les tailles de fichier et les affiche dans une table html. J'ai également inclus un script de filtre de table pour rechercher des noms de fichiers spécifiques.Répertoire Liste des fichiers audio, besoin d'une solution de lecteur audio
Je suis très heureux avec la solution jusqu'à présent.
Maintenant, j'ai fait quelques tests et je voudrais le modifier un peu et le rendre plus convivial. Par exemple, quand je trouve un son que je voudrais entendre, je dois le cliquer, une nouvelle fenêtre s'ouvre et le lecteur de safari intégré joue le son. Si je l'aime, je dois revenir en arrière et télécharger le fichier via un clic droit et "enregistrer sous ...".
Je voudrais simplifier cela. Le meilleur pour moi serait un lecteur audio sur le même site, j'ai donc intégré un simple lecteur html5. Mais comment puis-je faire jouer au lecteur le fichier que je suis en train de cliquer sur la table? Comme source? Et jouer un nouveau fichier si j'en choisis un?
Voici le script php:
<table id="table" class="sortable table active">
<thead>
<tr class="header">
<th>
<div>Name</div>
</th>
<th width="150px">
<div>Type</div>
</th>
<th width="100px">
<div>Size</div>
</th>
</tr>
</thead>
<tbody>
<?php
// Adds pretty filesizes
function pretty_filesize($file) {
$size = filesize($file);
if ($size < 1024) {
$size = $size . " Bytes";
} elseif (($size < 1048576) && ($size > 1023)) {
$size = round($size/1024, 1) . " KB";
} elseif (($size < 1073741824) && ($size > 1048575)) {
$size = round($size/1048576, 1) . " MB";
} else {
$size = round($size/1073741824, 1) . " GB";
}
return $size;
}
// Checks to see if veiwing hidden files is enabled
if($_SERVER['QUERY_STRING']=="hidden")
{$hide="";
$ahref=".";
$atext="Hide";}
else
{$hide=".";
$ahref="./?hidden";
$atext="Show";}
// Opens directory
$myDirectory=opendir(".");
// Gets each entry
while($entryName=readdir($myDirectory)) {
$dirArray[]=$entryName;
}
// Closes directory
closedir($myDirectory);
// Counts elements in array
$indexCount=count($dirArray);
// Sorts files
sort($dirArray);
// Loops through the array of files
for($index=0; $index < $indexCount; $index++) {
// Decides if hidden files should be displayed, based on query above.
if(substr("$dirArray[$index]", 0, 1)!=$hide) {
// Resets Variables
$favicon="";
$class="file";
// Gets File Names
$name=$dirArray[$index];
$namehref=$dirArray[$index];
// Separates directories, and performs operations on those directories
if(is_dir($dirArray[$index]))
{
$extn="<Directory>";
$size="<Directory>";
$sizekey="0";
$class="dir";
// Gets favicon.ico, and displays it, only if it exists.
if(file_exists("$namehref/favicon.ico"))
{
$favicon=" style='background-image:url($namehref/favicon.ico);'";
$extn="<Website>";
}
// Cleans up . and .. directories
if($name=="."){$name=". (Current Directory)"; $extn="<System Dir>"; $favicon=" style='background-image:url($namehref/favicon.ico);'";}
if($name==".."){$name=".. (Parent Directory)"; $extn="<System Dir>";}
}
// File-only operations
else{
// Gets file extension
$extn=pathinfo($dirArray[$index], PATHINFO_EXTENSION);
// Prettifies file type
switch ($extn){
case "png": $extn="PNG Image"; break;
case "jpg": $extn="JPEG Image"; break;
case "jpeg": $extn="JPEG Image"; break;
case "svg": $extn="SVG Image"; break;
case "gif": $extn="GIF Image"; break;
case "ico": $extn="Windows Icon"; break;
case "txt": $extn="Text File"; break;
case "log": $extn="Log File"; break;
case "htm": $extn="HTML File"; break;
case "html": $extn="HTML File"; break;
case "xhtml": $extn="HTML File"; break;
case "shtml": $extn="HTML File"; break;
case "php": $extn="PHP Script"; break;
case "js": $extn="Javascript File"; break;
case "css": $extn="Stylesheet"; break;
case "pdf": $extn="PDF Document"; break;
case "xls": $extn="Spreadsheet"; break;
case "xlsx": $extn="Spreadsheet"; break;
case "doc": $extn="Microsoft Word Document"; break;
case "docx": $extn="Microsoft Word Document"; break;
case "zip": $extn="ZIP Archive"; break;
case "htaccess": $extn="Apache Config File"; break;
case "exe": $extn="Windows Executable"; break;
default: if($extn!=""){$extn=strtoupper($extn)." File";} else{$extn="Unknown";} break;
}
// Gets and cleans up file size
$size=pretty_filesize($dirArray[$index]);
$sizekey=filesize($dirArray[$index]);
}
// Output
echo("
<tr class='$class'>
<td><a href='$namehref'$favicon' class='name'>$name</a></td>
<td><a href='$namehref'>$extn</a></td>
<td sorttable_customkey='$sizekey'><a href='$namehref' align='right'>$size</a></td>
</tr>");
}
}
?>
</tbody>
</table>
Voici le script de filtre:
(function(document) {
'use strict';
var LightTableFilter = (function(Arr) {
var _input;
function _onInputEvent(e) {
_input = e.target;
var tables = document.getElementsByClassName(_input.getAttribute('data-table'));
Arr.forEach.call(tables, function(table) {
Arr.forEach.call(table.tBodies, function(tbody) {
Arr.forEach.call(tbody.rows, _filter);
});
});
}
function _filter(row) {
var text = row.textContent.toLowerCase(), val = _input.value.toLowerCase();
row.style.display = text.indexOf(val) === -1 ? 'none' : 'table-row';
}
return {
init: function() {
var inputs = document.getElementsByClassName('filter');
Arr.forEach.call(inputs, function(input) {
input.oninput = _onInputEvent;
});
}
};
})(Array.prototype);
document.addEventListener('readystatechange', function() {
if (document.readyState === 'complete') {
LightTableFilter.init();
}
});})(document);
Et c'est le joueur simple, plus d'un espace réservé en ce moment:
<audio controls autoplay style="width:40%; max-height:100%;"></audio>
Y at-il un moyen de cliquer sur le nom de fichier et le joueur html5 le joue?
Merci
utiliser javascript pour définir la source de l'audio - mais il n'y a pas suffisamment de détails dans le code affiché pour commenter plus – RamRaider
Je suis désolé, je postet maintenant tout le script. – Doyle