IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

SAPI, JavaScript et PHP (rien que ca :p)


Sujet :

JavaScript

  1. #1
    Elyadohr
    Invité(e)
    Par défaut 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 !!

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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. ^^'
    Dernière modification par Elyadohr ; 12/07/2010 à 16h30.

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript">
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Elyadohr
    Invité(e)
    Par défaut
    Voui, j'avais mis ca... mais ca n'avait pas fait grand chose malheureusement. Maintenant, j'ai droit à l'alerte de la fonction SpeakText... donc VoiceObj n'est pas défini...

  4. #4
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
      $text_php = "This is a test which should be efficient on Internet Explorer.";
    ?><!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 charset="utf-8" type="text/javascript">
      function chargement() {
        vox = {};
        // check if activeXobject is usable
        if (window.ActiveXObject) {
          vox.VoiceObj = new window.ActiveXObject("SAPI.SpVoice");
          vox.SpeakText = function  (text_to_speech) {
            this.VoiceObj.Speak(text_to_speech, 1);
          }
        } else {
          alert('ActiveX non disponible (seulement sous IE).');
          vox.SpeakText = function (text_to_speech) {
            alert ('VoiceObj non défini.');
          }
        }
        // Methode 0
        text = "This is a test which should be efficient on Internet Explorer.";
        alert(text)
        //Méthode 2
        text2 = "<?php echo $text_php; ?>";
      }
      </script>
    </head>
     
    <body onLoad="chargement();">
      <!-- Bouton -->
      <input id='btn' onclick="vox.SpeakText(text);" type="button" value="Repeat text" />
      <input id='btn' onclick="vox.SpeakText(text2);" type="button" value="Repeat text2" />
      </body>
    </html>


    A+JYT

  5. #5
    Elyadohr
    Invité(e)
    Par défaut
    Arg, j'y ai cru, mais j'ai le regret d'annoncer que ca ne fonctionne pas non plus !
    Cela fonctionnait chez toi ?

    J'ai 3 erreurs :
    • Un composant ActiveX ne peut pas créer un objet.
    • 'text ' est indéfini.
    • 'text2' est indéfini.

  6. #6
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    tu as quoi comme IE
    car il semble que ton truc ne crée pas le SAPI
    tu remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          vox.VoiceObj = new window.ActiveXObject("SAPI.SpVoice");
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    try {
          vox.VoiceObj = new window.ActiveXObject("SAPI.SpVoice");
    } catch (e) {
     
    alert (e)
    }
    s'il t'affiche un message d'erreur
    c'est qu'il ne peut créer l'objet donc il ne fini pas le script et du coup les texte ne sont pas créés.

    sur IE 6 FF Safari OmniWeb pas de pb

    A+JYT

  7. #7
    Elyadohr
    Invité(e)
    Par défaut
    Alors, j'ai eu droit aux alertes cette fois : [object Error] et le texte à lire...

    J'ai IE8... Ça c'est bizarre. Ou alors, c'est mon SAPI qui bugouille ? J'suis sous seven...

    EDIT : Je viens d'installer un truc qui s'appelle IETester, qui est censé faire tourner "toutes" les versions d'IE pour vérifier la compatibilité. Mais j'ai eu beau essayer toutes les versions, de IE3 à 7, j'ai toujours le même message d'erreur : [object Error]. Alors le soucis vient peut etre du fait que je sois sous seven et que SAPI n'ai pas la bonne version ou quoi...
    Dernière modification par Elyadohr ; 06/07/2010 à 15h20.

  8. #8
    Elyadohr
    Invité(e)
    Par défaut 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 ?
    Dernière modification par Elyadohr ; 13/07/2010 à 16h26.

  9. #9
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    tous script dans le corps du texte HTML (entre <html> et </html>) s'exécute durant la construction de la page

    le onload placé sur la balise body s'exécute lui lorsque le document est enfin chargé.

    attention dans onload à this
    lorsqu'on mets un évènement sur un tag this est une référence à l'objet DOM du TAG un onclick su une balise a this sera un référence sur l'élément A du DOM

    ce n'est pas vrai pour onload this dans ce cas là est le document et non le body.

    A.JYT

  10. #10
    Elyadohr
    Invité(e)
    Par défaut
    Mmh, d'accord. Je n'avais pas bien saisis, pour moi le onload exécutait la fonction avant que la page soit chargée.
    J'ai donc placé un script pour lancer la fonction chargement juste après la balise <body> et ca fonctionne !

    Merci pour le coup de patte.

Discussions similaires

  1. Est-ce que je peux utiliser les mêmes variables pour javascript et PHP?
    Par sparil dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 01/07/2007, 13h23
  2. Réponses: 2
    Dernier message: 29/05/2007, 10h55
  3. [PHP-JS] convertir un bout javascript en php ?
    Par Thierry8 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 23/08/2005, 23h42
  4. [PHP-JS] lien javascript vers php
    Par guttts dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/08/2005, 23h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo