SAPI, JavaScript et PHP (rien que ca :p)
Bonjour à tous,
Je vous explique mon problème. Je dois intégrer la voix à une application web, en utilisant SAPI (Speech API by Windows). Première contrainte, utiliser les ActiveX pour pouvoir utiliser SAPI et donc, pas le choix, utiliser IE. On trouve quelques exemples de code en javascript sur le net (pratiquement toujours les mêmes en fait), qui fonctionnent plus ou moins bien. Toujours est il que j'ai réussi à faire parler mon ordinateur à un moment donné.
Le soucis étant, que ce que l'on souhaite faire dire à la machine est récupéré d'une BBD, des variables php donc.
La aussi, on trouve des exemples pour faire du javascript avec du php. Sauf que... ca marche pas !! :cry:
Rien a faire, on a tourné le problème dans tous les sens, ca refuse de dire un traitre mot et comble du désespoir, ce qui marchait... ne marche plus. Même en revenant au code de départ... Plus moyen de tirer un mot de ma machine.
[drama] Vous êtes mon dernier espoir ! [/drama]
Voila mon code, si jamais cela peut vous inspirer une solution... Merci d'avance ! ;)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="language" content="fr" />
<meta http-equiv="Content-Type" content="html; charset=utf-8" />
<meta http-equiv="Content-Script-Type" content="javascript" />
<title>Talking Page</title>
<script type="javascript">
// check if activeXobject is usable
if (window.ActiveXObject) {
var VoiceObj = new window.ActiveXObject("SAPI.SpVoice");
} else {
alert('ActiveX non disponible (seulement sous IE).');
}
function SpeakText (text_to_speech) {
if (VoiceObj) {
VoiceObj.Speak(text_to_speech, 1);
} else {
alert ('VoiceObj non défini.');
}
}
</script>
</head>
<body>
<?php
$text_php = "This is a test which should be efficient on Internet Explorer.";
?>
<!-- Methode 0 -->
<script type="javascript">
var text = "This is a test which should be efficient on Internet Explorer.";
</script>
<!-- Méthode 1 -->
<?php
echo '<script type="javascript">
var text1 = "'.$text_php.'";
</script>';
?>
<!-- Méthode 2 -->
<script type="javascript">
var text2 = "<?php echo $text_php; ?>";
</script>
<!-- Bouton -->
<input onclick="SpeakText(text);" type="button" value="Repeat" />
</body>
</html> |
Parmis les principaux messages d'erreur reçus :
- Un compasant ActiveX ne peut pas créer un objet.
- Objet attendu. (pour le bouton)
- VoiceObj à la valeur Null ou n'est pas un objet. (dans la fonction SpeakText dans le header. Il arrive même a me la coller 2 fois à cette ligne.)
Sinon quand "tout va bien", il me dit que mes variables 'text/text1/text2' ne sont pas définies, sachant qu'avant la "méthode 0" fonctionnait et plus maintenant. Il ne me demande même plus d'activer les ActiveX alors que j'y ai droit à chaque fois "normalement".
En espérant ne pas avoir fait trop de fautes et avoir placé ce message dans le bon forum. ^^'
OnLoad qui s'exécute pas en premier...
Whooch ! Ca fonctionne ! Enfin ! Alléluia !!
Le problème venait d'Internet Explorer (je le savais ! è_é) et de ses paramètres de sécurité ! Un ptit bidouillage, des autorisations accordées et le tour est joué ! Au final, s'était pas grand chose... c'est fou comme on peut perdre du temps pour rien.
Maintenant, deuxième problème : onLoad en dernier ?
Lorsque j'insère ce code dans le site, je souhaiterai qu'il parle à l'ouverture de la page. Je met donc le onLoad="chargement();" dans ma balise body. Rien d'extraordinaire. Sauf que... On entends rien et IE me dit que vox n'est pas défini !! Quelques alert bien placées et on se rend compte que les scripts de synthèse vocal placé entre les balises body (dans un div) s'exécute avant la fonction chargement ! Le onload s'exécute après...
J'avoue être un peu perplexe. Des suggestions ?