ms speech from command line

前端 未结 7 1684
遥遥无期
遥遥无期 2020-12-02 11:23

Is there a way to use the MS Speech utility from command line? I can do it on a mac, but can\'t find any reference to it on Windows XP.

相关标签:
7条回答
  • 2020-12-02 11:47

    There's also Balabolca: http://www.cross-plus-a.com/bconsole.htm It has a command line tool balcon.exe. You can use it like this:

    1. List voices:

      balcon.exe -l
      
    2. Speak file:

      balcon.exe -n "IVONA 2 Jennifer" -f file.txt
      
    3. Speak from the command-line:

      balcon.exe -n "IVONA 2 Jennifer" -t "hello there"
      

    More command line options are available. I tried it on Ubuntu with SAPI5 installed in Wine. It works just fine.

    0 讨论(0)
  • 2020-12-02 11:48

    There's a nice open source program that does what you're asking for on Windows called Peter's Text to Speech available here: http://jampal.sourceforge.net/ptts.html

    It contains a binary called ptts.exe that will speak text from standard input, so you can run it like this:

    echo hello there | ptts.exe
    

    Alternatively, you could use the following three line VBS script to get similar basic TTS:

    'say.vbs
    set s = CreateObject("SAPI.SpVoice")
    s.Speak Wscript.Arguments(0), 3
    s.WaitUntilDone(1000)
    

    And you could invoke that from the command line like this:

    cscript say.vbs "hello there"
    

    If you go the script route, you'll probably want to find some more extensive code examples with a variable timeout and error handling.

    Hope it helps.

    0 讨论(0)
  • 2020-12-02 11:50

    If you can't find a command you can always wrap the System.Speech.Synthesis.SpeechSynthesizer from .Net 3.0 (Don't forget to reference "System.Speech")

    using System.Speech.Synthesis;
    
    namespace Talk
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (var ss = new SpeechSynthesizer())
                    foreach (var toSay in args)
                        ss.Speak(toSay);
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-02 11:50

    Your best approach is to write a small command line utility that will do it for you. It would not be a lot of work - just read text in and then use the ms tts library.

    Another alternative is to use Cepstral. It comes with a nice command line utility and sounds light years better than the ms tts.

    0 讨论(0)
  • 2020-12-02 11:51

    My 2 cents on the topic, command line one-liners:

    • on Win using PowerShell.exe

      PowerShell -Command "Add-Type –AssemblyName System.Speech; (New-Object System.Speech.Synthesis.SpeechSynthesizer).Speak('hello');"
      
    • on Win using mshta.exe

      mshta vbscript:Execute("CreateObject(""SAPI.SpVoice"").Speak(""Hello"")(window.close)")
      
    • on OSX using say

      say "hello"
      
    • Ubuntu Desktop (>=2015) using native spd-say

      spd-say "hello"
      
    • on any other Linux

      • refer to How to text-to-speech output using command-line?
      • commandline function using google TTS (wget to mp3->mplayer)
    • on Raspberry Pi, Win, OSX using Node-Red

      npm i node-red-contrib-sysmessage

    0 讨论(0)
  • 2020-12-02 11:52
    rem The user decides what to convert here
     :input
     cls
     echo Type in what you want the computer to say and then press the enter key.
     echo.
     set /p text=
    
     rem Making the temp file
     :num
     set num=%random%
     if exist temp%num%.vbs goto num
     echo ' > "temp%num%.vbs"
     echo set speech = Wscript.CreateObject("SAPI.spVoice") >> "temp%num%.vbs"
     echo speech.speak "%text%" >> "temp%num%.vbs"
     start temp%num%.vbs
     pause
     del temp%num%.vbs
     goto input
    
    
    
    pause
    
    0 讨论(0)
提交回复
热议问题