views:

726

answers:

5

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.

Thanks.

+1  A: 

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);
        }
    }
}
Matthew Whited
+1  A: 

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.

Shane C. Mason
+1  A: 

I don't think there's a command line tool for it, but someone wrote one:

http://krolik.net/post/Say-exe-a-simple-command-line-text-to-speech-program-for-Windows.aspx

Lazy Bob
I downloaded this and it worked. Thanks :)
Ninjaz
A: 

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.

Chris Sears
A: 

Try this one.

SLaks