Bonjour à tous.
Je commence par vous faire une présentation de ce que j'ai fait.
J'ai un fichier texte dans lequel je mets des nouvelles.
Le contenu de ce fichier, je veux l'afficher lettre par lettre avec le son de la frappe d'une machine à écrire à chaque affichage d'une lettre. Il me faut bien sûr une pause entre l'affichage de chaque lettre.
J'ai terminé les parties :
- lecture du fichier (en PHP),
- affichage des lettres une par une avec la tempo (JavaScript).
Pour le son, j'ai mis en HTML avec <EMBED> la lecture en boucle de ma frappe au clavier (frappe.wav). Le problème est que le son continue après la fin du chargement de la page. Si je mets la lecture du son dans ma boucle de lecture du fichiers texte, le son arrive avant l'affichage.
Vous pouvez visualiser la page à l'adresse :
[ Lien ]
et pour finir voici mon script. Il y 230 ligne mais si vous retirez le switch sur toutes les lettres de l'alphabet cela le réduit considérablement.
Merci pour votre aide.
<html>
<head>
<!-- Type MIME et table ASCII à utiliser (impératif) -->
<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<!-- Titre de la page -->
<title>Golden Pédale (épreuve de VTT)</title>
<script language="JavaScript">
nb_car=0;
// Fonction d'affichage des lettres
function affiche_lettre()
{
ltxt=txt.length;
if(ltxt>=1)
{
carac_image='';
switch (txt.substr(0, 1))
{
case "A":
case "B":
case "C":
case "D":
case "E":
case "F":
case "G":
case "H":
case "I":
case "J":
case "K":
case "L":
case "M":
case "N":
case "O":
case "P":
case "Q":
case "R":
case "S":
case "T":
case "U":
case "V":
case "W":
case "X":
case "Y":
case "Z":
// Répertoire des majuscules
repertoire='maj/';
// carac_impage = la premiere lettre de la chaine
carac_image=txt.substr(0, 1);
break;
case "a":
case "b":
case "c":
case "d":
case "e":
case "f":
case "g":
case "h":
case "i":
case "j":
case "k":
case "l":
case "m":
case "n":
case "o":
case "p":
case "q":
case "r":
case "s":
case "t":
case "u":
case "v":
case "w":
case "x":
case "y":
case "z":
// Répertoire des minuscules
repertoire='min/';
// carac_impage = la premiere lettre de la chaine
carac_image=txt.substr(0, 1);
break;
case "0":
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
// Répertoire des autres caractères
repertoire='autre/';
// carac_impage = la premiere lettre de la chaine
carac_image=txt.substr(0, 1);
break;
// Répertoire des autres caractères
// carac_image vaut un chaine (le nom de l'image est incompatible
case " ":
repertoire='autre/';
carac_image='espace';
break;
case "à":
repertoire='autre/';
carac_image='agrave';
break;
case "ç":
repertoire='autre/';
carac_image='cced';
break;
case "é":
repertoire='autre/';
carac_image='eaigu';
break;
case "%":
repertoire='autre/';
carac_image='pourcent';
break;
case "&":
repertoire='autre/';
carac_image='etcommer';
break;
case "(":
repertoire='autre/';
carac_image='ouvpar';
break;
case ")":
repertoire='autre/';
carac_image='fermepar';
break;
case ",":
repertoire='autre/';
carac_image='virg';
break;
case ";":
repertoire='autre/';
carac_image='pt-virg';
break;
case "+":
repertoire='autre/';
carac_image='plus';
break;
case "=":
repertoire='autre/';
carac_image='egal';
break;
case ":":
repertoire='autre/';
carac_image='2points';
break;
case "*":
repertoire='autre/';
carac_image='etoile';
break;
case "?":
repertoire='autre/';
carac_image='p-intero';
break;
case ".":
repertoire='autre/';
carac_image='point';
break;
case "/":
repertoire='autre/';
carac_image='slash';
break;
case "#":
carac_image='#';
break;
}
if (carac_image=="#")
{
// un # dans le fichier signifie un retour chariot (BR)
document.all.texte.innerHTML=document.all.texte.innerHTML+"<br>";
nb_car=0;
}
else
{
// Sinon un affiche l'image correspond au caractère ('A' affiche ../actu/maj/A.gif)
document.all.texte.innerHTML=document.all.texte.innerHTML+"<img src=../actu/"+repertoire+carac_image+".gif>";
// Increment le nombre de caractères affichés
nb_car++;
}
// on retire le premier char de la chaine
txt=txt.substr(1)
// sur timout de 150 ms on affiche le char suivant
setTimeout("affiche_lettre()", 150);
// Si 30 char affichés, on renvoit à la ligne (30 char max par ligne)
if (nb_car==30)
{
document.all.texte.innerHTML=document.all.texte.innerHTML+"<br>";
nb_car=0;
}
}
}
</script>
</head>
<body>
<!-- On joue le son d'une frappe en continu -->
<embed src='../sons/frappe.wav' loop="1" width=200 height=55 autostart hidden>
<div id=center>
<div id=texte style=\"color : #000000\">
</div>
</div>
<?php
$total_lig="txt=\"";
// ouverture du fichier texte des actualités
$fichier = fopen("../actu/actu.txt", "r");
// On lit la première ligne pour rien, elle comporte les commentaires.
$ligne=fgets($fichier);
// On lit le fichier en concaténant les lignes et en retirant les 2 derniers char
do
{
$ligne=fgets($fichier);
$total_lig=$total_lig.substr($ligne, 0, strlen($ligne)-2);
}
while (!feof($fichier));
fclose($fichier);
$total_lig=$total_lig."\";";
echo "</body>";
echo "<script language=\"JavaScript\">";
// envoie la chaine 'txt="la chaine a afficher";'
echo $total_lig;
?>
<!-- Affichage des lettres du message -->
affiche_lettre();
</script>
</html>