Pandora Light Music Player For Pandora


MarkoeZ

arr matey?
Joined
May 21, 2008
Messages
1,183
Age
44
Website
projectinfinity.org.uk
A while back i needed some distraction from working on Panjoust, and then a forum post came along. This one (the mockups there are very nice, but might not completely be the direction we are going)

Now, there will be better ones, lighter ones, or more configurable ones, but work has started on a minimal pandora music player. Goal is to take full advantage of the pandora specific controls, by using some nice big touchscreen buttons and the hardware buttons for skipping and (software) volume for instance. Later on, using nubs for file scrolling, etc.
It started mostly just as a coding excercise for me, to practice some more filehandling and other stuff i need to know for Panjoust without messing up that code. But it IS a Pirate Games project, so PokeParadox will be punishing me and doing some correcting in case of memleaks or other code messups ;)

Currently Working:

- Browsing directories and adding music files to the playlist with action buttons and dpad (on pc: keyboard). Mouse/Touchscreen support for that is pretty WIP.
- Adding full directories to the playlist (not recursive yet)
- Switching back/forward and pausing songs, supported by hardware buttons, and big buttons on the touchscreen.
- Next/Previous songs preloaded, so no small pause between them because i seriously get irritated by that ;) (can eventually be turned off in a menu if the user has lots of very large music files)
- Shuffle play

And since it's (ofcourse ; ) Penjin based, it's just about guaranteed to work on the Pandora itself (can't test yet, still waiting)

To do: (well, quite a lot...)

- ID3 tag support (Tips anyone?)
- Better playlist editing
- Playlist saving and loading
- Create nice screen layout
- Perhaps include album art

As said, it started out only as a code test, but it seems something might actually evolve from this.

Cheers!

MarkoeZ

P.s. The Mockups:
musicplayer.jpg
musicplayermenu.jpg
 
Last edited by a moderator:
Plan on adding options for a USB CD drive? I see a fancy lil' eject button in that mockup! hehehe...


Anyway, lookin good! Be careful with the preloading of songs. I know the original iPod's(Ya know, the ones with the bad @$$ scroll wheel?) do this to cut down on disk spinup time and actually spin down the disk to a lower rpm to save on battery. The downside, if the user skips a song, you're going to have to unload that song out of memory, or at least delete the object, and reload. Not a huge issue, and personally, I'd stay with song preloading, just thinking out-loud. Another thing the iPod does is that it does not preload the next shuffle song because it is not calculated until after the current song has finished, so if you could implement preloading of the song there, I'd love you forever! (Even more if you could teach my iPod the same thing! I get awful battery life while on shuffle because of this >.<) Anyway, keep up the good work! Inspired by the Android music player by chance? I'm noticing a lot of similarities to the GUI design. Not saying you stole it, just inspiration! Like it either way! =)
 
HacDan said:
Plan on adding options for a USB CD drive? I see a fancy lil' eject button in that mockup! hehehe...


Anyway, lookin good! Be careful with the preloading of songs. I know the original iPod's(Ya know, the ones with the bad @$$ scroll wheel?) do this to cut down on disk spinup time and actually spin down the disk to a lower rpm to save on battery. The downside, if the user skips a song, you're going to have to unload that song out of memory, or at least delete the object, and reload. Not a huge issue, and personally, I'd stay with song preloading, just thinking out-loud. Another thing the iPod does is that it does not preload the next shuffle song because it is not calculated until after the current song has finished, so if you could implement preloading of the song there, I'd love you forever! (Even more if you could teach my iPod the same thing! I get awful battery life while on shuffle because of this >.<) Anyway, keep up the good work! Inspired by the Android music player by chance? I'm noticing a lot of similarities to the GUI design. Not saying you stole it, just inspiration! Like it either way! =)

Nope, no plans for cd support whatsoever. The mockup was made by Trevsweb befor i did a single line of coding. I just included them because that's what got me going. And i will probably be using some of the gui elements.

About the pre-loading: Yes it also pre-loads the next shuffle song. And yes the song is deleted from memory.
 
Last edited by a moderator:
MarkoeZ said:
To do: (well, quite a lot...)

- ID3 tag support (Tips anyone?)
- Better playlist editing
- Playlist saving and loading
- Create nice screen layout
- Perhaps include album art

For me it certainly HAS to include album art support or I won't use it ;)
Some tips or ideas:
- please make the interface skin-able, I know it takes some time to code a parser for skin files (and develop an appropriate file format), but it is worth it as people can easily edit the player to fit their liking and you can also easily change the layout without recompiling all the time
- drag-and-drop playlist editing, in general: make much use of the touchscreen as it makes navigating such a program much easier
- stolen from the archos gen5+ music player: display the name and interpret of the next and previous song beneath the skip buttons, it's a very handy feature and I love it on my Archos (also should be easy to do when you already preload them anyway)
- split-view playlist editor: left side of the screen shows the library, right-side shows playlist, move tracks by drag-and-drop (see above) or buttons
- equalizer (dunno how hard to do that is with SDL_mixer)
- support for casual m3u playlists (so I can use the ones I have on my PC)
- variable filename support for album-art: make an input field which accepts comma-separated values, so one can enter multiple filenames the player will look for
- not a necessity, but some people might need this: variable support for filenames (for album art): so one can use %art or %alb for example to use the artist or album name as a filename
- also not necessarily: mouse gesture support, flick left - skip back a track, flick right - skip forward a track, move in a circle - skip to a random track

I might add more when things come to my mind ;)

Looking great so far, hope it will also turn out that way in the end - good luck :)
It will certainly be a nice project to show off the very varied features of Penjin.

foxblock out
 
Last edited by a moderator:
Great work ...i like it :)

For new features ....
all the things that stated by foxblock will be fine to have implemented.
 
GizmoTheGreen said:
lets see screenshots!
or you dont have a pandora yet?

MarkoeZ said:
And since it's (ofcourse ; ) Penjin based, it's just about guaranteed to work on the Pandora itself (can't test yet, still waiting)

But I agree, some screen shots would be nice :)
 
Last edited by a moderator:
hooooooold on everybody. Never said this would be THE pandora music player to be used in all places. Also i mentioned in the first sentence that the mockups were the thing that got me started, not that it was going to look exactly like that. And Foxblock, i really don't think i have the time to implement all of the features you are requesting any time soon. But i did take notice of some of them, so you might see those in the player :) The general playlist loading for instance sound good, but i'd have to study a bit

This will be a LIGHT player. Put songs into playlist, change positions in playlist, save playlist, and that's just about it. I know i won't be using a very large library myself, and i just like a simple player, with big text and big buttons even visible in bright sunlight (i spend some time in the park with friends if the weather is good :) )

All the stuff working is technical. Nothing nicely arranged yet and some on-screen buttons still missing. But since you guys are all screaming about a screenshot, here is one of the playlist editor in it's current raw state:

player%20screeny.png

MarkoeZ

Edit: And yes, album art will be supported, you convinced me ;)
 
awesome. Thanks for letting of know about the development. He you need anything from me just let of know :) better reply tomorrow. Night.
 
Will it have a queue function?
That is what I like about Winamp, just throw everything in the playlist and be able to queue stuff you want to hear first.

Mockups are looking good, good luck :)
 
This would be rocking: Shoulder button control (for when the Pandora is closed). For example...

Hold right, press left = Previous
Hold left, press right = Next

Tap right+left = pause

(ripped off from Moonshell).
 
SomeGuy99 said:
This would be rocking: Shoulder button control (for when the Pandora is closed). For example...

Hold right, press left = Previous
Hold left, press right = Next

Tap right+left = pause

(ripped off from Moonshell).

Now that's what i like. Easy to implement, and very useful.

Skipping is tested, and works. Pause is next. works as well

Cheers!

Edit: and for the screenshot hungry mobs: ;)

playerscreeny3.png
 
Last edited by a moderator:
MarkoeZ said:
hooooooold on everybody. Never said this would be THE pandora music player to be used in all places. Also i mentioned in the first sentence that the mockups were the thing that got me started, not that it was going to look exactly like that. And Foxblock, i really don't think i have the time to implement all of the features you are requesting any time soon. But i did take notice of some of them, so you might see those in the player :) The general playlist loading for instance sound good, but i'd have to study a bit

Yeah, it was meant as a list of all ideas which came to my mind. The ideal player should have all or most of there, but I understand that you can't implement them all (if you open-source the player I might implement some of them myself). Just take what deems useful to you.

The current screenshot looks pretty nice, but please, for the love of god, chose another font ;)
You can find the bold version of the moderna font in the PP/build/fonts directory, this would already make a huge difference. IMO the moderna font family is pretty nice in general, but just pick one that is simple and easy to read (nothing comic-like).

foxblock out
 
Last edited by a moderator:
One feature I've always wanted in a music player is a way to 'blacklist' songs in albums.

Let's face it, most albums have a couple of duds, which you don't want to listen to most of the time, but don't actually want to get rid of.

And some albums of course have a god damned awful song or two that you'd never choose to listen to, but again don't want to get rid of in case one of your mates ever says 'oh hey do you have this song...'.

So my ideal music player would have the option to blacklist these files so that they are never usually played. The blacklist could, however, be over ridden by a menu, or interface (if there's space) option that says 'include blacklisted songs'
 
Pleng said:
One feature I've always wanted in a music player is a way to 'blacklist' songs in albums.

Let's face it, most albums have a couple of duds, which you don't want to listen to most of the time, but don't actually want to get rid of.

And some albums of course have a god damned awful song or two that you'd never choose to listen to, but again don't want to get rid of in case one of your mates ever says 'oh hey do you have this song...'.

So my ideal music player would have the option to blacklist these files so that they are never usually played. The blacklist could, however, be over ridden by a menu, or interface (if there's space) option that says 'include blacklisted songs'
I used to have a foobar2000 component that would skip songs that you tagged with a skip tag... Indeed it is a very useful feature and I miss it from pretty much all linux players.
 
Last edited by a moderator:
I've had a little crack at this using python/pygame. It plays stuff and you can track advance, previous and [un]pause.
It finds any .mp3/.ogg down a list of directories. So the play list is "ALL" (file name based) and generated each time although it does start to play the first track as soon as it is found.

Mp3 headers - via the id3reader.py module. May need to use mutagen as this seems more comprehensive (by I need to keep this lightweight). more info

ideas as to what to do next.
  • get track length from metadata and do a slider.
  • Display the tracks/playlist
  • volume slider
  • save the playlist once generated. Add option to refresh (config screen).
  • Pick up album art and display.
  • Build a database based on the metadata so playlist can be by artist or album.

General Ethos: Simple/lightweight - Feature unrich (you want it you code it), finger friendly, playlist orientated, fully skin-able(see Feature unrich caveat).
 
foxblock said:
The current screenshot looks pretty nice, but please, for the love of god, chose another font ;)
You can find the bold version of the moderna font in the PP/build/fonts directory, this would already make a huge difference. IMO the moderna font family is pretty nice in general, but just pick one that is simple and easy to read (nothing comic-like).

foxblock out

Lol, the font is just still there from soundbox project i stripped and used as a base. I find it easier to strip another projevt than setting up everything again from scratch. And i'm more the kind of guy that makes everything work first and worries about cosmetics later.
Will take a look at that moderna font, thanks :)

@ May88: Cool, more choice is never wrong :) Still looking for a good way to implement id3 tags myself. But since im using c++, your way is not an option.
Looking forward to your progress!
 
Last edited by a moderator:
MarkoeZ said:
Still looking for a good way to implement id3 tags myself.
Just include this (if its not in the base fw, didnt check): http://tangent.org/480/libID3.html
It's C, but the header is already wrapped with extern C, so should be trivial to use from C++, too.
 
Last edited by a moderator:
urjaman said:
MarkoeZ said:
Still looking for a good way to implement id3 tags myself.
Just include this (if its not in the base fw, didnt check): http://tangent.org/480/libID3.html
It's C, but the header is already wrapped with extern C, so should be trivial to use from C++, too.

Well, i'm developing on windows, and setting up libraries and stuff is really not my thing. I keep running into problems, and tried different libs. I switched to ID3Lib (had windows binaries and also in angstrom repo), added all files and linked libs, compiles and runs well with #include "id3/tag.h", untill i add
Code:
ID3_Tag currenttag;
then i get
Code:
C:\SoundBox\id3\field.cpp|1068|error: `ID3D_WARNING' was not declared in this scope|

Probably just a file or option missing, but no clue which one :S added the complete source and header dirs by now.
Google is not much help unfortunately, there are loads of programming tutorials, but not much on how to get this stuff working proper...

MarkoeZ

Edit: switched to taglib since it's updated regularly, but still difficulties. anyone have experience with that?
 
Last edited by a moderator:
MarkoeZ said:
@ May88: Cool, more choice is never wrong :) Still looking for a good way to implement id3 tags myself. But since im using c++, your way is not an option.
Looking forward to your progress!

Well it's very much WIP and very, very lightweight. Developed on Linux and not tested on window as yet.
The files are under here.
You need the kithara_0.1.0.tar.gz file. Unzip, untar and run run_kithara.py (or pyw) in a terminal (still some debug stuff written here).

Screenshot-Kithara%20-%20Pandora%20Music%20Player.png
u it was WIP. :p
 
Last edited by a moderator:
Back
Top