SvOrbis: OggVorbis Player for GP32
This page is intended to grow as the project grows.
Current version is 0.9e
- My domain got hijacked by a domainshark. So I moved the SvOrbis
So, again, please update your links and bookmarks.
- I'm rearranging my webserver. Due to that the URL of the SvOrbis
homepage will move from http://svolli.de/gp32/SvOrbis/ to
Please update your links and bookmarks.
- It's been a while, but I decided to put something under the christmas
tree for you:
Version 0.9e has been released. Changes include:
- A new logo and icon
- Support for 8 bit fonts
- Now compiled with gcc 3.4.3 instead of 3.4.2.
- Some small fixes
- Cleanup of sourcecode
Now SvOrbis is able to print also out characters from 0x80 to 0xff, in
addition to the characters from 0x20 to 0x7f, of cause. The default charset
is now ISO-Latin1 hand pixeled by me.
Since I only got one submission on my call for a new logo and icon this
one will be used for now. If anyone sends me another one in, I'll set up a
Special thanks to Steffen Böhme from
Pixeljuice.de for providing me with
a professional logo.
Right now I'm working on an online gif-to-charset converter and a small
utility to convert/upload a standard playlist to SvOrbis.
- Version 0.9d has been released. Bug fixes include:
- Now compiled with gcc 3.4.2 instead of 3.4.1.
- packed with b2fxec 0.6a2-pre.
- Autorepeat now in three different speeds.
- Fixed umlaut problems.
- Version 0.9c has been released. Bug fixes include:
(Version 0.9b was internal only, since all fixes except for the rewritten
sounddriver were minimal.)
- Now compiled with gcc 3.4.1 instead of 3.4.0.
- also packed with the new b2fxec 0.6beta.
- config file isn't loaded if > 100k.
- playlist is written instantly if track change was automatic (end of track).
- sound driver has been rewritten, hoping the new one will solve some
"mysterious" problems. It will probably need a little further tweaking,
but this one has already proven some stability.
Since a key component has been rewritten, please test this version an report
your experiences, bad and good!
Sometime since release of Version 0.9a I got honored by the
GP32Xtreme team with this:
- Version 0.9a has been released. Bug fixes include:
- A bug in reading of config.ini was fixed: key.move.track.up and
key.move.track.down now work.
- random play now doesn't play same track twice.
- writing of playlist slowed down a bit to keep GP32 sound bug down.
It worked on my testconfig, it might work on other systems as well.
- Version 0.9 has been released. New features include:
This is next next step to the V1.0 release. Until then no new features will be
included, only bugs will be fixed. For each bug fixed there will be a release
like V0.9a, V0.9b, etc. So keep on testing and reporting bugs.
- mono oggs now work correctly (well almost, look at known bugs)
- rewritten key input routine, now configurable
- a help screen display key configuration
- pause key
- error message if no oggs are found
- it's now possible to move the an ogg over the playlist border
- the playlist end marker can now be disabled
- new default color scheme
- now a logo in top left corner instead of text
- Change of plans. I found a rather nasty bug in GpTremor, that occurs on my
q=-1 mono test OGGs. Every ~10 seconds there's an error in decoding. This doesn't
happen on X86, so it seems to be ARM related, since it's in Yogg also. So I'm
switching the release schedule of GpTremor and SvOrbis. SvOrbis Version 0.9 will
be released before the first official release of GpTremor. I also have still to
decide between two different incarnation of GpTremor, one based upon the version
that's in Yogg, the other one from the Subversion checkout 7111.
By the way: I got several todos from my list done this weekend (look below) and
also a new color scheme for default. There's also a decision been made on what
will be included in SvOrbis Version 0.9.
- A rough roadmap has been plotted. Version 0.9 will be the last release
before 1.0, which itself will be the first version declared stable. Between
0.9 and 1.0 there will be a feature freeze. So anything that didn't make it
in version 0.9 won't be in 1.0. This means: send in your feature requests
now!. How to request a feature? First choice is the
mailing list. You can also go for
this thread on gp32x.com.
- Version 0.8 has been released. New features include:
- support for rob's voltage detection mod - untested
- rewritten text output routine, reducing gp32 sound bug noise
- ogg directory is now a config parameter
- more verbose status line
- version text ("Loaded Config" in picture) is settable via config file -
show everyone, that you've got your own version of SvOrbis ;-)
- A faq section has been included.
- A first homepage has been hacked up and Version 0.7 has been released.
Hello Mr. Piracyhunter, all OGGs in the Screenshot above have been
encoded from my own CDs.
|Sound cracks||not possible
||Please be a bit more specific when reporting that kind
of bug. There are several things I need to know. Most important: on what song
and how's the song encoded? (Quality or bitrate setting, rate, mono/stereo)
(If you've got anything better than modem, it would be nice if you could
provide me with your Ogg file triggering the problem).
When does the noise appear? (Always, at specific time, when writing to SMC)
If only during write to SMC: How many Oggs are on the SMC?|
|GpTremor will not work 100% all the time on some mono files
This bug also occurs in Yogg, which means that this one is
burried deep down in the port of the library. That one will be hard to pin down,
but I'll try. The bug was in not in GpTremor, but in the sound
driver I adopted from Yogg. It's now been replaced with new one done from
scratch implemented in Version 0.9c.
|The voltage detection always shows "0.00V"||not
verified||There are very few modded GP32s available. Mr.Spiv has one
of them and let me know, that the voltage display didn't work on his. I'll need
to mod mine to test this.|
|The logo looks bad||-||Yes, I know. I'm waiting
for someone to provide me with a better one. (Scheduled for V1.0)|
Requests made for Version 0.9
|Scheduled for Version 0.9|
|Switch to GpTremor||switch is done
Tremor release postponed after SvOrbis V0.9
|First of all there needs to be an official release of GpTremor before the
SvOrbis V1.0 release, right now there are two version I have. The older version
used by Yogg, and a port of the current subversion snapshot 7111.
|playlist shuffle instead of random play||done
||shuffle or random is selectable via svorbis.ini now.
|rewrite input code||done
||so a key combo will wait till release and a key customization via
svorbis.ini is possible.
|error message if no oggs are found||done
||Done for now. It might get a rework in bug-fixing phase.
|include a help screen||done
|move file over playlist border||done
|logo and icon||in production
||That's something that also needs to be done. A friend of mine is working
on a suggestion. Any other volunteers?
|Won't make it in Version 0.9|
|playlist generator for windows and unix
||No big problem, but right now I'm rather hacking on the GP32.
|equalizer / bass booster||not in V1.0
|For that I need some example code or at least the algorithms. If someone
can provide me with this, I'll hack it in. If it doesn't slow down the system
too much, it stays in.
|a simple bar graph||not in V1.0
||just an idea: a simple bar graph that shows the kbps of the last seconds.
|mods, sids||not likely
|OggVorbis has one standard, MOD has
many, so there's no "this can play it all" library. SID is similar, except
compatibilty is better. But I wrote this software as a walkman replacement,
and most MODs & SIDs aren't just the quality. If you really want them, why
not convert them to 22KHz mono Ogg? Sizes will get reasonable, and the mono
bug will definitely out in the next version.
|skins, visualization, slideshow||not likely
|Again, I need to note, that SvOrbis is intended to be a walkman replacement
for listening to music. Colors and charset can be configured, that
should be enough. If not, wait for GpTremor (that'll be out after SvOrbis
V0.9) and code your own. Or take the SvOrbis sources and put the changes
in yourself, submit them to me, and I'll merge them in. Or GpTremor will
be included in a graphic viewer program.
|edit svorbis.ini on gp32||not likely
|I think that's too much
effort for a rather little gain. Come on, you'll set up your system once
and after that you'll just use it. At least that's what I usually do.
And a one time setup can be done much easier (on both coding and the setup
itself) on the host machine, don't you think?
|left / right:||move artist / title border|
|select + up:||move current track up|
|select + down:||move current track down|
|start + select:||toggle lock|
|start + A:||toggle random|
Parameters for the config file (gp:\GPETC\SVORBIS.INI)
The config file is optional, defaults have been
compiled in. (This is the supplied SVORBIS.INI)
# configuration file for svorbis v0.9
# OggVorbis Player for GP32
# comments start with a "#" or a ";"
# file and dir options
# where to save the playlist
#file.playlist = gp:\ogg\playlist.bin
# which font to use
#file.charset = (use internal)
# where to look for oggs
#file.ogg.dir = gp:\ogg
# colors are RGB323. some examples:
# 00000000 is black
# 11100000 is bright red
# 00011000 is bright green
# 00000111 is bright blue
# 00000001 is dark blue
# 11111111 is white
#color.background = 11111111
#color.text = 00000010
#color.highlight = 10010111
#color.outline = 10010111
#color.lines = 00000111
# position of highlight bar
#position.highlight = 8
# display end of playlist?
# 0 = no; 1 = default; 0x20-0x7f = use the ASCII char as marker
#playlist.end.marker = 1
# Ogg Info to use
#comment.info1 = ARTIST=
#comment.info2 = TITLE=
# identify this version of SvOrbis as you own :)
#version = Loaded Config
# parameter for Rob's voltage detection mod
# usually 3, default is no detection
#voltage.detection = -1
# set cpu clock
#cpu.mclk = 136000000
#cpu.divfactor = 0x3c011
#cpu.clkmode = 3
# how fast should fast forward and rewind go
# in seconds, if > 500 in milliseconds
#wind.step = 10000
# which random mode should be used?
# random or shuffle
#random.mode = random
# key layout
# key values are:
# left: 0x0001
# down: 0x0002
# right: 0x0004
# up: 0x0008
# L: 0x0010
# B: 0x0020
# A: 0x0040
# R: 0x0080
# start: 0x0100
# select: 0x0200
# add 0x1000 if the key should also work in locked mode
#key.previous.track = 0x0008
#key.next.track = 0x0002
#key.rewind = 0x0010
#key.fast.forward = 0x0080
#key.separator.left = 0x0001
#key.separator.right = 0x0004
#key.move.track.up = 0x0208
#key.move.track.down = 0x0202
#key.random = 0x0140
#key.pause = 0x0120
#key.lock = 0x1300
#key.help.screen = 0x1040
#key.info.screen = 0x0020
The color format "binary" is an 8 bit binary number.
- 11100000 is red
- 00011000 is green
- 00000111 is blue
The format "number" is a plain decimal number, a hex number is
prefixed with "0x".
All files and folders must start with "gp:\"
The parameter for voltage.detections states which adc channel to use. If you modded
your GP32 according to Rob's description, use "voltage.detection = 3".
Good to know (aka some views behind the scene):
- about five seconds after playing a track the playlist (which also contents
status information) is written to the smc
- when the message *SMC WRITE* shows that writing is taking place,
you should not turn the GP32 off until the message is gone
- on the lower right corner the total of the playlist is shown, as well as the
actual playing frequency.
- if you enable the support for rob's voltage detection, it will be shown left
on the status line
- To subscribe write an email with the subject "subscribe svorbis" to
Format of Charset:
Short: The format is the same as in the C64/C128, only sorted in ascii.
Each char is 8 pixels wide and stored in a byte, highest bit left, as
you would read them as a binary number.
The first 8 bytes are the space character; the second 8 bytes are the
"!" sign, and so on, till ascii character 127 (see the table for an example
of an 8x8 font). That sums it up to 768 bytes per 8 lines charset.
If a charset is only 512 bytes in size the area from 0x100-0x1ff is copied
to 0x200-0x2ff, giving you only uppercase letters.
| 0||%00000000||"space" char 1st row|
| 1||%00000000||"space" char 2nd row|
| 2||%00000000||"space" char 3rd row|
| 3||%00000000||"space" char 4th row|
| 4||%00000000||"space" char 5th row|
| 5||%00000000||"space" char 6th row|
| 6||%00000000||"space" char 7th row|
| 7||%00000000||"space" char 8th row|
| 8||%00011000||"!" char 1st row|
| 9||%00011000||"!" char 2nd row|
|10||%00011000||"!" char 3rd row|
|11||%00011000||"!" char 4th row|
|12||%00000000||"!" char 5th row|
|13||%00000000||"!" char 6th row|
|14||%00011000||"!" char 7th row|
|15||%00000000||"!" char 8th row|
|264||%00011000||"A" char 1st row|
|265||%00111100||"A" char 2nd row|
|266||%01100110||"A" char 3rd row|
|267||%01111110||"A" char 4th row|
|268||%01100110||"A" char 5th row|
|269||%01100110||"A" char 6th row|
|270||%01100110||"A" char 7th row|
|271||%00000000||"A" char 8th row|
|520||%00000000||"a" char 1st row|
|521||%00000000||"a" char 2nd row|
|522||%00111100||"a" char 3rd row|
|523||%00000110||"a" char 4th row|
|524||%00111110||"a" char 5th row|
|525||%01100110||"a" char 6th row|
|526||%00111110||"a" char 7th row|
|527||%00000000||"a" char 8th row|
|760||%00000000||ascii char #127 1st row|
|761||%00000000||ascii char #127 2nd row|
|762||%00000000||ascii char #127 3rd row|
|763||%00000000||ascii char #127 4th row|
|764||%00000000||ascii char #127 5th row|
|765||%00000000||ascii char #127 6th row|
|766||%00000000||ascii char #127 7th row|
|767||%00000000||ascii char #127 8th row|
- What is OggVorbis?
- From http://www.xiph.org/ogg/vorbis/:
Ogg Vorbis is a fully open, non-proprietary, patent-and-royalty-free, general-purpose
compressed audio format for mid to high quality (8kHz-48.0kHz, 16+ bit, polyphonic)
audio and music at fixed and variable bitrates from 16 to 128 kbps/channel. This
places Vorbis in the same competitive class as audio representations such as MPEG-4
(AAC), and similar to, but higher performance than MPEG-1/2 audio layer 3, MPEG-4
audio (TwinVQ), WMA and PAC.
- Are there any OggVorbis player for Windows?
- There sure are, a lot of them. WinAMP
can play OggVorbis using a plugin, foobar 2000
can play them natively, and there's even a
DirectShow Filter, so that
you can use the ugly Windows Media Player.
- What should I use to encode OggVorbis?
- I don't know what you should use, but I can tell you what I'm using. For ripping
I'm using CDex. For converting I'm
using foobar 2000 and oggenc.exe from
- What settings should I use?
- I don't know that either, but I'm using "quality q=2" or "q=1".
This way I get slightly over 3 hours on one 128MB SMC (q=2) or about 3 hours 45
If you know any better setting, let me know and I'll put it here.
- What is better a constant bitrate or a variable bitrate?
- I'm using variable. There are some passages in the audio data that can be better
compressed than others, so using constant can result in wasting space, because
there's "not enough" data to fit in one block, or wasting quality because there's
"too much" data to fit in one block.
- But if a song has a lower kbps can I then lower the clockspeed, or only if the
khz is lower?
- I did a quick test with a ~43MB 44100Hz wave file on my host pc.
Time needed to decode:
-q8 (6974409 bytes) : ~8.0 seconds
-q5 (4588576 bytes) : ~7.0 seconds
-q2 (2662463 bytes) : ~5.6 seconds
so one can say: "the lower the bitrate, the lower the cpu usage during
But: cpu usage is not everything on the GP32, you also gotta watch the usage of
cpu bus (the one that's responsable for transfer of data between CPU and RAM).
If the bus is clocked to slow for the amount of data transfered the gp32 sound bug
tends to appear (the noise you heared up to version 0.7, if you push the stick
Anyway, I don't see the big hassle about lowering the cpu clock speed. I always
keep a second pair of rechargeable batteries with me. If the first pair is down,
I'll switch and the second pair will keep me entertained 'til the end of the day,
at least. So I rather prefer sound quality over battery lifetime. Don't forget:
if you disagree with this you can lower the CPU speed to 114MHz just by setting
"cpu.mclk = 114" in SVORBIS.INI.
- Why SvOrbis?
- Besides playing games, I wanted to use the GP32 as a walkman replacement.
So I checked different MP3 and OggVorbis players, but after using them for
a short time, each one I tried had disadvantages that disqualified them as
a real alternative. So at some point I got fed up, said "if you want something done
properly, you've got to do it yourself", and started to do my own, based on some
awesome work Yoyo did with his player called
And - with the Euro beta firmware - all I wanted was a player that started playback once
I turned the GP32 on.
- Why make a player who read only ogg files?
Why not a mp3/wav/mod/ogg player?
- Because an ~96kBit OggVorbis sounds better than an 128kBit mp3 and I want to how
the player as small as possible. This way I'm getting 3 hours of music (44100Hz,
stereo) on one smc. The other cause is that the OggVorbis decoder Tremor runs better
that libmad as far as I can tell from my experiments. And converting from mp3 to ogg
is easy: take five minutes to install foobar2000 and oggenc.exe from vorbistools.
After a onetime configuration on the "recode" option, I'll take just a click on the
right mouse button and selecting "conversion" from the menu (I suggest using the
"quality q=2" option), and voila, you've got an ogg file that fits the gp32 better
than the mp3 ever could.
- In the picture on your site I saw they were in a folder called ogg, but in what
folder is that?
- Just rename the folder mp3 to ogg, or create a folder called ogg in the root
directory. You can also use the option "file.ogg.dir", to set the directory the
files come from.
- The layout sucks, can't you do better?
- No, I don't want to. The player is intended to be a walkman replacement, so I
tried to put as many info on screen as possible. The most time I'm using it, I'm
not looking at it anyway. If you also want spiffy effects grab yourself the GpTremor
library (ask for a prerelease, official release should be soon) and code something
yourself. With the GP32 sound bug, it's not as easy as it looks ;).
- will there be unifont support? (kor)
i wanna see titles on my own language.
- Nope, ASCII only (Characters from 32 to 127).
Hey, I'm German, and I can't see my umlauts either.
On the other hand... you've got the source, you can do it.
And I'm taking contributions. I'm also willing to help to extend the design for
something like UTF-8.
You might also call this my revenge:
I'd like to see more english on www.gamepark.co.kr... I don't get this either
- I'd really like it if it could be made to shut the screen down to conserve the
battery (i have no idea how much it would save, but it would be a nice option)
- I thought of that when I started this project, but the official docs state that
turning off the LCD for a longer time will result in damaging it. I also doubt that
it will increase the battery lifetime by far.
- Maybe have a screensaver then? Because a screen that is stuck on the same
colours for too long also tends to get damaged...
- I haven't seen that on an LCD, only on CRTs and a TFT once. Implementation
wouldn't be hard, though. From what I know is that direct sunlight is much more
harmful to the LCD as showing the same colors. If anyone can show me a photo of
a burnt-in LCD I'll hack it in as soon as possible, if not it moves to the
- and background image support will be cool.
- Ain't gonna happen. A background image just slows down the redraw of the
screen (and also causing a reappearance of the GP32 sound bug), and degrades
the readablity of the text. This player is for listening to music and other
stuff, not for watching pretty pictures. I use it as a walkman replacement,
so most time it's in some pocket, unregarded. Sorry, but I'm too old for
nicknacks, I want functionality. You can download the source and hack it to
your own needs anyway, or build your own player with the GpTremor library
that will be released soon.
- At what mhz. does it run?
- Right now it's 136MHz. The main problem is to find a CPU setting that gets as
close to 44100 Hz for audio. I also found a 114MHz mode, but that one does suffer
a bit more from the GP32 sound bug. If you know a better CPU setting than I do,
you can provide is via the config file.
(Hint: the 114MHz mode can be set by putting "cpu.mclk = 114" in the
svorbis.ini, or you can set all three parameter needed for the GpClockSpeedChange()
call by setting cpu.mclk, cpu.divfactorand cpu.clkmode in the config file. On how
to get these parameters you should search the forum. The defaults are:
"cpu.mclk = 136000000", "cpu.divfactor = 0x3c011" and
"cpu.clkmode = 3". Setting wrong CPU parameter can cause everything
from a system crash to strange output.)
- I've got a question not covered here!
- Best thing in this case is to subscribe the mailing list and post your
question there. I'll be reading and answering it, promise!
|This software is free software and distributed under the
license terms of the GPL.