Posts tagged Zune HD
Zune Tip: Smart DJ Playlists
Nov 11th
Zune introduced the Smart DJ playlist which is a great feature to use to have the Zune software build a playlist based off a song, album, or artist that you select. The playlist will include items from that artist, related artists in your collection, as well as artists from the Zune Marketplace so long as you have a Zune Pass. This feature is very similar to what you would experience with Pandora. The major difference is that you can sync these lists to your Zune device and enjoy the tunes on the go.
Creating a Smart DJ Playlist takes two simple steps:
- Find a song, album, or artist you want to create a playlist from and right-click then choose “Create Smart DJ playlist”
- Give the playlist a name (or keep the default) and click “Ok”. If you want the playlist to update itself periodically, click the checkbox.
- Watch in amazement as the Zune software builds your playlist and grabs marketplace content (Zune Pass subscribers only).
When the playlist is ready you can sync it to your Zune device. Enjoy!
Zune Pass and why Microsoft will get $14.99/month from me
Nov 9th
For my 30th birthday I was convinced by my wife and a friend to get something fun, so I went with the Zune HD. The day it came out I chased one down and was filling it with music that night. I encountered the ZunePass trial but decided to hold off as I had a pretty large MP3 collection from years past. Just over a week ago I decided to go for the trial as I found some music I had been searching for and it seemed like a convenient way to get it. A few hours after activating the trial, I was ready to drop $14.99/month.
Here’s why:
Unlimited downloads, any time, any where. If I’m sitting in bed looking for a song and I find it, bam, it’s there. Next time I sync up it’s on my laptop too. You keep the music as long as you pay your subscription and there is no change in the agreements for that music to be subscription eligible. By the way, you can sync the Zune HD wirelessly.
Keep 10 songs per month forever, in raw MP3 format (when available) or in protected WMA. Go DRM free with MP3s at your own risk (i.e., you lose it you may not be able to download it again) or go with DRM protected WMA files and deal with some limitations. The choice is yours and you keep the songs forever whether you keep your subscription or not.
As you listen and rate Zune finds artists for you. Creepy, maybe? Does it get it right? Actually, yes. Scarily so. The Zune software already pegged me as a alt rock/new rock junkie and some of my other tastes are surfacing as well. As of the Zune Firmware v4.3 update the song count glitch on the Zune HD which is good news because the Zune software uses your counts to award badges and find new music for you.
Find like-minded listeners and see what they are listening too. If the Zune software metrics aren’t enough it will point you to like minded listeners. Your Zune account is also tied to your Xbox Live account and it will pull in your friends too. I discovered several of my friends are heavy Zune users. Who knew?
Are there other software packages out there doing this? Yes. Do I care? Not really. For once I’m able to leverage software to help me find music that I wouldn’t otherwise encounter. It also helped me find CDs I lost years ago. Given what I spent on CDs in my youthful years, $14.99/month is a bargain to have access to 1000s of artists and be able to discover music that you won’t find on your typical HD radio stations (Which the Zune HD supports as well). The way I see it is that $10 a month goes to stuff I keep, forever, and the other $4.99 gives me access to anything I want.
Other fun things I didn’t know about the Zune:
Plug it into an available USB Port on your Xbox 360 to play any content off your Zune, including protected content. I’ve taken to playing a little Chopin for the kids to bring some peace to the house.
Earn badges for being a music junkie. Like the Xbox 360 achievement system the Zune software gives you meaningless awards for listening to music. Bragging rights are often worth the price.
Download songs from the marketplace that you hear using the Zune HD’s built in HD radio. Forget scouring the stations website for a playlist, just go get the song already!
Exploring the TouchPanel API with the Zune HD & XNA 3.1
Sep 19th
While I have been fully enjoying my Zune HD experience I decided I should give apps a try after seeing the announcement about XNA Studio 3.1 and the XNA Extensions for the Zune HD. I have explored XNA a little prior to this but did not really dig into it. With my Zune HD in hand I decided it was time to take it for a spin.
Getting Started – What you need:
- Zune HD (16 or 32gb, I rock with the 32) + Cable
- Visual Studio 2008 / Visual C# + XNA Studio 3.1
- Zune HD Extensions
- Zune Software must be closed while running XNA Studio and debugging on your Zune hardware
Should you try to run software on your Zune without the extensions you will get an error message to the effect of “The XNA Framework runtime required by this game project is not available on ‘{YOUR ZUNE NAME HERE}’”. If you see this message, make sure you have the extensions installed and that your project targets XNA 3.1. This post on the XNA Creators Club forums helped me get started.
For some other background reading check out “Nazeeh’s Little Corner of the Web”, particularly his posts Anatomy of a Game Part 1 and “Hello World!” in XNA.
Exploring Microsoft.Xna.Framework.Input
As with all things framework, namespaces help us find things. The default XNA Project for the Zune does not give you too many pointers on where to find your input devices so I hopped over to object browser and found some interesting classes:
The documentation on the classes is pretty skim so I took a stab at some code and hacked this out:
protected override void Update(GameTime gameTime) { // Allows the game to exit if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit(); //Get the touches from the TouchPanel TouchCollection touches = TouchPanel.GetState(); if (TouchPanel.GetCapabilities().HasPressure) { foreach (TouchLocation item in touches) { squareManVector = item.Position; touchPressure = item.Pressure; } } base.Update(gameTime); }
There is a TouchCollectionEnumerator, however, I was looking for the simplest thing that could possibly work and this does the job. What I did was created a TouchCollection variable “touches” and call “GetState” on the TouchPanel class. That provides a TouchCollection which we can enumerate through to update the position and pressure. I’m not entirely sure the check for HasPressure is needed, but I was exploring the API and thought I would see what that provided.
A couple of variables in here may leave you wondering, so I will explain them real quick. squareManVector is a Vector2 which sets the position of my square man sprite:
who is aptly named squareManTexture. Yes I know, he is nothing fancy! In my first attempts just to learn I was looking for the basics, so I stuck him at a vector of 0,0. But, after discovering the touch API I decided to see if I could move him around.
Also note that for the Zune HD the “BackButton” is the button on the center of the device near the bottom. Based on the code above it becomes the de-facto exit button.
In the Draw method I have the following code:
protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin(); string currentVector = string.Format("{0}.{1} : {2}", squareManVector.X.ToString(), squareManVector.Y.ToString(), touchPressure.ToString()); spriteBatch.DrawString(font, currentVector, new Vector2(50, 50), Color.Black); spriteBatch.Draw(squareManTexture, squareManVector, Color.White); spriteBatch.End(); base.Draw(gameTime); }
What is the end result you ask? When the game loads, squareMan is hanging out at the top left of the screen:
If you touch the screen he obediently moves:
But we can do more than touch…so let’s drag him around:
Note that while dragging the pressure sensitivity begins to display. Freaking sweet! I don’t think I have been this giddy about programming since I first started. Look forward to more articles on XNA programming as I dive into it with the Zune HD. I might even have to hook up my 360 with XNA Studio to give that a whirl!
Update 9/19/2009 @ 11:47PM CST
Because I’m still tinkering with it, here is how you can use an IEnumerator with the TouchPanel which is probably the more proper way to use it:
protected override void Update(GameTime gameTime) { // Allows the game to exit if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit(); IEnumerator<TouchLocation> touches = TouchPanel.GetState().GetEnumerator(); while (touches.MoveNext()) { squareManVector = touches.Current.Position; touchPressure = touches.Current.Pressure; } base.Update(gameTime); }
Enjoy!!

