My EMX Music Player

Here is a short video with what I’ve done so far on the music player. I will release all the source code pretty soon. Please leave your impressions (good/bad).

Very nice!
Would it be possible to play internet streaming audio as well?


Yes, this will also be implemented.
Internet Radio, USB/SD player
Mail client (just to notify if new email arrived).
Weather info client.
And I’m not really sure if I need news RSS feeds.

Very cool,

would love to see internet audio steaming.

That would be AWESOME!
Then I could use my cobra to play streaming audio! Now I need to keep my laptop on for radio. :frowning:

Wow. It is pretty nice. I like how you present all the features in the video.

Excellent job! What was that when during controls demo screen went black couple of times?

Thank you all for the replies

What was that when during controls demo screen went black couple of times?

That slider is “connected” to the LCD backlight and at top, the backglight is off.

Looking great! Mounting one of these to my shop wall with a 7" display and amplified speakers would really be awesome! By internet streaming music, do you mean it will eventually support Pandora?

I guess it could support Pandora if you could provide info about the protocol they use. I can’t even get to their site:

I was thinking about shoutcast and icecast for now.

For shoutcast check this out:

GUI is very responsive! I don’t have experimented much with the LCD screen yet. Are you using Glide or your own GUI library?

In either case: nice job!

@ Architect: Thanks. I also have my own shoutcast client written (both for PC and avr).
@ Wouter Huysentruit: Thanks. It’s my home made GUI. Still needs some tweaks (I want it to perform faster).

I wonder if it would be possible (in some near future) to use only c/c++ for the EMX module. I would be tented to remake a huge part of the framework in native code for faster execution speed (or maybe a hydra module 8)?).

Great job! I assumed it was Glide…

Very cool 8)

The music capabilities and homebrew GUI are amazing, and I really like the way you implemented the weather display. I was hoping to do something like this in the future (when my skill level improves), but wasn’t sure if it could be done on the EMX platform. I was thinking I would need to use ChipworkX or Hydra.

That’s the reason why I partially switched to the AT32UC3B0256 with JTAG. Atmel has a Software Framework with support for all peripherals included in the µC. This c++ code is added to your project and you can modify it to your needs.

The main problem with the RLP/NETMF/EMX combination is that RLP code is loaded into RAM. It should be loaded from Flash.

F.e. I’ve found this.: when you have a lot of sequential RAM access, it would be optimised by a caching mechanism (block read/block write). But now, each instruction must be fetched from the same RAM and this breaks the caching acceleration and forces constant single word reads.

I’ve also searched the www for a replacement of the DRAM chip by a zero-latency one, but I didn’t find anything.

I know about the ASF for atmel chips. They are all supported (from xmegas to avr32). I don’t really like the coding style used for the generated code. Also there are no modules with AVR32 (or none that I could find) that would provide at least the same functionality as EMX (USB dev, USB host, eth, LCD interface, etc.).

I was thinking about replacing whole .net with native code. But this would require lots of work and don’t think it’s worth. Also EMX is closed hardware so this would need some reverse engineering (that also involves some time and some money for the extra EMX module to disassemble) and I’m not sure if it’s legal.

An open-source .NET for EMX would be great and provide an alternative. It would allow a native GUI implementation and native driver implementation. This would beat any RLP implementation and increase the overall speed of any EMX application (that uses them). But I don’t think GHI intends to do so.

Hydra seems the best choise (still it doesn’t have USB host and ethernet - ENC424J600 + driver would do) but I prefer small modules that can be integrated in your own design (and building a BGA module is not a diy task).

I finished working on the functional part of the radio listener (shoutcast/icecast works great). I’m now working on the UI for the radio listener. Hope I’ll finish it by the end of the week.
I think I’ll make an online repository (hope by the end of the week) for the source code I’ve got so far.

BTW: Is there a quicker way (quicker than RLPext->PostManagedEvent) to notify something from native to managed code? Right now, when a buffer is finished streaming from memory to VS1053, I use PostManagedEvent to notify the managed part to send some more. But it seems to take a bit of time.

Can you define that time? In my double buffered audio streaming example I use a polling thread instead of the PostManagedEvent. One call to the polling method takes less than 10ms.

Another question, are you using RLP for graphics?