Premise Proposal for a MediaZonePlus Module - Alternative to Msense

Motorola Premise


Senior Member
MediaZonePlus Module:

I believe that premise needs an option to the way mediazones work. Msense makes sense for small environments (say a single familiy room theater), but for multi-zone installations with centralized sources, we should be able to disable msense and use a more intuitive model. What I propose is such a model. Please read through this. I'd like to get some feedback on this or other alternatives, then I'll post a "prototype" MediaZonePlus Module.

I currently use this module in my own home together with a custom GUI and iPhone based browser.

This module assumes that you are using a custom GUI (via minibroker, or via html using a browser such as safari on an iPhone) to communicate with the MediaZonePlus module. This module is not designed to work with the current Automation Browser.

The current premise MediaZone with msense works on the concept that you select a media content object to play and msense will hunt and find the associated source device that plays the specific media type and set it as the currentsource of the audiovideooutput. If more than one source in the mediazone can play the content (such as two cable boxes or two audio cards), msense will choose the source that is available, and if neither is available, the request is blocked. If the request is blocked and you want to access the blocked source from another mediazone, you must set grouping on the mediazone with the source, then join the group.

In addition, for file based media content (mp3 files in this example) that play through an audio card class, the existing premise MediaZone object IS the home level source device for this type of content. Since audiocards are just like any other source to a whole house switch, they should be treated like child source objects in the mediazone.

In my opinion, we need a home level mp3Player that lives under the mediazone just as a cable box or radio tuner would. We also need an mp3playerdevice class that lives in the devices that represents the device level audiocard. The home level mp3player would be bound to the device level mp3playerdevice and would control it. Nowplaying data from the device level mp3playerdevice would be propagated back to the home level mp3player. The mp3player would now be a manually controllable source and not tied to the home level mediazone.

So why all this:
In large (and medium and small) sized installations, the concept of premise msense autoselecting the source to play the media can be counter-intuitive. For example, the way most whole-house audio and video distribution systems work (such as Russound, Vaux, Niles, etc) is to have several source devices centrally located and connected as inputs to a switch which have lots of output zones. The most intuitive way for a user to operate the system is to select a room, then select the source they want to access, then to select the content/channel. The source may already be in use in another zone, but that's okay. If the user sees that a source is in use in the family room, and they want to view it in the Master bedroom, then they can either select the source in use or select a different source not in use (if they wanted to watch a different TV channel, for example).

The same goes for media file content. I have three audio cards in the premise server. I want to present each audio card as a separately controllable mp3 source. The user (via tablet, keypad, iPhone, whatever) can select a room, select from any of the three MP3 sources and have their room/zone connected to that source. If mp3 source 1 is already in use, so be it, I would just select it and hear the currently playing track. I would also have transport control over that source. If I wanted to listen to something different and not disturb the current mp3 source, I would just select an mp3 source that was not in use. Since there are three listeners in my family, three mp3 sources are plenty.

What's in the MediaZonePlus Module:
The MediaZonePlus module contains everything needed for a robust media implementation:
  • The mediazoneplus class
  • A new home level mp3player class
  • A device level mp3playerdevice class
  • Extension classes for a variety of existing home level AV component classes
  • Extension classes to TV and Radio Providers to provide sorting functions
  • Extensions to the Playlist Root and Playlist lists that provide add, delete,copy, shuffle features to the playlist folders
  • The FollowSwitch module by Damon Dean (This module is very useful for controlling other AV devices such as Video Switches in tandem with an Audio Matrix Switch or receiver.)
MediaZonePlus Usage:

Prerequisites: A TV provider named "ALL Channels" containing the channel lineup should be present if using TV sources. Any number of additional TV providers can be used for favorites.
  1. In a room, right click and select new-audiovideo-mediazoneplus.
  2. Set the audiovideooutput to a receiver or to a zone on a matrix switch.
  3. Right click on mediazoneplus to add sources such as cablebox, radiotuner, mp3player, etc.
A few words on the MP3Player Class:
A new source type called mp3Player is now available. To complement the mp3Player, there is a device level mp3PlayerDevice class. This is a custom device object that inherits from the old sys mediazone to give it the properties of a media player - but it lives in the device level! It has an audiovideooutput that is mapped to an audiocard device in the computer audio folder in devices. This process can be done for up to 32 audio card devices (I believe). What's cool about this, is that you can manually control each audiocard without msense intervention. As the audiocard changes tracks, the nowplaying info is propagated back to the home level mp3player object where details about the mp3 track are updated. User interfaces can easily access Artist, Album, Track and album art for use in a custom GUI.

MediaZonePlus Properties:
SetSource property is an objref that is set to either nothing or to one of the available child sources in the mediazoneplus. If nothing, then the sources are turned off and the currentsource of the mediazoneplus is set to nothing. If set to one of the available sources, then the currentsource is set to the selected source.

Content property is set to the objref of the content object to be played. If its an mp3, then the content property is set to the Playlist object to play. (Playlists are the best way to play any file based media because they let you select any track to play, from a list of tracks on a GUI) The mp3player has a gotoplaylisttrack feature that accommodates this.

Nowplayingtext is a text property that is used to display the currently playing content from the currently selected source. For example, if you selected cablebox1 as the source and the current channel was WNBC, then WNBC would be displayed in the mediazoneplus nowplayingtext property. If someone in another zone, also using source cablebox1 changes the channel to WABC, then any zone watching cablebox1 will have its nowplayingtext property changed to WABC. This works for all sources including mp3players.

Again, this makes it easy for a GUI to update the nowplaying in any zone. I had to make extensions to the various base classes for the common AV home level devices so that when the channel changes (in the case of TV) then the child source will propagate the nowplaying to the parent mediazoneplus nowplayingtext property. In addition, this model enables realtime feedback from Device level devices such as Satellite radio receivers. As the track changes and the Sat Radio updates, the device level Sat Radio can propagate its status to the home level Sat Radio and ultimately to the mediazoneplus nowplayingtext property. (See the mp3playerdevice as an example).

LastVolume property exists to enable persistence of the last volume setting for the zone. This is used when the mediazoneplus is placed in a scene and you want that scene to set the volume of the audiovideooutput to the desired level.

ZoneToJoin is an objref property that when set to another mediazoneplus object, it will take on the source and content of the selected mediazoneplus. This makes it very easy to join zones together programatically - again, useful from a GUI.

MediaZonePlus use in Scenes
Another useful side effect of this architecture is the use of MediazonePlus in Scenes. If you control-click on the mediazoneplus from the palatte and drag it into a scene, you can set the source, the content and even the "Volume" of the zone. The next time the scene is played, that zone will will switch to the selected source, set the content and set the volume.
I haven't progressed to the stage of exhausting mSense's capabilities but I believe I understand the merits of your proposed MediaZonePlus Module. I think I'll be in a better position to comment on the module after I've tried it.

Will you be posting MediaZonePlus in the Files section?
yeah, I'd be interested in it, as well....
I'd love to see this too. Although I have to say, that mSense is one of the reasons I love Premise and can't let go of it.

But I'd love to try another way of doing things to see if I'm wrong :)

Can you post your new MediaZonePlus module? I am curious how you subclassed the Mediazone. I tried to create custom Mediazone class yesterday and I could not inherit from the MediaZone class, even in Expert Mode.

Second, I was surprised to read that the mSense architecture did not work for your multi-zone, 3 sound card setup. I thought that was exactly what mSense was built for. I am currently playing MP3 media to 16 Vaux zones and sharing seems to be as I expected. I need to free up the player in a mediazone or join the zone. I was assuming that if I added another sound card I would get a second MP3 audio source (another Vaux input) and could share the extra player. I guess I need to try this to see the problem you are describing.

Encapsulating the MP3 functionality in a device class makes sense. I often wondered Premise designers decided against this. How would this class interact with other devices trying to use the sound card? For instance I use SAPI to send speech to the sound card.

One more thing. I am dying to see your IPhone interface. Can you post some screen shots? Will you publish the browser?