This is the second posting in a series about controlling DigiLinX with IR. It assumes that you are familiar with the system that I described in my original post in this series, as it makes reference to rooms and devices described in that posting.
The Challenge
Working with a single IRLinX at the head end introduces a challenge with volume control. The published Mute, Volume+ and Volume- IR commands for DigiLinX adjust the volume in the current room only. In my case this would adjust the speakers (were there any) connected to the Head End SpeakerLinX in the A/V closet. Instead, what I want to do is adjust the volume in the room that I’m currently controlling with my T4.
The Approach
My T4 design allows me to be aware of which room the user is when I’m setting it up. This means that each page of the T4 can have specific commands assigned to the volume buttons. My approach will be to build macros that adjust the volume in a specific room, and assign that macro to the volume buttons in the appropriate room.
Using macros gives me one more advantage. The Kitchen and Family room zones are essentially one large room. Macros will allow me to treat them as a single zone, adjusting the volume and mute in both places at the same time.
The Solution
The macro builder in Dealer Setup 2.1 doesn’t provide a way to adjust volume or down for a specific audio source. Don’t be mislead by the VOL UP and VOL DN commands that appear for a player service – they refer to the IR commands that you learn into a ControlLinX. There’s an option for Set Volume Level, but that only allows you to set the volume to a specific level. What we want is the ability to adjust the volume or down by a tick.
So how do we adjust the volume level for a specific player? You have to go to the ASCII reference in the Programming for Third Party Control manual to find the answer. The format to do this is:
#@PLAYER NAME#LEVEL_UP VOL
#@PLAYER NAME#LEVEL_DN VOL
You’ll have to switch to advanced view in Macro Builder to do this. I’ll also add in Mute Off here in case the user has muted the sound, so they don’t have to turn the sound back on manually. Imagine if they cranked the sound all the way up, then realized it was muted and switched the sound on.
The Implementation
In the end, I created 6 macros:
Volume Up Family Room
Volume Down Family Room
Volume Up Living Room
Volume Down Living Room
Mute Toggle Family Room
Mute Toggle Living Room
Here’s my Volume Up Family Macro:
In my Head End SpeakerLinX, I assigned these macros to User Commands:
Lastly, I assigned the IR codes for user commands to the volume buttons on the proper pages in the T4 setup. In the following example, the user has selected the Family Room, so I know that I need to assign the Family Room macros on this page:
Now when the user presses Volume Up on the Family Room screen, the Head End SpeakerLinX will should run the vol up Family Rm macro.
Observations
All in all, this is a fairly straight forward approach. I wish there were Volume Up and Volume Down options in Macro Builder for a specified player, but it’s no big deal to switch to advanced mode and type them in manually.
One of the problems I’ve had with this approach (aside from real reliability issues with IRLinX) is that the user has to click the volume up and down buttons once for each adjustment in volume level. A sustained hold on volume doesn’t appear to call the macro repeatedly. I’m still looking for a solution to this, but one work around might be to adjust the macro to turn the volume up and down by 3 levels, rather than just one. This should at least make volume adjustments quicker.
Lastly, a common thread across this series of postings is that IR control of Digi is remarkably unreliable. I’m getting about 60-70% (non-scientific, of course) reliability when issuing commands. What that means is that the user might have to press Mute twice or three times before the volume actually shuts off. What makes matters worse is that macros sometimes take a couple of seconds to actually execute, so you might press mute twice in a row thinking that the command failed, only to have both presses execute, thus canceling each other out.
One way to determine if a macro has executed or not is to use my DigiLinX Debugger, filter output to only show the device with the IRLinX you’re using, and watch for messages that say “HandlePress Button 255, Time 0″ followed by an ASCII command that represents your macro, such as:
CKeypadButton:SendCommand:#@SL2200604700116100B7D2_3SL2200604700116100B7D2_6#MACRO {{#@Family Player#MUTE TOGGLE|#@Kitchen Player#MUTE TOGGLE}}
When the IRLinX fails to interpret the command, you’ll see the message “Suspicious stuck bit” or “NQueue::Put: queue NQueue full, message droped”. If you see the later message, try turning down the output level on the RP6 flasher port. A good practice is to always turn the port down to the lowest level.
I’m interested in hearing your approach to this problem, if it differs from mine.
Filed under: IR, Macros, NetStreams, System Configuration
So the family room and kitchen are essentially the same room each with their own SpeakerLinx? I was thinking that you could configure them as playmates. It would make your macros a little simpler and maybe execute faster since you wouldn’t have to control two devices with the macro.
Under normal audio only listening, how does the client control the source and volume to these two rooms?
That’s a good point. I’ll ask them if they’d like me to do that. For some reason, the original installer had them separate, but I think they configured the system before the introducion of playmates. I can’t imagine that they’d ever have two different sources running in the different zones.
Interesting – I made the two rooms “playmates”, but they still retain unique Service Names (Kitchen Player and Kitchen 1 Player). It looks like I’ll still need my macros to adjust each individually.