The Road to Assembly Language

In 1986, you could put a moose on a Macintosh screen. He talked aloud and told jokes, with his mouth moving along with the words.

Canadian physician and programmer Steven B. Halls built the Talking Moose in an era when any recognizable face had to be assembled from black-and-white pixels. Only a handful of pixels were needed to give it a personality.

Today, talking computers usually bring up questions of artificial intelligence. The Moose's beginnings belong to another kind of story: a single programmer working out how to make a computer-generated voice seem to come from a character.

Why pick a moose?

It came down to the antlers.

Images of the original Talking Moose show a two-dimensional Macintosh character. With little room for detail, its outline had to do much of the work. Halls remembers that antlers were easy to recognize even when small. He liked moose as well, and that settled the choice.

Halls wrote the original program in assembly language. Getting the lips to follow the speech took some ingenuity. As he recalls it, the program located Macintalk, the Macintosh speech engine, in memory. It watched information about the sound being played, then adjusted the Moose's mouth shape accordingly.

The speech engine's memory was not changed by this. The Moose was watching it. Early Macintosh software could reach across applications into memory, in ways modern operating systems generally restrict.

That same access let the character remark on window and document names in familiar applications. A Moose that seemed to know something about your work was responding to information on your own computer. Behind the face was programmed behavior, not a language model.

Into Color

Color arrived for the Moose around 1989. Halls kept a picture of that version on his wall, printed on an early Macintosh color printer. His color Moose account includes scans with the printing dots still visible.

You can inspect this small piece of computing history, the character as it looked then, preserved in software and on paper.

Old users supplied another kind of record. In a letter published in 2016, Mike Ellis remembered seeing the Moose at a Boston Mac Developers Group conference in the late 1980s:

"He became my constant companion on my Mac Plus, and he was widely admired by some of the cleverest developers I've ever known."

That letter sits among other recollections sent to Halls. Decades on from using the software, people remembered the character well enough to write to its maker.

Making a Three-Dimensional Head Feel Alive

The later Windows Moose had a three-dimensional head. Its ears moved, and its eyes glanced about. More expression came from its eyebrows and mouth than the original pixels could manage.

Repeating the same animation clips would have made those movements predictable. The Windows character used procedural animation instead, its motions generated by algorithms.

Halls's explanation of the animation describes controlled randomness. A movement could stop near a target rather than at exactly the same spot each time. Its speed varied as well, and so did the pause before the next movement. Smooth acceleration and deceleration kept it from appearing mechanical.

With the platform, the lip-sync mechanism changed. On Windows, timing information from Microsoft's Speech API told the character which mouth shapes to use. Nobody needed to recreate that old Macintalk technique of observing memory.

Something useful to say

Plugins gave the Moose other things to talk about, while jokes remained part of it. News and weather joined reminders and notifications.

A June 2016 update described a working Pushover connection, IFTTT supplying the events for the Moose to announce. Approaching rain was the subject of one example. In another, a spoken "Welcome home" played on the user's PC when a phone entered a home geofence.

You didn't have to keep checking a screen for those messages. They could be heard.

A Voice with a Face

Forty years stand between the original Moose's 1986 appearance and today's enthusiasm for AI assistants. Calling it an early version of today's conversational AI would miss what Halls actually built. Enough to make a joke seem to come from an antlered companion were speech synthesis and carefully written animation code.

For Mike Ellis, that companion belonged on his Mac Plus. It could announce rain or greet someone arriving home in the later Windows project.

The early screenshots are still worth a look. It is plainly a face made of pixels, yet a former user remembered a companion. For a joke-telling moose, that is quite a result.