A Talking VJ
So, despite the lack of a Max Headroom agent, I have mostly completed the new talking head interface for the VJ.
An introduction: The VJ is my tool for playing video files onto the living room tv, where they can be watching in civlized, couch-potato comfort. It is a Visual Basic app which runs on my Windows box. It listens to commands generated by a php script on my internal web server. It allows you to use the 'internet appliance' on the coffee table to list video files, play them, pause them, etc. I've been working on it for around a year now and it generally kicks ass. Video on demand, for real. (Assuming I have a copy on the fileserver, anyway.)
First I made the player controls dynamically generated, which I've been meaning to do for some time. In addition to eliminating some annoying minor bugs, it means I no longer have to reserve screen real estate for all three at once. (One was needed for each of windows media, real media and quicktime. Of course, you can't just stack them on top of each other, twiddling visibility or stack order when needed. They don't play well together at all.) This freed up the room needed for a talking head.
Next I installed the talking head. I first started with ActiveHead, which looked promising at first. The animation is a bit creepy, but the control was easy enough to add. However, I eventually realized that there was no way to know when the head was done talking. So I set out to find a better solution. I ended up with Microsoft Agent, the general technology behind Clippy. It was slightly harder to integrate, not really being meant for this kind of use. But once I figured out how to eliminate the speech bubble and test for queued-action-completeness, it worked quite well. The lip-sync is particularly good. After poking around at The Agentry and related sites for awhile I settled on Charlie as an agent. I'm not thrilled, but it works. Most agents are full body and when converted to blurry NTSC that doesn't leave much information for conveying... anything.
The rest was simple, being pretty much the exact same process Deadlocked DJ Hawking (my MP3 playing tool) uses. It creates a phrase randomly from subparts in a nice context-free-grammar fashion. For added quirkiness, it uses the web interface to pull quips from the Gargoyle (a vaguely Eliza-like AI of mine, whose soul purpose in life is responding to text input with short, occasionally relevant strings from a database of about 11k, doing some basic pronoun/name substitution in the process), with the series name substituted in if available. For instance, it could end up saying: Sit back and enjoy Daria - 111 - Road Worrier. If the road to hell is paved with good intentions, Daria just earned their own
toll booth.
Here is a screenshot (only 40K in size, for those who have been complaining) of it after a few load/stop commands have been sent. The player control (wm, real or qt, depending on the file type) itself is created in the top left corner. There wasn't one when this screenshot was taken, since nothing is playing.
Voila, a VJ that talks back. I'm not sure how useful this is, but I'm getting very interested in exploring the concept of an integrated computing/media infrastructure. Digital convergence and all that. I keep adding quirky little tools and they keep ending up far more useful than I had expected. They also keep integrating with each other in surprising ways. So far it has all worked best when I don't try to plan ahead, so I'm just doing whatever seems nifty to me at the time.
On the VJ todo list: Add more random phrases for the talking head to say. (Look into a generalized solution for context-free grammars for phrase generation. It would be nice to be able to describe the phrase-space in a config file for easy editing. Possibly create a 'phrase server' that both the VJ and the DJ would use. Might as well centralize the phrase code if it's going to get any more complicated.) Install the VJ onto a dedicated box once
vixyish moves to her new machine. Create 'news report' and 'weather report' channels that webscrape and feed to the talking head. Possibly add the ability to read from e-books on the server, though that is really more something the DJ should be doing. Continue to look for ways to get quicktime files to play fullscreen.
Aw crap, it's getting light out. So much for diurnalizing.
An introduction: The VJ is my tool for playing video files onto the living room tv, where they can be watching in civlized, couch-potato comfort. It is a Visual Basic app which runs on my Windows box. It listens to commands generated by a php script on my internal web server. It allows you to use the 'internet appliance' on the coffee table to list video files, play them, pause them, etc. I've been working on it for around a year now and it generally kicks ass. Video on demand, for real. (Assuming I have a copy on the fileserver, anyway.)
First I made the player controls dynamically generated, which I've been meaning to do for some time. In addition to eliminating some annoying minor bugs, it means I no longer have to reserve screen real estate for all three at once. (One was needed for each of windows media, real media and quicktime. Of course, you can't just stack them on top of each other, twiddling visibility or stack order when needed. They don't play well together at all.) This freed up the room needed for a talking head.
Next I installed the talking head. I first started with ActiveHead, which looked promising at first. The animation is a bit creepy, but the control was easy enough to add. However, I eventually realized that there was no way to know when the head was done talking. So I set out to find a better solution. I ended up with Microsoft Agent, the general technology behind Clippy. It was slightly harder to integrate, not really being meant for this kind of use. But once I figured out how to eliminate the speech bubble and test for queued-action-completeness, it worked quite well. The lip-sync is particularly good. After poking around at The Agentry and related sites for awhile I settled on Charlie as an agent. I'm not thrilled, but it works. Most agents are full body and when converted to blurry NTSC that doesn't leave much information for conveying... anything.
The rest was simple, being pretty much the exact same process Deadlocked DJ Hawking (my MP3 playing tool) uses. It creates a phrase randomly from subparts in a nice context-free-grammar fashion. For added quirkiness, it uses the web interface to pull quips from the Gargoyle (a vaguely Eliza-like AI of mine, whose soul purpose in life is responding to text input with short, occasionally relevant strings from a database of about 11k, doing some basic pronoun/name substitution in the process), with the series name substituted in if available. For instance, it could end up saying: Sit back and enjoy Daria - 111 - Road Worrier. If the road to hell is paved with good intentions, Daria just earned their own
toll booth.
Here is a screenshot (only 40K in size, for those who have been complaining) of it after a few load/stop commands have been sent. The player control (wm, real or qt, depending on the file type) itself is created in the top left corner. There wasn't one when this screenshot was taken, since nothing is playing.
Voila, a VJ that talks back. I'm not sure how useful this is, but I'm getting very interested in exploring the concept of an integrated computing/media infrastructure. Digital convergence and all that. I keep adding quirky little tools and they keep ending up far more useful than I had expected. They also keep integrating with each other in surprising ways. So far it has all worked best when I don't try to plan ahead, so I'm just doing whatever seems nifty to me at the time.
On the VJ todo list: Add more random phrases for the talking head to say. (Look into a generalized solution for context-free grammars for phrase generation. It would be nice to be able to describe the phrase-space in a config file for easy editing. Possibly create a 'phrase server' that both the VJ and the DJ would use. Might as well centralize the phrase code if it's going to get any more complicated.) Install the VJ onto a dedicated box once
Aw crap, it's getting light out. So much for diurnalizing.
