Read this OR ELSE
FIRSTLY, this page is nothing to do with "Warez", or copyright
infringement or any other naughty things. It's PURELY for making
MP3 players like the one I bought work a bit better with Linux (and any
other versions of Unix, presumably including Mac OSX). I am NOT
redistributing any copyrighted materials on this page or other things
that I do not have a right to.
SECONDLY, I am NOT affiliated with the EZ-AV company
who make the player, and this project and the software I have produced is
NOT endorsed by EZ-AV either. It is my own work made for free and
distributed free-of-charge in the hope that it'll be useful.
Because of this, you should NOT complain to them
if it doesn't work for you or you don't understand how to use it!
THIRDLY, because I basically worked out the file formats by
deduction, rather than having any official specifications, I can't
guarantee that I have it worked out perfectly, although it appears to work
so far. For that matter, I accept no responsibility for any damage done to
your audio player due to the use of this software, although I don't
currently know of any such risks; the software is provided as-is and
without warranty of any kind.
Oh yes, and FOURTHLY, about the scope of this page+project: it's
about the EZ-AV brand of Digital Audio Players (rather than any other
brand with the same name), and it's for their use on Unix- ie,
systems such as Linux, BSD and Mac OSX. If you only use Windows, this is
of no use to you!! Windows users can use the software on the official CDs
and downloads, anyway.
Just a bit of the story behind this stuff, you could probably skip a lot
I wanted a good-quality MP3 (and primarily Ogg Vorbis) player for some
months when I saw that one of the models of what I'd seen advertised as the
"XEN EMP" player was available on clearance sale for about £40: further
investigation showed that this particular one, the EMP-500
(it seems the full name may be something like "EZAV eNOM XEN EMP-500"; I
think Korean companies must like giving products as many names as humanly
possible) had originally been available for over £100, and not only had
all the general features I wanted (high SNR, Ogg Vorbis support,
LCD screen, external batteries), but also played video on the
colour graphical LCD! As I've seen such offers disappear far too often,
and I'd wanted to have a player for a forthcoming holiday (long plane
journeys!), I jumped at it.
Of course, I happen to use Linux, and like most other computer products,
this player does not explicitly support Linux. But I'd already
figured out that it supported the UMS (USB Mass Storage) standard, and so
it should be possible to simply copy music files to and from the player
like I would with a USB flash drive. I was right about that at least,
although I do tend to see odd error messages whenever I first plug it in
(I should find out about these, although I've not seen any problems arise
But what about the video support, which was one of the more
compelling features? Well I already understood that the only videos it plays
are in the manufacturer's (EZ-AV Co Ltd,
of Korea) own proprietary "PFL" format, which obviously requires you to use
the Windows software that they put on the bundled CD- as do a few other
features the player has (At least, it has done so far...). Much googling
and checking of the site's FAQs and forums provided basically no leads in
terms of finding such Linuxy alternatives, although I didn't actually go
as far as asking; I figured I'd see what I could manage for myself
Anyhow. I rather hoped the software in question would work under
Wine, the Windows Emulator.
Unfortunately it seemed not to be the case, at least with my somewhat old
copy. Newer versions might work better, although I get the impression that
much of the software expects you to have the player connected, and I doubt
Wine would give the appropriate level of access to the player.
However, the gadget had a sample file loaded on it, a Korean pop song with
an accompanying video.
The video file was quite big considering the screen is only
64x96 pixels (it's primarily a music player; video, pictures, text
reading etc are nice extras really), but looked quite decent quality IMO.
I loaded the PFL file onto my computer and had a look at it, and thought
about the ways I might make a format specially for such a device.
Within the day (most of which I'd spent chatting, browsing etc) I
managed to get a bit of a handle on the file format. An hour or two later
I had a set of scripts that could display somewhat broken versions
of individual frames. Next day (today as I write this) I fixed that so
it extracts AFAICT proper individual frames, and went on to produce a
script that can replace frames of the video with frames of your
own making. I uploaded a copy of a so-edited version of the video to
the player, and confirmed that yes, it works. YAY ME! Ahem.
NOTE! I bought the player to go on holiday with, and said holiday
is next week; I won't be able to answer emails about this project
until early March.
What this does
Ok, so what does this package so far consist of? Well first, what do the
players support generally?
There are various other functions too, but these are the ones that I can
think of ATM. I must also point out that I don't know if those functions
above vary in how they're implemented for each device, but I can imagine
they would be- eg, my EMP-500 has 4096 colour display, but some others
have only 3 colours+greyscale, so I wouldn't think that images/video for
one would work on another.
- Video and pictures are on the EMP-500 and the EMP-600; I've seen a
download of a version of the official video capture program for the
EMP-400 series on the EZAV website, but I'd thought that didn't
have a full colour graphical screen so I'm rather confused by that. Perhaps
those versions give mono video or something? The "Pebble" devices have
a 48x64 monochrome(?) screen, I get the impression they can show images.
- Text display: The EMP-500 at least has a not-much-advertised function
whereby plain ASCII text files placed in the /text directory of the player
can be selected via the player's browser system thingy, whereupon screenfuls
(12-char wide) are displayed sequentially. Control of this seems limited to
waiting for the next page (rate is user-controllable), going directly to the
next page, and rewinding to the very start of the file. Presumably much the
same thing is supported in the other models, but they don't talk about it
that much. They also refer to "TTS" (Text to Speech, which AFAICT is just
a PC-side thing) and lyric support (where the words are synced to the music),
which obviously aren't quite the same, but seem to be given more attention
in the manual and the website.
- "Media Sync": This AFAICT is the system whereby displayed text can be
synchronised with the audio, eg for lyric support. The website also talks
about the internet regarding this, but I don't know where that comes
into it, perhaps it means it can use html text? It appears to be supported
in most or all of the players.
Now, more to the point, what is supported by the tools here? Well
not much so far, I've only just started! All there basically is,
is some very limited code for working with video for the EMP-500. That code
may or may not also work does not work in the current version
for models such as the EMP-600 which has similar display capabilities, but
they will be supported in the next release;
I'd be surprised if it worked on the new Pebble or any
of the older models though, which are quite different. I'd like to be able
to support as many of the (EZ-AV) players as have video and/or image
capability, but I can't really do it alone as I haven't got the time or the
What specifically is supported for video on the EMP-500? Well
I've got code that manages to extract separate frames out of the video file,
either as a PPM file to stdout, or to display directly in a window; I also
have another program that does the reverse- it takes an image (has to be
very specific size), and a frame number, and replaces that frame of an
existing video file with the image. You can, of course, reinsert images
that you've already extracted, and they don't have to go back in the same
The software cannot yet:
Also, it's purely Command-Line only so far, but I can imagine it being
wrapped with a GUI front-end some time.
- Create new video files- I don't know if there's any special data in
the headers apart from the model identifier. It doesn't look as
though there is, but supposedly you can capture videos in the Windows
software at either 5fps or 10fps, and so presumably the player needs to
be able to tell these types apart, so this would seem the obvious place to
put such info.[Addendum: I've found this out now, and can probably do this
- Insert video frames outside the duration of the video (eg, 3 minutes
into a 2 minute video). I simply don't know whether it'll accept that or
not, because again, I don't know if there's metadata such as the video
duration encoded in the headers. If so, I've no idea what the player might
make of a malformed file, although it might well not mind at all. [Addendum:
I don't think any of this is a concern]
- Do anything whatsoever with still image files-
I've not got any,
I don't know how different they are to video files, although I understand
they're also "PFL" files. I've got a few examples now, and am pretty
sure I know everything I need to, to be able to encode them for the next
release. Meanwhile you should be able to at least view the things
if you have them, by treating them like video files with 1 frame.
- Convert other video formats straight to PFL (once video encoding
in general is supported, this should be possible using external
tools such as MPlayer etc).
Oh, and I suppose you want a screenshot or something, but being
command-line based, you'll have to make do with a photo of my player with
a frame I produced with the "ppmpat" program from the Netpbm package
(which you NEED in order to use this! It isn't included!)
EMP-500 in its snug
prophylactic case, displaying a squiggle I inserted into (a copy of)
Oh yeah, and because of the way the text viewer function works, I'm
mulling over whether or not to make something to format text files to work
well with it- but that would just consist of the "fold" Unix command, and
I'm not sure if it works out all that well anyway.
Ah, another potential function: I read in a few places about someone
(same person?) on Linux having trouble ordering the playlist, which
is apparently something that the Windows software can do. When I put things
on the player, piecemeal, I couldn't help noticing that the order of the
playlist was the order I put them on in, so perhaps it does it purely by
timestamps. If so, Linux users could conceivably change the playlist order
by just using the "touch" command in an appropriate way- although this
would probably require you to do it on every single file there. A script
OTOH might be able to work out whether it could get away with not touching
some files, and it could do the whole thing with much better timing than
a person- in that way, it could ensure that the timestamps are separated
enough, but that the FAT on the flash device gets written in as few passes
as possible (ideally, 1!) due to caching.
I wrote much of this in the Functionality box, because I've got things
to do and I'm not paying attention. Basically, this is very very alpha, and
can only do very basic things- but it does at least work for what it's
supposed to do.
It uses "tcc", the Tiny C Compiler, to make the C programs into scripts,
but this is fairly unnecessary. If you simply compile those programs and
change the shell scripts to call the compiled versions, it should work just
as well. I just did it that way because it was quicker for me whilst I'm
working on it.
This package could be more complete if I got feedback from other
EZAV EMP owners (eg, those with other models, or those who could use the
Windows software). However, please DON'T send any attachments unless
I agree to it, as I don't want my mailbox to burst and I don't want to take
all day to download my email.
I've now fixed the bug (and another one) that I noticed in the
first version when I got back from holiday. If you already got the first
version, you should probably d/l the new one, unless you fixed the bugs
yourself (they weren't too complicated). And if you were waiting for the
bugfix release before downloading the package, then here it is!
As I got a lot more example files since the first release, I think I
can tell enough about the file structure to be able to make further
useful utilities when I get the time to do another release, so watch out
This is a very alpha version, and the tools are command-line only.
I've done some rudimentary documentation though, including usage examples,
and fixed some obvious bugs that I noticed. It's distributed under the terms
of the GNU Public Licence (version 2 or later).
Latest release is a bugfix version, as v0.0.1 didn't behave the
way it was claimed to in the docs.
Good luck, and have fun!
- Netpbm (there's a few versions, I have version 10.0, but I don't know
if any others work as well. You probably have a version that works if you
have any version of Unix).
- "expr" and "dd", which I expect you have anyway
- A C compiler, or "tcc". If you have tcc, you can use the tools as they
are, otherwise you have to do a bit of editing and compiling, sorry. It was
faster for me to code that way, and I haven't time to deal with this ATM.
- To use the "viewframe.sh" script, you need "xloadimage", or some
suitable replacement (which you would have to change the script to use).
If you don't have this, you can still use the other tools.
Wednesday September 6th 2006:Woo! About 2 weeks ago now, I got
an email from an EMP-600* owner, Ronald Delobel. He said
that as it was, the images the sofware extracted from his PFL files
looked wrong, and frames inserted into the PFL files with it didn't
seem to show up. After I asked him for some example files, I found that
sure enough, EMP-600 players use a slightly different format. But
pretty soon, I'd decoded that, too :D Ronald confirmed that the prototype
decoder I made worked great, and so did the encoder I made later. So when
I make the next release (won't be yet), the EZ-AV Tools for Unix should
properly support the EMP-600 (and clones)!
Ronald also contributed some improvements to the old code, and some
new scripts. I also made a new script or two myself. Because the next
release should be quite a step forward, it'll probably be version 0.1.0
instead of version 0.0.3. I won't be releasing yet because I have to tidy
things up and reorganise bits of code better, etc. And also I've been quite
busy lately with various things.
(*-Actually he said "T-budd tln-100", which he identified as an EMP-600
clone, which seems to be right)
Tuesday July 18th 2006:The project seems to get a reasonable
number of hits, but I've not had any feedback on it at all. As I have a
ton of different things to do, I probably won't do any more on this project
for at least a while, unless someone emails me or something to say they want
some improvement or have a useful contribution. OTOH, if you don't want
anything but do use the package, I'd still be interested to hear that
someone is using it and not just looking at the webpage. Note that
this doesn't mean the project's abandoned at all, it's just resting!
Monday April 3rd 2006:Got around to doing the bugfix release
at last, sorry it took so long. Also noticed and fixed other discrepancies.
Added another useful example to the USAGE.txt doc. Also worked on the TODO
file somewhat to reflect current plans, although I don't know when I'll
have time to do those things. Meanwhile it does what it's currently
supposed to do, even if you don't find it user-friendly. Am now about
to try to register the project with Freshmeat.net.
Tuesday March 7th 2006:Sorta back by now, yes, but not really awake
to deal with this properly yet. OTOH, I've got several more sample files to
work with, and had another look at the code I'd released. I realised it
looks like when I changed it all for public release, I changed the file
name/location used for the USAGE instructions, but NOT in the code itself;
it therefore seems to still be using the perverse file location I'd set when
I was starting it (the /dev/shm/ directory, which at least here points to a
fairly large ramdrive, and is therefore quite useful for storing temporary
files unlike my very crowded hard-drive). I'll hopefully fix that very soon,
but not right now as I really don't have the mental energy. I just wanted to
Wednesday February 8th 2006:Ok, STILL not doing any more, but I'm
mentioning here that when I went to upload some more files onto my EMP-500
today, Linux repeatedly failed to see any drive whenever I plugged it in.
This occurred even across boots, and using either connector (plug or cable),
and either USB port, and so on and so forth. I eventually got it to
recognise it just now, but I've not got time to track down exactly what
I did differently. All I can say ATM is, when I plug it in for the first
time, it produces kernel messages along the lines of:
(Plus some other lines before that. Also note it says "scsi1" rather than
"scsi0" because I have other actual SCSI devices on this machine)
When it doesn't work, that is about as far as it goes, and when I unplug it
and plug it back in again, all I get is messages along the lines of
"uhci-hcd: suspend_hc" and "uhci-hcd: wakeup_hc" or similar. But when the
device works, I get all the above plus:
usb 1-1: Product: TCC720 MMC Adapter
usb 1-1: Manufacturer: TELECHIPSAPIC
usb 1-1: SerialNumber: 0678342404347484
usb 1-1: registering 1-1:1.0 (config #1, interface 0)
usb-storage 1-1:1.0: usb_probe_interface
usb-storage 1-1:1.0: usb_probe_interface - got id
scsi1 : SCSI emulation for USB Mass Storage devices
See? When it works, it detects actual drives, is the main thing. Anyhow,
I don't know whether this is down to some quirk of the player, the cabling,
my USB controller/interface, or the Linux drivers. My kernel is a bit old so
maybe it is that. OTOH, my ordinary flash-drive never gives any problems at
all, and still works ok (except today when I plugged it in after the
EMP-500, even though it worked when I rebooted and plugged it in
first, hmm). I'm just putting the info out before I forget and whilst I
have the details fresh. Bye now, I have luggage to pack, etc etc, see
previous news entry. *WAVE*
Vendor: NETMUSIC Model: 2148721401200401 Rev: 1.10
Type: Direct-Access ANSI SCSI revision: 02
SCSI device sdd: 501760 512-byte hdwr sectors (257 MB)
sdd: assuming Write Enabled
sdd: assuming drive cache: write through
SCSI error: host 1 id 0 lun 0 return code = 8000002
Sense class 7, sense error 0, extended sense 0
Attached scsi removable disk sdd at scsi1, channel 0, id 0, lun 0
WARNING: USB Mass Storage data integrity not assured
USB Mass Storage device found at 2
WednesdayMonday February 6th 2006: Got around to doing a few useful
instructions for the software, fixed it to have one less (unusual) dependency,
and archived and uploaded the thing at last. Now, I'm not doing any more on
this damn thing for at least a month. *wave*
Friday February 3rd: Actually got around to uploading this page
(it's been a long while since I did anything with the site in general).
Will put the actual software on very soon hopefully!
Wednesday February 1st 2006: Fixed the frame size in the scripts, worked
out the (probable) header size, and made script to replace frames of a
video file. Wrote this page and took photo of (backwards, as it turned out!)
one of my test images on the player.
Tuesday January 31st 2006: Received EMP-500 in mail, played about with
it for a few hours when I should have been doing things to get ready for
my holiday, worked out basics of video file format after failing to find
out any (English) info about it online.
Sunday January 29th 2006: Saw offers for EMP-500 relatively cheap,
thought it sounded quite good, looked up its specs and after deciding it
was probably worth it, ordered one.