Code :
- 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
|
Un petit script assez complet. Ça fonctionne super bien
Il suffit de glisser un fichier texte sur le .vbs qui contient ce code et il génère un fichier .wav tout seul
Ou alors vous l'appelez en ligne de commande avec deux paramètres, le fichier d'entrée (txt) et celui de sortie (wav).
Maintenant, c'est du vbscript et du SAPI, et, si j'ai bien compris, deux technologies qui ont leur âge.
Surtout le vbscript et ses +25 ans
Une suggestion pour utiliser une tech plus récentes, ou Microsoft va continuer à supporter les scripts et les COM sous-jacents ad-vitam ? (et aussi simple que ce script aussi)