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

AppleScript Discussion :

dans textedit, gérer la dictée vocale


Sujet :

AppleScript

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 406
    Points : 92
    Points
    92
    Par défaut dans textedit, gérer la dictée vocale
    salut à tous
    je travaille sur un petit script pour ma grand mère malvoyante
    ce script va gérer des fichiers textedit, et à certains moments activer ou désactiver la dictée vocale
    seulement je ne sais pas par quelle routine demander à activer la dictée vocale
    j'ai désespérement essayé ce qui se trouve ici :
    http://www.macosxautomation.com/appl...t/uiscripting/
    en fin de compte ce script semble trouver le menu "Édition" par un ensemble d'instructions que je trouve très contre intuitives mais bon il le trouve ; par contre il ne trouve pas "Démarrer Dictée" ; j'ai remplacé par "Coller" il ne trouve pas non plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    tell application "TextEdit"
    	activate
    	make new document
    	tell application "System Events"
    		tell process "TextEdit"
    			tell menu bar 1
    				tell menu bar item "Édition"
    					click menu item "Démarrer Dictée"
    				end tell
    			end tell
    		end tell
    	end tell
    end tell
    si quelqu'un peut m'aider…
    Vincent

  2. #2
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour,
    Ton script utilise la simulation de click pour atteindre le menu Edition / Démarrer la dicté de l'application TextEdit.

    Comment va tu faire pour lancer ce service/script ? Sans doute via une touche ou combinaison touches.
    Dans ce cas, pourquoi ne pas utiliser directement l'appel à la fonction dictée.

    un double appui sur la touche 'fn' du clavier lance directement la fonction dictée. De plus cela fonctionne quelque soit l'application (mail, text edit,...)

    Cordialement

  3. #3
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 406
    Points : 92
    Points
    92
    Par défaut
    bonjour Pbell et merci d'avoir répondu

    pour préciser ce que je veux :

    je cherche à écrire un script pour une malvoyante
    il sera activé par l'action d'un gros bouton de joytsick si tant est qu'un “click" de joystick puisse déclencher une action sur le mac
    il aura pour effet pas seulement d'activer la dictée vocale mais de faire tout : activer textedit, ouvrir un fichier vierge, lancer la dictée vocale
    un autre bouton du joystick lancera un script à l'effet inverse : arrêter la dictée vocale, fermer le fichier en l'enregistrant dans une boîte dropbox partagée avec la famille
    ma crainte c'est que même si tout marche bien, la dictée vocale s'interrompe pour une raison ou pour une autre et que ma grand mère parle pour rien à partir de ce moment

    ma question est donc : comment lancer la dictée vocale depuis un script Applescript ?

    Vincent

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 440
    Points : 43 082
    Points
    43 082
    Par défaut
    Jetes un oeil la-dessus : ça peut peut être te simplifier les choses :
    https://support.apple.com/fr-fr/HT202584
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonsoir,
    Merci pour ces explications, je comprends mieux ton besoin.

    Voici un script qui crée un document textEdit et active sur ce document la fonction de dictée améliorée en utilisant le raccourci par défaut pour cette activation (2 fois la touche fn, c'est à dire le key code 63).

    J'ai ajouté un delay de 1 seconde pour laisser le temps d'ouvrir la fenêtre du nouveau document et le rendre prêt pour la dictée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    tell application "TextEdit"activate
        set NDoc to makenewdocument
    end tell
    delay 1
    
    
    tell application "System Events"
    key code 63 -- touche fn
    key code 63 -- touche fn
    end tell
    Ce script doit être mis sous forme de Service. Ce Service devra être déclenché par ton joystick (là je ne sais pas faire !).
    Pour indiquer avec le joystick que la dictée est terminée, il faut utiliser la touche 'fn' donc encore le "key code 63". Ensuite ce script devra enregistrer le document en cours dans la drop box.

    En fait ton service est unique, déclenché par le joystick, et il doit tester le mode dans lequel tu es (dictée à démarrer ou à arrêter).
    Je suggère que ton service appelle toujours le même script qui est enregistré sous forme d'application AS qui renferme une property que tu changes dans ton script. La valeur de la property est uniquement changée par le script lui-même, ou par une recompilation dudit script. Voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    property Statut : "debut"
    
    if Statut is "debut" then
    -- ouvrir le texte et démarrer la dictée avec le script ci-dessus
        set Status to "en cours"
    else
    -- if statut n'est pas debut, c'est qu'il est "en cours" !
        tell application "System Events" to key code 63 -- pour arrêter la dictée
    -- ajouter l'enregistrement vers dropbox
        set Statut to "debut"
    end if
    Dans Automator, tu crées un service qui n'a qu'une action : "lancer l'application (= ce script compilé sous forme de fichier d'application).

    Cordialement

  6. #6
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 406
    Points : 92
    Points
    92
    Par défaut
    salut
    je préfère faire un script de lancement et un script de fin avec dux gestes différents
    en effet elle peut des fois ne plus savoir où elle en est mai savoir par contre si elle veut recommencer ou arrêter
    je travaille surle script de lancement avec des indications
    merci de des éclaircissements
    je patauge cependant encore beaucoup :
    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
     
    -- script de lancement
     
    tell application "TextEdit"
    	activate
    	a = 0
    	--for (each window) 
    	--save document of window to "~/Dropbox"&(a as text)
    	--close window
    	--end for
    	set NDoc to make new document
    end tell
     
    tell application "System Events"
    	key code 63 -- touche fn
    	key code 63 -- touche fn
    	--say "tu peux y aller"
    	--ici il me met : "Une erreur de type -1 est survenue." alors que j'ai apparemment activé voice over et coché "permettre à AS de contrôler voice over"
    	-- comment faire un système pour qu'elle sache que la dictée est toujours active ?
    	-- par exemple rendre sonore chaque mot tapé par la dictée vocale
    	-- ou tester toutes les dix secondes si la dictée vocale est active…
     
    end tell
    si tu as des idées…
    Vincent

  7. #7
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour,
    On peut effectivement boucler sur tout les documents ouverts dans TextEdit et les sauvegarder.
    Comment veux tu nommer ces documents ?
    Cependant, je me demande si il n'est pas plus astucieux de regrouper les textes de chaque document dans un seul et unique document et d'enregistrer ce dernier en fermant tous les autres.

    Je suggère que ce document s'appelle avec un nom qui contient la date, voir l'heure...
    Exemple de nom de fichier: "Message_2016_12_07_13h41.txt"

    Cela évitera la gestion des erreurs (le fichier existe déjà !).
    Dis moi ce que tu préfères.

    En attendant, voici un script qui prend tous les document textEdit ouverts, les mets bout à bout dans un seul document avec une ligne de séparation, et enregistre le tout dans un seul document daté et sur le bureau.

    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
    tell application "TextEdit"activate
        repeat until (count of document) is 1
            set MonText to text of front document
    close front documentsavingno
            set Docsuivant to front document
            make new paragraph at the end of text of Docsuivant with data (return & return & "-------------------" & return & return)
    makenewparagraphat the end of text of Docsuivantwith dataMonText
        end repeat
    -- tout les textes sont dans un seul document
        set Chemin to path todesktop folderastext
        set maDate to current date
        set {J, M, A, H} to {day of maDate, month of maDate, year of maDate, (time of maDate) div 3600}
        set Chemin to path todesktop folderastext
        set monTitre to "Message_" & A & "_" & M & "_" & J & "_H" & H & ".txt"
        save front document in (Chemin & monTitre)
    close front documentsavingno
    end tell
    Cordialement

  8. #8
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 406
    Points : 92
    Points
    92
    Par défaut
    bonjour PBell et merci beaucoup
    j'en arrive là et je bloque encore un peu…

    script de début activé par joystick vers l'avant :
    avec des questions dedans…
    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
    -- script de lancement
     
    tell application "TextEdit"
    	activate
    	set NDoc to make new document
    end tell
     
    tell application "System Events"
    	key code 63 -- touche fn
    	key code 63 -- touche fn
    	--say "tu peux y aller"
    	--ici il me met : "Une erreur de type -1 est survenue." alors que j'ai apparemment activé voice over et coché "permettre à AS de contrôler voice over"
     
    	-- comment faire un système pour qu'elle sache que la dictée est toujours active ?
    	-- par exemple rendre sonore chaque mot tapé par la dictée vocale
    	-- ou tester toutes les dix secondes si la dictée vocale est active…
     
    end tell
    ---------------

    script de fin qui marche pas, il me dit "vous n'avez pas les autorisations nécessaires"
    Nom : capture 2016-12-07 à 21.45.21.png
Affichages : 330
Taille : 80,6 Ko
    ps j'ai rajouté deux lignes au début pour le test

    et j'ai rajouté aussi les minutes après avoir cherché un peu le principe

    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
    -- script de fin
     
    -- sauvegarde de tous les documents ouverts
    tell application "TextEdit"
    	activate
    	set NDoc to make new document
    	set NDoc2 to make new document
     
    	--display dialog (count of document)
    	repeat until (count of document) is less than 2
    		set MonText to text of front document
    		close front document saving no
    		set Docsuivant to front document
    		make new paragraph at the end of text of Docsuivant with data (return & return & "-------------------" & return & return)
    		make new paragraph at the end of text of Docsuivant with data MonText
    	end repeat
    	-- tous les textes sont dans un seul document
    	set Chemin to path to desktop folder as text
    	set maDate to current date
    	set {J, M, A, H, M} to {day of maDate, month of maDate, year of maDate, (time of maDate) div 3600, ((time of maDate) mod 3600) div 60}
    	set Chemin to path to desktop folder as text
    	set monTitre to "Message_" & A & "_" & M & "_" & J & "_" & H & "h" & M & ".txt"
    	save front document in (Chemin & monTitre)
    	close front document saving no
    end tell
    j'ai le sentiment d'y être presque, la prochaine étape dès que ça marche, je vais le faire piloter par des combinaisons de touches du clavier usuel, par exemple un long appui de 10s sur espace pour le lancement et un long appui de 10s sur esc ou fn pour le finir

    Vincent

  9. #9
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonsoir,

    Je n'ai pas de souci avec le script, mais parfois ne mode dictée ne se lance pas. J'ai ajouté un délai pour être certain que le document textEdit est bien ouvert< :
    En principe VoiceOver n'est pas la dictée vocale, même si les 2 modules utilisent une technique commune.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    tell application "TextEdit"activate
        set NDoc to makenewdocument
    end tell
    delay 2
    say "tu peux y aller"
    tell application "System Events"
    key code 63 -- touche fn
    key code 63 -- touche fn    
    end tell
    Pour ce qui est de savoir quand la dictée est arrêtée, c'est un peu plus difficile. Applescript n'est pas fait pour attendre et récupérer des évènements. C'est surtout un language d'action.
    Pour pouvoir réagir à des évènements, il faut se tourner vers l'environnement de développement xCode avec des language comme ObjectiveC ou Swift.
    Cependant, j'ai partiellement contourné le problème en vérifiant en boucle si le process de reconnaissance vocale est en route ou pas. Bien sûr, il ne faut pas avoir mis le Mac en VoiceOver.

    Attention, le script ci-dessous début par un délai de 2 secondes pour laisser le temps à la dictée de se lancer (fin du script précédent). Ce script tourne alors à l'infini tant que le process de dictée est actif.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    delay 2
    
    set DicteRun to {"debut"}
    set I to 1
    repeat until (count of DicteRun) is 0
        tell application "System Events" to set DicteRun to (name of every process whose name is "com.apple.speech.speechsynthesisd")
        delay 0.5
    end repeat
    say "dicté terminée"
    Enfin, quant à ton erreur, comme cela ne peut être l'écriture du fichier (un fichier texte sur ton bureau), c'est sans doute la prise de contrôle de ton Mac : il faut voir dans Préférences, Sécurité et confidentialité, onglet Confidentialité: lorsque tu sélectionne Accessibilité en colonne de gauche, tu dois avoir (ou ajouter) l'éditeur de script, et/ou ton script.

    Cordialement

  10. #10
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 406
    Points : 92
    Points
    92
    Par défaut
    bonsoir
    chez moi le say génère une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Une erreur de type -1 est survenue."
    invariablement, je laisse cela de côté pour le moment
    mon script de début est à présent celui-ci, en tenant compte de tes remarques
    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
     
    tell application "TextEdit"
    	activate
    	set NDoc to make new document
    end tell
     
    delay 1
    beep 1
     
    tell application "System Events"
    	key code 63 -- touche fn
    	key code 63 -- touche fn	
    end tell
     
    delay 1
    beep 2
     
    set DicteRun to {"debut"}
    set I to 1
    repeat until (count of DicteRun) is 0
    	tell application "System Events" to set DicteRun to (name of every process whose name is "com.apple.speech.speechsynthesisd")
    	delay 0.5
    end repeat
     
    beep 3
    j'ai mis beep2 et beep3 comme des repères, mais je n'entends que le beep1 même au moment où je ferme "manuellement" la dictée vocale…

    quant à mon script de fin, je l'ai exporté en tant qu'appli et ajouté l'appli à celles autorisées à contrôler l'ordi dans les pref système comme tu l'as indiqué, j'ai même essayé de changer l'extension en rtf au cas où, rien n'y fait, toujours pas l'autorisation d'enregistrer…

    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
     
    tell application "TextEdit"
    	activate
    	set NDoc to make new document
    	set NDoc2 to make new document
    	delay 2
    	--display dialog (count of document)
    	repeat until (count of document) is less than 2
    		set MonText to text of front document
    		close front document saving no
    		set Docsuivant to front document
    		make new paragraph at the end of text of Docsuivant with data (return & return & "-------------------" & return & return)
    		make new paragraph at the end of text of Docsuivant with data MonText
    	end repeat
    	-- tous les textes sont dans un seul document
    	set Chemin to path to desktop folder as text
    	set maDate to current date
    	set {J, M, A, H, M} to {day of maDate, month of maDate, year of maDate, (time of maDate) div 3600, ((time of maDate) mod 3600) div 60}
    	set Chemin to path to desktop folder as text
    	set monTitre to "Message_" & A & "_" & M & "_" & J & "_" & H & "h" & M & ".rtf"
    	save front document in (Chemin & monTitre)
    	close front document saving no
    end tell
    Vincent

  11. #11
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour,
    Sur quelle version de système es tu ?
    Je suis sur ElCapitain pourtant réputé chatouilleux sur la sécurité et cela fonctionne. Cela m'est donc difficile de t'aider sans pouvoir reproduire le problème.

    Cordialement

  12. #12
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 406
    Points : 92
    Points
    92
    Par défaut
    je suis sous os X.10.4
    je vais envoyer le script sur le forum macfrance pour voir si qqn veut bien le tester et je reviens vers toi
    merci déjà de toute ton aide, ça va finir par le faire
    Vincent

Discussions similaires

  1. afficher dans textedit retour de system()
    Par lostsoul dans le forum Débuter
    Réponses: 3
    Dernier message: 10/01/2011, 13h01
  2. [WD-2007] problème de dictée vocale
    Par bernard63600 dans le forum Word
    Réponses: 0
    Dernier message: 20/11/2010, 15h06
  3. Problème affichage code html dans textEdit
    Par mercure07 dans le forum Qt
    Réponses: 5
    Dernier message: 10/09/2009, 10h59
  4. gérer la reconnaissance vocale
    Par Charlie111 dans le forum C++
    Réponses: 0
    Dernier message: 15/03/2008, 21h29
  5. Mettre le nom du fichier dans TextEdit ?? Avec CFileDialog
    Par P'tit Troll dans le forum Windows
    Réponses: 2
    Dernier message: 19/04/2005, 17h32

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