I've completed a test version (kind of a 'proof of concept'). Please everyone try it out if you're interested.
Public - Windows Live
IMPORTANT - How to use it.
This version will lower the volume by a set amount when a song with a rating of 2 or 3 is played (these are the ratings given by Zune when the song has a 'broken heart').
To test this, you will need a playlist of songs with differing volumes and set the overly loud ones to have a broken heart rating (it seems to take a while for the broken heart ratings to sync properly between device and software though).
Start up the playlist and then run the app.
The app will display a blank screen with some text about the song you are listening to. If the song has a rating of 2 or 3 the volume will be reduced and the text will say that volume is being reduced.
To test it I used the latest REM album 'Accelerate', which is mastered WAY TOO LOUD and added it to a playlist with some older REM tracks. The app made them all sound the same volume! This app will be great for driving in the car listening to a playlist or shuffle.
I'm not sure if using broken heart ratings is the way to go or not. The only other way I can think of is to create separate genres for all loud music and then make songs with e.g. 'loud_music' genre to be turned down. I suppose I could even make a setting within the app to select the criteria.
Unfortunately XNA has limited access to the metadata (at least as far as I know), otherwise it would be trivial to simply create a new tag called 'volume_adjustment' and have individual settings for each track allowing precision control.
NOTE: this is my first piece of programming, so don't judge it too harshly. I am just learning to use XNA/C#.
thanks,