Take the 2-minute tour ×
User Experience Stack Exchange is a question and answer site for user experience researchers and experts. It's 100% free, no registration required.

I've been working on, more for a hobbyist sake (and my personal use), a music player program. Actually playing the files is not at issue, but what is more at issue is the layout of the functions. The main things I wanted to accomplish in terms of requirements, which will hopefully help guide in what I'm asking:

  1. Minimally intrusive. More or less, the program sits in the notification area and only shows forms when certain functions require it. A popup menu controls the player.
  2. Able to take a collection of music files and select specific files based on certain criteria and play them continually until the user stops the program.
  3. Able to select/load specific files on demand.
  4. Offer certain controls related to the player itself and the ability to skip tracks when they are played.

While I have it more or less functional, minus a few crashes that need to get fixed, the whole layout of the functions seems a bit awkward and I've been struggling to think of a better way to handle it:

Jukebox Controls - related to #2 (Load collection, settings, start, stop set).

File Controls - related to #3 (Load/Previous/Next)

Player Controls - related to #4.

Now, for a number of reasons, this layout is striking me as awkward, both in terms of coding the functions (the actual player code has an "open" and "playing" event that's a little different depending on what part is in operation) and using the program. This seems to especially happen when it comes to using the file controls for the same general functions in the Jukebox set of functions. I thought about completely disabling the other group of functions when the other is in use (i.e. "File Controls" is grayed out while "Jukebox" function is in use) and duplicating the "Next" function, but that seems a bit awkward, too.

Since I'm more or less at a loss thinking of a way to do this that seems "natural", I thought I'd ask here. Does anyone have any suggestions on how to change the layout of the menu to make things act smoother?

Edit: As I wrote before, the program operates in the system notification area using a popup menu. There's really not much to see for a screen shot. But I restated the popup menu structure a little more literally here:

Program layout

share|improve this question
4  
Any screenshots of your current design for better undestanding of your question? –  Serg Jul 19 '13 at 6:15
    
@Serg Not really much to see in a screenshot. But I put a more graphical statement of the popup menu in the main post. –  Glenn1234 Jul 19 '13 at 23:36
    
So Jukebox Controls control the application itself. Is this right? How do Load Media and File>Load differ from one another? –  Jessica Yang Jul 23 '13 at 5:33
    
@JessicaYang Load Media is for function #2, File>Load is for function #3. The main reason for the app is the functionality under "Jukebox Controls", but I want to retain the ability to load specific songs should the user do it. –  Glenn1234 Jul 23 '13 at 16:01
add comment

migrated from programmers.stackexchange.com Jul 19 '13 at 1:58

This question came from our site for professional programmers interested in conceptual questions about software development.

2 Answers

up vote 2 down vote accepted

Let's look at some functions you said the player has:

Able to take a collection of music files and select specific files based on certain criteria and play them continually until the user stops the program. (Currently under Jukebox Controls)

and

Able to select/load specific files on demand. (Currently under File Controls)

These two both implement the basic functionality of 'load some music so I can start listening to it', and you've already noted that it seems kind of awkward to have two sets of similar options, so why has this happened? My guess is that your current menu design was built around the implementation model of your program: how you, as the dev, know how the music player actually works.

However, the user doesn't care if you have two functions called loadFileset() and loadOneFile() in your code. In fact, you could have loadWavFile() and loadOggFile() and a million other functions and the user wouldn't care nor want to see them in the UI. My guess is someone using this really just wants to load some music and be able to start listening to their favorite songs. And that's what you need to design for.

Actual suggestions: to me, at least, your functions seem to fall into three logical groups:

  1. Load Music
  2. Play Music
  3. Settings (and stuff like About and Exit and whatever)

I would start reorganizing/thinking about my menu items from there. I hope your code is easy to rewrite!

I would also argue that prev/next belong with the player controls instead of file controls. When playing music, files become tracks to users - they're no longer just a bunch of .mp3 and .wma and .ogg files in a directory; they all become pieces of music and should be treated accordingly.


Background reading on implementation, representation and mental models: http://www.uxpassion.com/blog/strategy-concepts/implementation-mental-representation-models-ux-user-experience. Although the diagram there is definitely stolen from somewhere - I can't remember which book...possibly About Face 3 by Alan Cooper. (can someone else verify?)

share|improve this answer
    
Thanks for your comments. While it's taken a while for me to get back to this project, it's helped in how to handle the menus. –  Glenn1234 Oct 2 '13 at 6:06
    
that's great! what did you end up using? –  Jessica Yang Oct 8 '13 at 20:10
    
I removed the "Load specific file on demand" functions and then flattening the popup menu so there's only one level relating to the "randomly play stuff" functions. The "load specific file" functions weren't that important to the intent of the program and were better done with a standard player. I might add a "force specific music next" function later if it proves useful, but the menu is functioning much better now. –  Glenn1234 Oct 9 '13 at 1:19
add comment

In fact you have two entities - Jukebox and Player. Files is one of the sources for Jukebox while loading and playlist item for Player. Also, Player command are used more often than Jukebox. So your menu could be as follows:

Player

Play / Pause

Previous

Next

Volume

Jukebox

Load (Media or File)

Settings

Exit

PS. Sorry, I didn't understand Start/Stop Jukebox commands.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.