The Bose VideoWave was an innovative entertainment system introduced by Bose that combined a high-definition television with an integrated, advanced audio system. Here are some key features and aspects of the Bose VideoWave:
Dr. Bose wanted to unveil a television that was extremely easy to use that sounded incredible out-of-the-box. Remote controls had been covered with a multitude of buttons - leaving users in a confused state most of the time. Dr. Bose posed a challenge to the company.
I'd like a television remote control that only has five buttons. - Dr. Amar Bose
This simple request kicked off a series of many related projects, each with it's own unique codename. There was the remote control itself. There was the user interface that had to go along with the remote. Then there was the connected Lifestyle box. Then there was the panel itself. There was remote to systems communication. There were all kinds of explorations that began.
After attending design meetings in regard to the user interface and the remote that would control it, I alone was tasked with designing and building a functional prototype that was good enough to convince key stakeholders that whatever we came up with would be a great experience and would be included.
Early whiteboard sketches
We gathered initial whiteboard sketches of the user interface and remote controls before progressing to unveil the content below the video layer. This foundational step helped establish the framework for our next design phase.
The Bose VideoWave's remote control and on-screen user interface were designed for simplicity and ease of use. The remote control had an ergonomic design, fitting comfortably in the user's hand, and featured a minimalist layout with fewer buttons than traditional remotes. This reduction in complexity made it user-friendly. It also functioned as a universal remote, capable of controlling the VideoWave system as well as other connected devices, thus eliminating the need for multiple remotes.
The remote included a touchpad for intuitive navigation, allowing users to swipe and select options on the screen. The remote also had programmable buttons, enabling users to customize certain buttons for specific functions. The buttons were backlit, making the remote easy to use in low-light conditions. The remote provided one-touch access to frequently used features and settings, such as volume control, source selection, and power on/off.
In order to reduce the number of physical buttons, we decided to place the majority of them on screen, below the video source. When the user touched a square trackpad on the remote, the video would scale down, exposing the button elements. A positional finger position interface would show which button currently had input focus. A click on the trackpad (clickpad) would select the currently highlighted button. We called the cursor "Tinkerbell".
We came close to using only five buttons, but executed a final design that tested very well with 87% of our test users.
I worked with an engineer named Lazlo who provided the input data to my application, sendng me X and Y locations on the track pad. He also sent me press and release states for all of the buttons, including the track pad itself. We worked hard on getting the communication quickly and accurately.
I created several audio clips for the on-screen user interface using a diverse range of MIDI instruments. While many were not utilized, this experimentation led us to develop a remarkable spatial audio track: a recording of an orchestra warming up. The result was a stunning, immersive sound that truly filled the space. This played during each cold system startup process.
Below are a few samples I was able to locate.
We could watch and control live cable television! I installed a video capture card that supported HDMI input. My application could see that card as a video source and stream it into my interface. We get a Comcast drop in the design center and we hooked up the box in my office. I worked with Lazlo again who used the Comcast remote and retrieved the IR codes it sent to the cable box. Knowing this, he gave me an IR blaster that I could use to send those commands to the cable box from my application. I just needed to make sure the blaster was pointed at the cable box.
To save time making algorithmic changes, I created a debugging console that appeared on the television display which allowed users to see the state of the application and make edits to parameters. In this way they could tune interactions until it was just the way they wanted it.
I collected this data later to see what the most effective settings were from all of those who used the prototype. The console also displayed the x, y coordinate data from touches, press states, and more that was saved to a local file that I could parse later to help debug all state conditions. This saved many hours of development time and allowed everyone to customize the settings to their liking (which would later be evaluated).
I put the whole prototype on a rolling cart which allowed me to wheel it around the Research and Development building - allowing people to experience the prototype in their own office. I had a local video file that would loop and serve as the cable feed - and in the "mobile" state, IR commands were not sent from the blaster. It was used to evaluate the source navigation and the remote control.
There were easily over 20 iterations of the prototype - all in the effort of making the experience as smooth and effortless as possible while also delivering on production-quality assets. We wanted there to be no guesswork and no surprises at all.
There was a week where the prototype was close but not close enough. I re-wrote part of the input engine which yielded even snappier interaction behaviors which also smoothed out all the animations and reduced mistaken input almost completely. The project was a resounding success!
Everyone, this is truly remarkable. We believe that this is a game-changing feature, and we are really excited about it. We're going to include it!- Senior Marketing Mgr.
I found a system operating guide online which goes into great detail about the entire system and all of its components. View the PDF.
package
{
import flash.display.Sprite;
import flash.events.Event;
public class MapCoordinates extends Sprite
{
// 16:9 (1080p)
private const RECT_WIDTH:Number = 1920;
private const RECT_HEIGHT:Number = 1080;
private var items:Array;
private var previousMouseX:Number;
private var previousMouseY:Number;
private var velocityX:Number = 0;
private var velocityY:Number = 0;
private const ACCELERATION:Number = 0.1;
public function MapCoordinates()
{
items = [];
for (var i:int = 0; i < 10; i++) {
var item:Sprite = createItem();
items.push(item);
addChild(item);
}
this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function createItem():Sprite
{
var item:Sprite = new Sprite();
item.graphics.beginFill(0xFF0000); // Red color
item.graphics.drawCircle(0, 0, 10); // Draw a circle with radius 10
item.graphics.endFill();
return item;
}
private function onEnterFrame(event:Event):void
{
var mouseX:Number = this.mouseX;
var mouseY:Number = this.mouseY;
// Calculate velocity
if (!isNaN(previousMouseX) && !isNaN(previousMouseY)) {
velocityX = mouseX - previousMouseX;
velocityY = mouseY - previousMouseY;
}
previousMouseX = mouseX;
previousMouseY = mouseY;
// Calculate target position
var target:Object = mapToEdge(mouseX, mouseY);
var targetX:Number = target.x;
var targetY:Number = target.y;
// Move items with acceleration
for each (var item:Sprite in items) {
var dx:Number = targetX - item.x;
var dy:Number = targetY - item.y;
item.x += dx * ACCELERATION;
item.y += dy * ACCELERATION;
item.alpha = 0.5 + 0.5 * Math.sqrt(dx*dx + dy*dy) / Math.sqrt(RECT_WIDTH*RECT_WIDTH + RECT_HEIGHT*RECT_HEIGHT);
}
}
private function mapToEdge(x:Number, y:Number):Object
{
var targetX:Number;
var targetY:Number;
var aspectRatio:Number = RECT_WIDTH / RECT_HEIGHT;
var mouseAspectRatio:Number = x / y;
if (mouseAspectRatio > aspectRatio) {
if (x < RECT_WIDTH / 2) {
targetX = 0;
targetY = (y / RECT_HEIGHT) * RECT_HEIGHT;
} else {
targetX = RECT_WIDTH;
targetY = (y / RECT_HEIGHT) * RECT_HEIGHT;
}
} else {
if (y < RECT_HEIGHT / 2) {
targetX = (x / RECT_WIDTH) * RECT_WIDTH;
targetY = 0;
} else {
targetX = (x / RECT_WIDTH) * RECT_WIDTH;
targetY = RECT_HEIGHT;
}
}
return {x: targetX, y: targetY};
}
}
}
Hosts:Dick DeBartolo with Leo Laporte. Combine a vibrant 46" HD screen with an invisible surround sound system and you have the Bose VideoWave entertainment system.