Rob’s Practical Joke of the Week: Fun with the Mac “say” command and ssh

hal-400.jpgMacs have a fun command-line program called “say”. You type “say” and enter some text and it reads it to you. Fun stuff. I like pasting news articles into it and having it read them to me.

For the those that don’t know, you can open a command-line terminal by going to Applications > Utilities > Terminal. Open Terminal and then you can start entering text commands. Try typing: say hello, you are a geek and hit return.

Now that’s all fun and dandy, but then I got the brilliant idea that I could ssh (login remotely) into another Mac and make it talk. Oh the fun that you could have with co-workers, friends and family! Here’s how you can do that :

  • Log directly onto the Mac that you want to make talk
  • Go to System Preferences>Sharing. In the Services section, make sure that “Remote Login” is checked.
  • Highlight Remote Login and take note of the text below the checkboxes. It should say something like: To log in to this computer remotely, type “ssh username@123.123.123.12” at a shell command
  • Write down the exact text that looks like ssh username@123.123.123.12
  • Log out of the computer and leave it however you usually leave it when you are not using it and wait for the next lucky person to use the machine

[by the way I am not advocating hacking into people’s machines, I assume that maybe you have a family computer that many people use :) ]

hawking.jpgNow from another computer (on the same network) open up a command prompt and enter the text that you wrote down above, something like ssh username@123.123.123.12. You will be prompted for your password, enter it. You may be asked to accept a key or something like that, if so, type yes and hit return.

If your other computer is Windows, you can use something like putty to remote into the target Mac. Just download putty.exe , launch it, and then enter username@123.123.123.12 into the main textbox to login remotely (leave off the ssh).

Once you are remotely logged in, you can just enter the same “say” command but it will say it on the other computer! Here are some fun ideas for things to have the computer say to other people

  • Make a sexy come-on from the computer to our lucky victim.
  • Have the computer threaten to go on strike if he is not treated better.
  • Speak from the perspective of a trapped little person in the computer.
  • Have it sing “Mr. Roboto” Try: say domo ari got toe, mr. robot oh. domo. domo. Or to really have it “sing” try: say -v “Good News” domo ari got toe, mr. robot oh. domo. domo.

lost_in_space_robot_body_1_2_2004.jpgSometimes the computer does not speak things perfectly, especially proper nouns. Try experimenting on your own machine before you attack your victim. Spell things out phonetically if it can’t say something correctly.

For fun you can change the voice with the -v flag. One example alternate voice is “Whisper”. So to act like there is someone trapped in the computer you could enter:

say -v Whisper Help, get me out of this computer. Garga Mel locked me in here again!

Here are a list of the available voices that come on a Mac. The names are case sensitive and enter the names in quotes if there is a space in the name:

Female Voices

  • Agnes - relatively natural female voice
  • Kathy - sounds like a computer, kind of like the computer voice in Radiohead’s OK Computer
  • Princess – kind of sounds like an old lady
  • Vicki - most natural, kind of whispery
  • Victoria – computery sounding

Male Voices

  • Bruce – most natural male voice
  • Fred – sounds like a computer
  • Junior – sounds like a girl
  • Ralph – deep voice

Novelty Voices

Albert – funny weak whispery high pitched voice

Bad News – very slow lo-pitched voice (put “Bad News” in quotes)

Bahh – choppy whispery weak voice

Bells – Melodic bells within voice, relatively slow paced

Boing – Mid-pitched typical computer voice with “boing” sound in each syllable

Bubbles – Whispery voice with bubble sounds in each syllable

Cellos – Melodic voice with cello voice, each syllable is a successive note in a simple tune

Deranged – Old man-ish voice, think Grandpa Simpson

Good News - Says words to the tune of “Pomp and Circumstance” or other tunes

Hysterical – Laughing/chuckling man voice (funny but hard to understand)

Pipe Organ – Low “pipe organ” melodic voice

Trinoids – Monotonous mid-pitched computer voice

Whisper – Whispery, kind of desperate sounding, sounds like it is having trouble breathing

Zarvox – Monotonous mid-pitched computer voice

Want to sample all of the voices? Paste the following into your Terminal and hit return:

say -v Agnes Hello, I am Agnes.

say -v Kathy Hello, I am Kathy.

say -v Princess Hello, I am Princess.

say -v Vicki Hello, I am Vicki.

say -v Victoria Hello, I am Victoria.

say -v Bruce Hello, I am Bruce.

say -v Fred Hello, I am Fred.

say -v Junior Hello, I am Junior.

say -v Ralph Hello, I am Ralph.

say -v Albert Hello, I am Albert.

say -v “Bad News” Hello, I am Bad News.

say -v Bahh Hello, I am Bahh.

say -v Bells Hello, I am Bells.

say -v Boing Hello, I am Boing.

say -v Bubbles Hello, I am Bubbles.

say -v Cellos Hello, I am Cellos.

say -v Deranged Hello, I am Deranged.

say -v “Good News” Hello, I am Good News.

say -v Hysterical Hello, I am Hysterical.

say -v “Pipe Organ” Hello, I am Pipe Organ.

say -v Trinoids Hello, I am Trinoids.

say -v Whisper Hello, I am Whisper.

say -v Zarvox Hello, I am Zarvox.

Happy practical joking!

You might want to turn off Remote Login when you are done playing, just to be safe!

Addendum July 2009 You might want to check out my more useful use of the Mac text-to-speech capabilities: Copywriting Tip: Have Your Computer Read Your Writing Back to You

, ,

Powered by WordPress. Designed by Woo Themes

var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-50978-6']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();