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

VBScript Discussion :

vbScript (et JavaScript) obsolete ?


Sujet :

VBScript

  1. #1
    Membre éprouvé
    vbScript (et JavaScript) obsolete ?
    Cela fait +20 ans que les fichiers .vbs (et .js) sont directement executables sous windows, et ça fonctionne toujours très bien !
    C'est simple et rapide d'écrire des petits utilitaires en accédant directement à plein d'objets COM souvent de grande utilité, c'est aussi très lisible (la technologie COM a +25 ans, et je la trouve toujours aussi géniale).
    Un simple éditeur genre notepad et hop, c'est fait

    Je viens par exemple d'écrire un petit utilitaire qui me convertit du texte en fichier audio (.wav) avec SAPI.SpFileStream et SAPI.SpVoice.

    Mais voilà, SAPI a l'air d'être figé depuis Windows 7 et ne semble pas être utilisée par les fonctionnalités de dictée et de narration intégrée à Windows 10. Il semble y avoir une autre technologie.
    En bref, comment aurais-je pu faire mon script en utilisant nativement la techno de Windows 10 ?

  2. #2
    Rédacteur/Modérateur

    Salut
    Citation Envoyé par camboui Voir le message
    Cela fait +20 ans que ...
    Mais voilà, SAPI a l'air d'être figé depuis Windows 7 ...
    ...faire mon script en utilisant nativement la techno de Windows 10 ?
    Je viens de vérifier un petit programme, en VB6 se servant de l'API Sapi, il fonctionne très bien sous windows 10 64bits.
    Le programme permet de choisir le narrateur, lit du text écrit dans un TextBox ou depuis un fichier .txt, on peut régler le volume et la vitesse de diction.

    Si tu veux, je peux mettre le code, à toi de le transcrire en VbScript, je pourrais éventuellement t'aider dans cette tâche.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.

  3. #3
    Membre éprouvé
    Merci !
    Mais le script est fait, ce n'est pas là le problème (voir ci-dessous).
    Je fais des script et des batchs depuis +25 ans

    Mais on me prend pour un ringard, alors je me demandais s'il n'y avais pas "mieux", plus moderne et qui permet d'accéder à "tout" ce que l'OS propose (sans l'usine à gaz .net).

    Ici, en l'occurrence, bien que SAPI fonctionne toujours bien, ce n'est pas utilisé nativement par Windows 10.
    D'ailleurs j'ai eu un petit soucis pour utiliser les voix installées sur mon système avec SAPI qui ne les "voyait" pas toutes. On en voit plus via les "paramètres" que via le "panneau de control". J'ai ainsi dû chipoter dans la base de registre et copier quelques voix de [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore] vers [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech].

    En gros, la question serait:
    Quelles sont les alternatives aux .vbs et .js tout en étant aussi simple mais plus complet.
    Ou alors, pour mon exemple, comment accéder à l'API de narration de Windows 10 (manifestement c'est une autre API que SAPI)

    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
    56
    57
    58
    ' text to speech script
    '    that outputs audio in a wav file
    ' usage : script.vbs input.txt [output.wav]
     
    dim scrFName, clArgs
    scrFName = Wscript.ScriptFullName
    set clArgs = Wscript.Arguments
     
    Set fso = CreateObject("Scripting.FileSystemObject")
     
    dim intxt, outwav
    if clArgs.Count > 1 then
      intxt = clArgs(0)
      outwav = clArgs(1)
    elseif  clArgs.Count > 0 then
      intxt = clArgs(0)
      outwav = ""
    else
      Wscript.Echo "usage : " _
       & fso.GetFileName(scrFName) _
       & " input.txt [output.wav]" & vbCrLf
      Wscript.quit
    end if
     
    if fso.FileExists(intxt) then
      if fso.GetParentFolderName(intxt) = "" then
        intxt = fso.GetAbsolutePathName(intxt)
      end if
      if outwav = "" then
        outwav = fso.GetParentFolderName(intxt) & "\" _
        & fso.GetBaseName(intxt) & ".wav"
      end if
    else
      Wscript.Echo "Input file not found: " & intxt
      Wscript.quit
    end if
     
    dim intxtcontent
    set f = fso.OpenTextFile(intxt, 1)
    intxtcontent = f.ReadAll
    f.close
    set f = nothing
     
    Const SAFT48kHz16BitStereo = 39
    Const SSFMCreateForWrite = 3
     
    set sapiFStream = CreateObject("SAPI.SpFileStream")
    sapiFStream.Format.Type = SAFT48kHz16BitStereo
    call sapiFStream.Open(outwav, SSFMCreateForWrite)
    set sapiVoice = CreateObject("SAPI.SpVoice")
    Set sapiVoice.AudioOutputStream = sapiFStream
    'sapiVoice.Rate = -2 ' from -10 to 10
    sapiVoice.Speak(intxtcontent)
    sapiFStream.Close
    set sapiVoice = nothing
    set sapiFStream = nothing
     
    set fso = nothing

###raw>template_hook.ano_emploi###