X11Amp v0.9 Source Released
Max Karpiak writes
"The source to X11Amp's new (long awaited) version is
available at the main homepage,
and should hopefully propagate out the to the
US site soon as well.
Go get it. It's cool." Mine's making on the next desktop.
Other mp3 players avalable for linux do more and have been GPLd for much longer...
Omigosh! I need ImageMagick, a graphics viewer,
to use an mp3 player? I can understand a few
libraries here and there, but a whole another
application?
I get this error: /usr/bin/gtk-config
checking for GTK - version >= 1.1.12... no
*** Could not run GTK test program, checking why...
*** The test program failed to compile or link. See the file config.log for the
*** exact error that occured. This usually means GTK was incorrectly installed
*** or that you have moved GTK since it was installed. In the latter case, you
*** may want to edit the gtk-config script:
checking for imlib-config... (cached) no
checking for IMLIB - version >= 1.7... no
*** The imlib-config script installed by IMLIB could not be found
*** If IMLIB was installed in PREFIX, make sure PREFIX/bin is in
*** your path, or set the IMLIB_CONFIG environment variable to the
*** full path to imlib-config.
I have tried all sorts of stuff to fix it, changing the env variables, flags on configure, etc.
I have (brand new) gtk+ 1.1.14 and imlib 1.9.2. I am running kernel 2.2.1 on a RH5.2 box.
but even though /usr/lib is in my ld.so.conf, I still have to do a setenv LD_LIBRARY_PATH /usr/lib to get it to run. It works though.
Sorry...I did that (several times)
And no, I will not reboot, not even for a brand new mp3 player (have to rebuild my uptime after the kernal reboot)
Due to the thread scheduling, top did not report the actual CPU usage of the old x11amp correctly. mpg123 is just as fast as the old amp engine, but top reports it correctly now.
They did say some stuff was gonna be missing.. but I'm still not too happy with this release. I think I'll stick with 0.7 or switch to gqmpeg for the time being. BTW, x11amp won't start if you dont have a
I can't believe that there's people whining.
It's using dev. libs!!! It's taking more cpu!!!
Fuck. Is there any way for someone to do _anything_ postive and not be attacked? I mean, the authors have gone open-source and GPL and you're still not happy. waaa waaaa waaaa. Always something to complain about.
I hereby rename slashdot.org to whingedot.org. Some of you guys need to get out more and stop posting utter rubbish, finding slight problems/ issues in anything and concentrating on that point. You can't see the forest for the trees.
If you don't like x11amp, go develop or use an alternative, otherwise stop wasting our and your time bitching about issues that _you_ personally don't agree with. I don't mind someone saying "This is great... funny that they're using dev. libs, but yeh, it's great". Instead we get people bitching like it's some sort of catastrophe.
To quote Dennis Leary: "Whining fucking maggots"
AndyM
If you haven't done this already you will need to remove the previous gtk rpms that installed with the stock RH installation. i.e.
'rpm --erase --nodeps gtk+ gtk+-devel'
Then recompile the gtk+ 1.1.14 and the error should disappear. It worked for me.
I miss it.. was it part of the source they couldn't release? I always thought the file selection dialog was the one thing x11amp had over winamp.
is there a way to get this version to play though esd? the old one worked through esddsp but this one doesnt like it
esound output plugin anyone?
(ie i havent a clue how to write one)
you just THINK its using more CPU because mpg123
shows up in 'top'. The old hacks that kept the
player from skipping but (coincidentally) hid
processor usage were removed.
good luck; I don't even think they have Linux *executables* of the latest version
yes they do have a linux executable of the latest version
Thanks you developers. Works great here.
Man, what happened? Why couldn't they use their old decoder? I think I'll stick with 0.7.
/usr/local/share/x11amp (and their respective Input and Output dirs)
Anyways, there's an annoying feature about the install. Both the code and the install script expect to find the input and output plugins in
configure --prefix isn't going to help you. It puts everything else in the right place, but the plugin path is hard-coded in the source, and I can't figure out how the install script is deciding on that location. So go with it, or change the path in input.c and output.c, and install by hand. Otherwise it crashes on startup (because they don't even check to see if the plugin search function succeeds. sloppy!)
update your x11 libs to some that are thread-safe
They're not waiting for stable libraries because this is a development (unstable) release.
-Anonymous Loser
In the x11amp subdir, all the compilations work fine, but the final link throws up hundreds of errors for all the GTK functions used. The flags -lgtk and -I/usr/include/gtk are both included at compile time and at link time, but to no avail. Anyone else have a similar problem?
You are perfectly right. ...
I will stick to older version of X11Amp . Plays fine for me
I spent an hour trying to download all the stuff required. I'd download one thing just to find it needed 5 more things I didnt have. I ended up just saying fuck it and giving up. I dont have all night...
I hated the old file selector, well the scroll bar in particular. try browsing a directory of 5000 files with it. it sucks big time...
i admit the gtk file selector is ugly, but it's WAAYY better than the old crap...
(and as themed gtk it almost looks ok...)
The mpg123 license forbids distributing modified versions of the code.. That's why every other mp3 player that uses it uses it only as a front end, and doesn't link to it, like x11amp now does. x11amp going GPL is all well and good, but they needs to at least READ the GPL before releasing software.
*glib 1.1.14
*gtk+ 1.1.14
These aren't really development as such... all of the GTK development releases are VERY stable... I've NEVER crashed any of them... the only difference is the API is subject to change. It almost certainly will not change much before 1.2.0. The x11amp people made a wise choice in choosing what is basically an almost-1.2.0 release. gtk+1.0.6 is a bit long in the tooth now...
*linuxthreads 0.71
*gnu gettext 0.10
These should both be standard with any even remotely standard distro. If you don't have linuxthreads, you belong to the 1980s. If you don't have gettext, i guess you only speak english...
>For imlib, I'd need:
*giflib 3.0-2
*libungif 3.0
*libpng 1.0.1
*zlib 1.1.2
*jpegsrc 6b
All of these are a) optional, and b) included with any reasonable distribution. If the binary you has requires them, go find a different binary which doesn't, go get them, or compile it yourself without these dependanceies. Imlib is basically just a wrapper layer which lets you use the one interface to load all of these (it does lots more, but think of it this way). It only requires what it was compiled to use.
*ImageMagick 4.0.5
Again, this is optional. It's a fallback for imlib if you don't have any of the above.
It seems winamp 0.7 had quite alot going for their decoding engine. I mean it ate only about 2% at most of the cpu. Now they're running off the mpg123 engine, which uses the cpu 4-5 times more than the original? Was there something up with the old engine, something that they couldn't release, because why would you switch when you seem to be ahead. But their main goal was to release the sources and GPL it, it makes you wonder if anything was up.
I'd realy like to see a precompiled static
:)
x11amp v0.9.. since i don't want to
install all those libs just for one program.
Please?
Imlib-config is in the package imlib-devel package, and comes with version 1.8.5 on redhat 5.2 I think. Although the x11amp home page says you need imlib 1.9.2. You may want to try grabbing the newer imlib packages from ftp.gnome.org and installing those and erasing the old packages.
On a couple of occasions I've tried to play
:(
mp3 files using mpg123, and it has terminated
with an error message (some complaints about
the header if I remember correctly). On those
occasions, I have switched to x11amp, which
played the tunes without complaints.
If the new x11amp uses mpg123, that means x11amp
won't play those files either, that's bad news
Why is slashdot such a bunch of snobs?
Gqmpeg is much better than x11amp...faster...and it's GPL'd.
it supports more stinking skins!!!!
Sheesh get a clue.
File not found
:/
not really...
instead of make, do:
make CFLAGS=-O6
That makes things faster, and slightly bigger.
Actually, if you are refering to the "socket: too many files open" bug, here's how you use skins:
... Then you can use them as before.
/root world readable permissions. This is a security hole waiting to happen, and is NOT worth it for stupid WinAmp skins.
- Don't run late 2.1.x or 2.2.x kernels. 2.0.36 works fine with this.
- Alternately, you may UNZIP all your skins into separate subdirectories under ~/.x11amp/Skins
- This bug has to do with a change in kernel behavior in 2.1.133 (or thereabouts?) that returns a value x11amp isn't expecting.
- Do NOT ever give
(Sorry if you are refering to another bug that might be present in x11amp 0.9, but this is the "big skin bug" most people refer to...)
Here's what I get when I run 'make' on x11amp0.9:
'
util.c: In function `del_directory':
util.c:42: `EISDIR' undeclared (first use this function)
util.c:42: (Each undeclared identifier is reported only once
util.c:42: for each function it appears in.)
make[2]: *** [util.o] Error 1
make[2]: Leaving directory `/home/argoneus/download/x11amp-0.9-alpha1/x11amp
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/argoneus/download/x11amp-0.9-alpha1'
make: *** [all-recursive-am] Error 2
I have all the required libs and automake 1.3...anyone know what's up?
FYI: Xaudio is about 2x faster (i.e. uses
half as much CPU) than x11amp.
http://www.xaudio.com
This is the negative side of the massive expanssion of open source software. All these ignorent people just sitting at home on their fat asses contributing nothing to the OSS movment, but have an opinion about everything when they don't know a fucking clue what they are talking about. If you don't like it then don't use it! OR write you own! The x11amp people have worked hard on this application... and how much did you pay them? NOTHING!...so use it and show your appreciation or shut up... all this shit about libs/cpu%/etc. will just make them unmotivated to continue this project.
Don't believe it, the day Chutt releases a version of eMusic that doesn't hideously crash is the day I... eat a penguin, alive. :P
ashp@hivemind.org
Anybody know where to find it?
nurgle nurgle
No. Huffman encoding is used for additional compression on the bitstream, but it isn't the "meat" of the compression algorithm. The far greater compression comes from strong spectral encoding. The concept of spectral encoding is nothing new, but the data points that Fraunhofer collected in an impressive number of extremely clever experiments make MP3 a great compression algorithm for general audio (20-20khz).
There are better spectral encoders for specific audio applications. Mobile phones use a form of spectral encoding which is "tuned" for the voice band (400-4khz).
But the specific algorithm in MP3 is clever in it's own right. There is a substantial amount of data on Fraunhofer's website regarding the specific algorithms used, and even some fairly detailed mathematics for the decoder algorithms and some hints for efficient implementations. However the data sets that Fraunhofer spent such a long time collecting are not available in any form except their reference implementation, as far as I've been able to tell.
damn right, you said it brother! i especially hate those fags that bitched about 2.1.x being released so often, its like they didn't know it was development.. f*cking idiots.
-trey [my cat's name is mittens]
I for one appreciate the work done here though
I bet you llamahs couldnt even compile a kernel source, stop complaining or do a better job yourself
Wow didnt know that, i wonder what that makes of my
.... everyone wins. I didnt call it X25amp or anything, but mpg123svga , its on metalab, go get it
mpg123 mod I released on metalab 1 year go then?
I made a svgalib mod to mpg123 with a spectrograph/anaylzer thingo
Its with my source, so
:P~~
-CB
I'll have to try that new version out tonight.
My previous experiences with mpg123 and x11amp are
that mpg123 has real problems playing some songs.
A friend of mine sent me a bunch of country songs that he had recorded in quite lousy quality, and mpg123 couldn't play them. X11amp did...
The skindir is hardcoded to roots account rather than to the $HOME variable. Pretty stupid error if you ask me... but then again its alpha, so I guess you have to expect stupid errors.
my god man. how can you accept an error like this? if they are capable of making an error this stupid it shows that they know absolutely nothing about unix. it certainly makes me not want to trust this program ever again. whats next, are they gonna accidentally send your passwd file to a hotmail account?
I was one of the first ppl to get the v.9a1 source (sorry, just had to point that out :P). anyway, v.9 supports input and output plugins. It should be trivial for someone to port a mp3 encoder (most likly use an iso based encoder, bladeenc maybe?) to accept output from x11amp (about the only thing i could think of this would be good for is for dumping data to a shoutcast server) but anyway, most times if you want to encode mp3s, get a dedicated encoder.
too lazy to login from school,
Dj-Ohki
p.s. i would like to hear from anyone running on a SMP box that has had any luck running x11amp, apperntly, the thread system that x11amp uses works find on UP boxes because there is only 1 thread of execution at one time, but on SMP boxes, there can be 2 or more threads running at the exact same time, this makes some stuff in gtk+/glibc "rip the carpet out from under" other stuff in some other thread of execution... pain in the ass to debug too... anyway, im gonna play around with some pthread mutex locks and see if i can isolate the prob areas when i get home today..
in versions prior to .9, the way the decoding engine worked, it didnt register with the cpu time (has something to do with glibc i think, the libc 5 version reported ~20% or so cpu usage on a pentium 233, go figger).
anyhoo, v.9 has support for plugin input and outputs. if you dont like mpg123 as a decoding engine, hack the xaudio SDK to make a plugin, or use some other mp3 decoding engine to make a plugin. (might not be able to use xaudio though, the license is free for single user use, oh well, someone email them and ask, http://www.xaudio.com/)
Dj-Ohki, too lazy to login
oooh!
:)
I'll remember that (ive just been recompiling my whole system from scratch with O6). I'll keep mpg123 / kernel O2. The rest has been done O6. E ^bfast^b
I just what to say Thank you x11amp people!
Just got home, downloaded and compiled it... it worked right out of the box!
The new version is significantly slower on my computer too. Alot of it seems to be that stupid spectrum analyser. I would guess the rest of it (as it was stated in an earlier responce) is because they switched to mpg123. I've always preferred amp and it's decendants to mpg123, however I've heard that the new versions of mpg123 do a decent job playing mp3s. I suspect as the new version of x11amp mature, they'll be able to improve the performance to something closer to where it was.
After compiling and make installing x11amp 0.9a, I get this error after trying to load an mp3:
Gdk-ERROR **: an x io error occurred
aborting...
IOT trap/Abort (core dumped)
This is with libc5 and linuxthreads 0.7. Any ideas?
I know this is a vague description, but I can't figue out any more. The source compiles and installs correctly (or so it appears). However, when I run it, it immediately exits. I never see the interface or anything. If I run it with the -p flag it seg faults. Any ideas? Anything I can do to list possible errors?
you need threadsafe xlibs.
either that or follow the instructions for libc5 systems on the website. (i guess that this is a way of getting around it somehow)
Heard this on IRC, so I'm not the one who figured it out. If your skins aren't working, you have to (until it's fixed) have your skins in ~root/.x11amp/Skins instead of your user directory. And of course if you're running it as a user, you'll have to chmod 755 /root.. and then probably rechmod other stuff in there to keep it safe.
When i play mp3s with x11amp (any binary-only release) the songs start to crackle at random times in the song. It doesn't matter what my load is, it always does it, even if i'm not doing anything else. I have to constantly click the status bar to pause and start the mp3 again. Anybody else have this problem? (I tried using "real time" mode by running as root - whatever that means - but it didn't work either) Any help is appreciated. wxh[at]altonet.com
The dangers of knowledge trigger emotional distress in human beings.
I have to admit, this is good news for the Linux community. My first X Window-based MP3 player was x11amp, and I was never sure about its license. It's nice to see that they are participating in the Open Source phenomenon.
Currently, I use mpg123, and one of its frontends, GQmpeg. That combination really works well for me because of the 3DNow! support in the latest release of mpg123. The CPU is much less busy now. All things considered, there's nothing bad about this announcement.
Well, it compiled just fine... trying to play an mp3 causes it to die, though. (freezes and eats 99.9% CPU until killed). ... ah, the joys of alpha software. This definately sucks. I use x11amp 0.7 all of the time, so I was pretty excited.
----------------- ------------ ---- --- - - - -
----------------- ------------ ---- --- - - - -
Your honor is perfectly understandishable.
keep in mind that unstable == development (what developers usually use because they are looking to the future)
it all gets to the users in the end, but developers *use* the bleeding edge stuff. most developers aren't going to give a rat's ass if you don't get the brand spanking new stuff, you can always wait until all the devel libs are into stable. there are many reasons for the developers to use the devel libs: to help guide the next versions, have their input taken, and to be prepared for the future. sure this is a release of x11amp, and you do have a point, but asking a developer to bend over backward and support the present instead of looking to the future is a pretty silly attitude, after all the developers aren't doing this just to make you happy.
my advice, don't ask to be treated like a user : )
developers use development libs, get used to it
it would be that way if the libs weren't evolving so rapidly, currently the lib developers aren't the only ones developing the libs, they are getting hacked together to do what a app developer needs them to do. you have a good point, but it isn't really applicable to libs that are changing this rapidly
And I assume you're basing this on your own developmental experience?
Some anonymous coward wrote:
The main problem with releasing an MP3 encoder with source is, as I understand it, the fact that the mathematical formula for MP3 compression happens to be patented by Fraunhofer GmBH. :P Technically, in those parts of the world that are insane enough to allow patents on mathematical formulas (like the US :( ) one isn't even supposed to create ANY sort of encoder/decoder that can handle MP3s without paying a royalty. :P
Yes, the algorithm has been published as an ISO standard, but thanks to the patent issues it is next to impossible to put out a truly "open" MP3 encoding library, at least in the US and other places that accept US patents as valid. :P
Obvious solutions:
1) Find someone in a country that doesn't recognise software and/or algorithm patents as valid (and which also doesn't have a trade agreement that would mean they have to see US patents as valid) to put out an open library for MP3 encoding, and hope they don't get sued by Fraunhofer GmBH
2) Raise hell with Fraunhofer GmBH to release the MP3 encoder/decoders as open libraries (good luck; I don't even think they have Linux *executables* of the latest version)
3) US-based folks: Raise polite hell using snail-mail with your congress-critters stating that patent law needs reform to prevent abuses [be sure to cite examples such as IBM's recent-ish patent on the wheel]
4) US-based folk, and maybe others--support peaceful protests to get patent law changed, such as some of the ideas proposed on here in past [one of my favourites--get a patent put out that essentially describes the process of patenting, then once it gets approved point out to the patent office that it's prior art by using *THEM* as the example].
Making those directories saved me from a few minutes of banging my head against my keyboard. Thanks!
A buddhist walks up to a hot dog stand and says ``Make me one with everything.''
I hope the x11amp team keeps up the good work despite all the stupid whining about the programs dependencies. I see that it is eats more CPU than mpg123, but its keeping up there with the presence winamp has, which some of us enjoy. mp3s in X will belong to x11amp for me.
Just be happy with have a choice.
tugrul
- What the heck *is* X11amp anyway? From the screenshots I can guess that it is a sound thing of some sort, but nothing on the site gives enough information to figure out anything other than that.
Don't label something "offtopic" unless you know the topic well enough to tell what's on topic.
Oh, and much of the stuff you listed should be on any new self-respecting linux system
(Rest of quote cropped for brevity)
Lessee here.
GTK and Glib I can understand - core GUI libraries are something that's going to be released/upgraded/recompiled often.
Lets see how much of that stuff is acutally just needed because of imlib.
ImageMagick
libjpeg
libgif
libpng
.....
It seems that only gettext is left. That's a lot of crap for "skins" IMO. Also, 90% of the fact that people were using a binary MP3 player was because it was so damn fast! Miniscule (below 1%)processor usage even on a K6-200, something that just isn't possible with mpg123 or any other decoder that i've seen other than amp.
And what is it with amp anyways? I thought that it was under a BSD-like or artistic licence anyways, which would imply free use of the code. Maybe since Winamp has brutally raped the living hell (and work) out of amp's creator the license has changed.
It's surprising that the fact that imlib, which is no more than a wrapper that has a disgustingly high-priority list of library requirements, is getting anywhere at all. Frankly with all the effort people are putting into it, it would just seem easier to play the not-invented-here (not really) game and re-write the whole damn thing themselves.
Imlib is a great, great, great, idea. But it's so poorly steered and designed it's going to have to fall eventually...
-Erik-
...add in a buffer. You can do this by passing -b to mpg123. I've found that one meg works well, or if you're memory-squeezed, 512K is great too. A buffer acts like ESP on a Discman, decoding the audio into one end and playing it out the other. If there's a short spike in system activity the player doesn't skip.
gqmpeg has an option to do this; since the new x11amp uses mpg123, it should too.
I finally got home from work and was able to compile the new version, and it rocks. :) Working EQ (!!), no seggies yet (!!), the gtk file selector works much better, and GPL (!!) I was really pleasantly surprised after compiling to see how much this new version rocks. :) This after expecting to be disappointed reading all of the incessant whining about it. Feh.
AFAIK, GTK+ is nearing 1.2.0. Most of the software I've seen that uses the development libraries is developmental itself, and so it makes no sense to tie it to an older version of the library which is scheduled to be replaced soon.
:) )
In addition, I suspect that X11Amp uses skins? Those are probably done with GTK+ themes (although I haven't looked at the source yet so take this with a grain of salt
Oh, and much of the stuff you listed should be on any new self-respecting linux system (linuxthreads is part of the standard C library now, imlib has stable versions out there, libpng, libgif (or libungif), and libjpeg are AFAIK optional but recommended (and again, they're stable and, IIRC, used by a bunch of stuff), zlib is pretty much universal--the latest version is 1.1.3 not 1.1.2 which you listed, and imagemagick is unrelated. Don't know what it's doing there. The only exotic and devel stuff I see is GTK+, Glib, and gettext--and I run programs using those almost continually on my system with ABSOLUTELY NO CRASHES DUE TO THE LIBRARIES. And they build quite nicely too (and I'm using the most difficult method of building them) )
Daniel
Hurry up and jump on the individualist bandwagon!
You miss the point... They're doing all of their development based on the development branches of various libraries. A lot of people are. A lot of silly, silly Gprimates.
How are they ever supposed to become stable, if they're basing all of their work on a shaky foundation? The stable versions of most of those libs are there. Use them.
Gtk 1.1 is perfectly stable
I think you misinterpret what I mean by "unstable". Not "unstable" as in you link against it and your app crashes and burns. "Unstable" as in it's still in development and therefore subject to change. "Unstable" as in it's still in development, and therefore you can't be assured that everyone has the latest (probably not greatest) version.
GTK 1.0 is stable. Version releases occur infrequently, and people generally have the latest version. If they don't, you can be sure they can safely upgrade to it.
I use x11amp 0.7, because I have found nothing particularly better for X. (I'm a pretty big fan of nice GUIs, if I'm gonna have a GUI.) I was going to install 0.9a essentially for the double-size option.
But wow, check out the libraries I'd need:
- glib 1.1.14
- gtk+ 1.1.14
- imlib 1.9.2
- linuxthreads 0.71
- gnu gettext 0.10
For imlib, I'd need:See a trend? Why do people write so much software that compiles only against developmental/experimental libraries?
Not to mention the stuff that the G-crowd (and E-flock) consider standard, but nobody else has or uses....
Yeah, these new libs (especially gtk) tend to have some neato-burrito whiz-bang wowie-zowie features, but can't we wait til they're something resembling stable? Isn't that why there're separate "stable" and "development" versions?
Note that the new version might be slower than the older binary only releases because of your compiler. With binary only releases, the author may have used an optimizing Pentium (pgcc) compiler unliek the gcc/egcs combo most people have on their systems.
This is just speculation, I haven't actually compiled any MP3 players under normal gcc and pgcc to compare.
Windigo said:
... cite examples such as IBM's recent-ish patent on the wheel
Please can someone point me towards this.
Alex
True, and hunting down libraries for downloading isn't exactly my favorite pastime (I'd rather shave my balls with a weed wacker), but mostly this is a good thing. It's painful sometimes, but it is a good thing. Anything GTK is a good thing for X (as opposed to motif).
support gun control: take guns from cops
making problems? try
make SHELL=sh
wont start?
rm -rf ~/.x11amp ; mkdir ~/.x11amp ; mkdir ~/.x11amp/Skins ; chmod +x ~/.x11amp/Skins
Ok, run x11amp as normal, play some mp3's. Open a top and check it out. (hmm .7% for me) Now start rendering something in povray or start cracking rc5. Take a look at top again.... Interesting, my x11amp process is now taking up 8.2%
mpg123 takes up less CPU for me. How about you?
CPU Hack? Probably...
Ok, run the old x11amp (version .7) as normal, play some mp3's. Open a top and check it out. (hmm .7% for me) Now start rendering something in povray or start cracking rc5. Take a look at top again.... Interesting, my x11amp process is now taking up 8.2%
mpg123 takes up less CPU for me. How about you?
CPU Hack? Probably...
It's not just you. I'm getting it as well. Considering that this is the only thing out of the entire mess of apps that I use which rely on the 1.1.x libraries which malfunctions like this, I'm inclined to blame X11amp.
I believe they just added two more functions! ;)
:)
I tend to agree with the original thread of this post, but for another reason. Lots of people like to use the latest software, but having the latest version of gtk, and the stable version co-existing is a bit of a pain in the ass. Yes, its possible, but a pain. And some of us still use apps that won't work with gtk 1.1. But then, its nice to use the latest features. I guess you can't please all the people all of the time.
I downloaded it before teh announcement on /. (i had been refreshing the ftp all day) anyway, It has a nice feature set, but I find it uses up about 4-5 timesmore CPU power than the old one. Anybody have any clue what might have caused this HUGE jump in processor usage?
Hey, they're not all bad. Sure they, crash now and then, but come on - good effort guys! I'm not gping to complain about the problems with something because I don't care if it gets fixed or not.
Yes, fix the goddam mpg123 code to make it pre-load the buffer and not try to play when it loads the first damn bit of the first damn byte of the mp3.
Sorry, not cursing at you, but mpg123 in general. kmpg has been annoying me for the longest time with this.
I've finally had it: until slashdot gets article moderation, I am not coming back.
so what's new? does it actually have a menu somewhere now? streaming (plz!!)?
ah well.. i'm off to check it out
- export PATH=/usr/local/bin:$PATH
to make sure it would pick up the libs I wanted. It configured and compiled perfectly. Here is my ldd of the binary.export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
$ ldd
libgdk_imlib.so.1 =>
libjpeg.so.62 =>
libtiff.so.3 =>
libungif.so.3 =>
libpng.so.2 =>
libz.so.1 =>
libm.so.6 =>
libgtk-1.1.so.11 =>
libgdk-1.1.so.11 =>
libgmodule-1.1.so.12 =>
libglib-1.1.so.12 =>
libdl.so.2 =>
libXext.so.6 =>
libX11.so.6 =>
libpthread.so.0 =>
libc.so.6 =>
Hope this helps...
Yeah, you can stream it with netscape if you use this script I whipped together. No guarentees, but it works for me...
As others have mentioned, use rpm --erase --nodeps to remove the 1.0.* gtk/gdk and imlib library packages installed with 5.2 (there are three).
One gotcha is that the new stuff requires a binary called libtoolize; grab the libtool SRPM and build/install it; I put it in /usr/local.
Then build and install new 1.1.* versions of the gtk/gdk and imlib libraries from the SRPMS; I install them in /usr/local. Add /usr/local/lib to your /etc/ld.so.conf file and re-run ldconfig.
Now you can build and install x11amp! Good luck.
Brent J. Nordquist N0BJN
wow, I found about this BEFORE reading it on slashdot...heh.
The new version uses mpg123, and skips a little more. It seems a bit flakier, but it actually has a *lot* of new features. (feature set -- not just l&f -- reminds me of winamp on my girlfriend's computer)
cheers,
wb
I've actually needed to make changes to the X11Amp
source before, but couldn't because of the
license. I'm glad it's now under the GNU GPL.
/*
r op)) o n);
) ;
" ))
r eamp,cfg.equalizer_bands);
o n);
y ->length/60000,(entry->length/1000)%60);
l ength()); s t,node)+1,entry->filename);
e rOfEntries")) 1 ]=='\n') e )-1]=='\n') line[strlen(line)-1]='\0';
i st_sort_by_title_cmpfunc);
i st_sort_by_filename_cmpfunc);
i st_sort_by_path_cmpfunc);
I noticed shuffle isn't hooked in yet. Here's a quick fix to enable shuffle. It's not an ideal fix, but it'll work until we see another release!
My apologies if the formatting gets screwed up.
*/
//playlist.c
#include "x11amp.h"
GList *playlist=NULL;
GList *playlist_position;
void playlist_clear(void)
{
GList *node;
PlaylistEntry *entry;
if(playlist)
{
if(get_input_playing()) input_stop();
node=playlist;
while(node)
{
entry=(PlaylistEntry *)node->data;
if(entry->filename) g_free(entry->filename);
if(entry->title) g_free(entry->title);
node=node->next;
}
g_list_free(playlist);
playlist=NULL;
playlist_position=NULL;
}
}
void playlist_delete(gboolean crop)
{
gboolean restart_playing=FALSE,set_info_text=FALSE;
GList *node=playlist,*next;
PlaylistEntry *entry;
while(node)
{
entry=(PlaylistEntry *)node->data;
next=g_list_next(node);
if((entry->selected&&!crop)||(!entry->selected&&c
{
if(playlist_position==node)
{
set_info_text=TRUE;
if(get_input_playing())
{
input_stop();
restart_playing=TRUE;
}
if(g_list_next(playlist_position))
playlist_position=g_list_next(playlist_position);
else if(g_list_previous(playlist_position))
playlist_position=g_list_previous(playlist_positi
else if(node!=playlist)
playlist_position=playlist;
else
playlist_position=NULL;
}
if(entry->filename)
g_free(entry->filename);
if(entry->title)
g_free(entry->title);
playlist=g_list_remove_link(playlist,node);
g_free(entry);
g_list_free_1(node);
}
node=next;
}
playlistwin_update_list();
if(set_info_text)
mainwin_set_info_text();
if(restart_playing)
{
if(playlist_position)
playlist_play();
mainwin_set_song_info(0,0,0);
}
}
void playlist_select_all(void)
{
GList *node;
node=playlist;
while(node)
{
((PlaylistEntry *)node->data)->selected=TRUE;
node=node->next;
}
playlistwin_update_list();
}
void playlist_select_none(void)
{
GList *node;
node=playlist;
while(node)
{
((PlaylistEntry *)node->data)->selected=FALSE;
node=node->next;
}
playlistwin_update_list();
}
void playlist_inverse_selection(void)
{
GList *node;
node=playlist;
while(node)
{
((PlaylistEntry *)node->data)->selected=!((PlaylistEntry *)node->data)->selected;
node=node->next;
}
playlistwin_update_list();
}
void playlist_add(gchar *filename)
{
PlaylistEntry *entry;
gchar *ext;
entry=g_malloc0(sizeof(PlaylistEntry));
entry->length=-1;
entry->filename=g_strdup(filename);
if(!playlist)
{
playlist=g_list_append(NULL,entry);
playlist_position=playlist;
}
else
g_list_append(playlist,entry);
}
void playlist_add_dir(gchar *path)
{
DIR *dir;
struct dirent *dirent;
struct stat statbuf;
gchar *filename;
if(dir=opendir(path))
{
while(dirent=readdir(dir))
{
if(dirent->d_name[0]!='.')
{
filename=g_strconcat(path,"/",dirent->d_name,NULL
stat(filename,&statbuf);
if(S_ISDIR(statbuf.st_mode))
playlist_add_dir(filename);
else
playlist_add(filename);
g_free(filename);
}
}
}
}
/*
* I'm not sure if this is the correct way to do it but it seems to work fine
*/
void playlist_add_url_string(gchar *string)
{
gint i=0,start;
gchar *temp,*ext;
struct stat statbuf;
printf("%s\n",string);
while(*string)
{
temp=strchr(string,'\n');
if(temp)
{
if(*(temp-1)=='\r')
*(temp-1)='\0';
*temp='\0';
}
if(!strncasecmp(string,"file:",5))
{
stat(string+5,&statbuf);
if(S_ISDIR(statbuf.st_mode))
playlist_add_dir(string+5);
else
{
ext=strrchr(string+5,'.');
if(ext)
{
if(!strcasecmp(ext,".m3u")||!strcasecmp(ext,".pls
playlist_load(string+5);
else
playlist_add(string+5);
}
else
playlist_add(string+5);
}
}
else
playlist_add(string);
if(!temp)
break;
string=temp+1;
}
}
void playlist_play(void)
{
PlaylistEntry *entry;
gchar *ptr;
if(get_playlist_length()==0)
return;
entry=(PlaylistEntry *)playlist_position->data;
if(get_input_playing()) input_stop();
input_play(entry->filename);
if(input_get_time()!=-1)
input_set_eq(cfg.equalizer_active,cfg.equalizer_p
}
void playlist_set_info(gchar *title,gint length,gint rate,gint freq,gint nch)
{
PlaylistEntry *entry;
entry=(PlaylistEntry *)playlist_position->data;
if(entry->title)
g_free(entry->title);
entry->title=g_strdup(title);
entry->length=length;
mainwin_set_song_info(rate,freq,nch);
mainwin_set_info_text();
playlistwin_update_list();
}
void playlist_next(void)
{
if(!playlist) return;
if(!cfg.shuffle) {
if(g_list_next(playlist_position))
playlist_position=g_list_next(playlist_position);
}
else
playlist_position=g_list_nth(playlist,rand() % get_playlist_length());
if(get_input_playing())
{
input_stop();
playlist_play();
}
else
{
mainwin_set_info_text();
playlistwin_update_list();
}
}
void playlist_prev(void)
{
if(!playlist) return;
if(g_list_previous(playlist_position))
playlist_position=g_list_previous(playlist_positi
if(get_input_playing())
{
input_stop();
playlist_play();
}
else
{
mainwin_set_info_text();
playlistwin_update_list();
}
}
void playlist_set_position(gint pos)
{
if(!playlist) return;
playlist_position=g_list_nth(playlist,pos);
if(get_input_playing())
{
input_stop();
playlist_play();
}
else
{
mainwin_set_info_text();
playlistwin_update_list();
}
}
void playlist_eof_reached(void)
{
input_stop();
if(!cfg.shuffle) {
if(!g_list_next(playlist_position))
{
playlist_position=playlist;
if(!cfg.repeat)
{
mainwin_set_song_info(0,0,0);
mainwin_set_info_text();
return;
}
}
else
playlist_position=g_list_next(playlist_position);
}
else
playlist_position=g_list_nth(playlist,rand() % get_playlist_length());
playlist_play();
}
gint get_playlist_length(void)
{
if(!playlist)
return 0;
return g_list_length(playlist);
}
gchar *playlist_get_info_text(void)
{
PlaylistEntry *entry;
gchar *text=NULL,*title,*tmp,*tmp2;
gint i;
if(playlist)
{
entry=(PlaylistEntry *)playlist_position->data;
if(entry->title)
title=entry->title;
else
{
title=strrchr(entry->filename,'/');
if(!title)
title=entry->filename;
else
title++;
}
text=g_malloc(strlen(title)+20);
if(entry->length!=-1)
sprintf(text,"%d. %s (%d:%-2.2d)",get_playlist_position()+1,title,entr
else
sprintf(text,"%d. %s",get_playlist_position()+1,title);
if(cfg.convert_underscore)
while(tmp=strchr(text,'_'))
*tmp=' ';
if(cfg.convert_twenty)
while(tmp=strstr(text,"%20"))
{
tmp2=tmp+3;
*(tmp++)=' ';
while(*tmp2)
*(tmp++)=*(tmp2++);
*tmp='\0';
}
}
return text;
}
int playlist_get_current_length(void)
{
PlaylistEntry *entry;
if(!playlist) return 0;
entry=(PlaylistEntry *)playlist_position->data;
return entry->length;
}
gboolean playlist_save(gchar *filename)
{
PlaylistEntry *entry;
GList *node;
FILE *file;
gchar *ext;
gboolean is_pls=FALSE;
if(file=fopen(filename,"w"))
{
ext=strrchr(filename,'.');
if(ext)
if(!strcasecmp(ext,".pls"))
{
is_pls=TRUE;
fprintf(file,"[playlist]\n");
fprintf(file,"NumberOfEntries=%d\n",get_playlist_
}
node=playlist;
while(node)
{
entry=(PlaylistEntry *)node->data;
if(is_pls)
fprintf(file,"File%d=%s\n",g_list_position(playli
else
fprintf(file,"%s\n",entry->filename);
node=node->next;
}
fclose(file);
return TRUE;
}
return FALSE;
}
gboolean playlist_load(gchar *filename)
{
FILE *file;
gchar *line,*ext,key[10];
gint i,noe;
int linelen=1024;
ext=strrchr(filename,'.');
if(!ext) ext=".m3u";
if(!strcasecmp(ext,".pls"))
{
if(line=read_ini_string(filename,"playlist","Numb
{
noe=atoi(line);
g_free(line);
}
else
return FALSE;
for(i=1;i=noe;i++)
{
g_snprintf(key,10,"File%d",i);
if(line=read_ini_string(filename,"playlist",key))
{
playlist_add(line);
g_free(line);
}
}
return TRUE;
}
else
{
if(file=fopen(filename,"r"))
{
line=g_malloc(linelen);
while(fgets(line,linelen,file))
{
while(strlen(line)==linelen-1&&line[strlen(line)-
{
linelen+=1024;
line=(gchar *)g_realloc(line,linelen);
fgets(&line[strlen(line)],1024,file);
}
while(line[strlen(line)-1]=='\r'||line[strlen(lin
playlist_add(line);
}
fclose(file);
return TRUE;
}
}
return FALSE;
}
GList *get_playlist(void)
{
return playlist;
}
gint get_playlist_position(void)
{
return g_list_position(playlist,playlist_position);
}
gint playlist_sort_by_title_cmpfunc(PlaylistEntry *a,PlaylistEntry *b)
{
gchar *a_title=NULL,*b_title=NULL;
if(a->title)
a_title=a->title;
else
{
if(a->filename[0]='/')
a_title=strrchr(a->filename,'/')+1;
if(!a_title)
a_title=a->filename;
}
if(b->title)
b_title=b->title;
else
{
if(b->filename[0]='/')
b_title=strrchr(b->filename,'/')+1;
if(!b_title)
b_title=b->filename;
}
return strcasecmp(a_title,b_title);
}
void playlist_sort_by_title(void)
{
playlist=g_list_sort(playlist,(GCompareFunc)playl
}
gint playlist_sort_by_filename_cmpfunc(PlaylistEntry *a,PlaylistEntry *b)
{
gchar *a_filename=NULL,*b_filename=NULL;
if(a->filename[0]='/')
a_filename=strrchr(a->filename,'/')+1;
if(!a_filename)
a_filename=a->filename;
if(b->filename[0]='/')
b_filename=strrchr(b->filename,'/')+1;
if(!b_filename)
b_filename=b->filename;
return strcasecmp(a_filename,b_filename);
}
void playlist_sort_by_filename(void)
{
playlist=g_list_sort(playlist,(GCompareFunc)playl
}
gint playlist_sort_by_path_cmpfunc(PlaylistEntry *a,PlaylistEntry *b)
{
return strcasecmp(a->filename,b->filename);
}
void playlist_sort_by_path(void)
{
playlist=g_list_sort(playlist,(GCompareFunc)playl
}
void playlist_reverse(void)
{
playlist=g_list_reverse(playlist);
}
Look, this is really quite simple:
1. x11amp is free
2. Gtk+ 1.1.14 is pretty close to Gtk+ 1.2.0
3. There are a fairly large number of differences between the two, depending on what you are doing.
4. Pursuant to #4, if your code heavily uses the heavily affected areas, it will be a lot of work to switch.
5. Seeing as how both 2 & 4 are true, it will minize your work the most to use Gtk+ 1.1 until 1.2 comes out.
6. Seeing as how 1 & 5 are true, your best course of action is to use Gtk+ 1.1 until Gtk+ 1.2 comes out.
7. Some users might complain that they don't get to use your bleeding edge program without using the bleeding edge libraries.
8. Pursuant to 7, your best course of action is to politely point out the GPL on your program, and invite them to patch their copy to work with non-development libraries, and then distribute it if they wish.
9. Some users won't do any work but sit around and complain that people aren't giving them free stuff exactly how they want it.
10. Point out that they aren't really who are meant to get the software, they are just a sideeffect of the freedom involved.
11. Also point out that a little humility and gratitude go a long way.
12. Also point out that it is improper for a non-coder to criticise the ways of a coder, or for a beginning coder to criticize the decisions of a master coder.
Look, it's one thing if you are poitning out some sort of moral issue, free versus proprietary, etc. That's everyone's duty to (a) complain about and (b) fix as best they can. Every good open source application that's written weakens the power of closed source software, and every voice that cries against proprietary software helps, too. The money that purchases open source CDs, hires open source programmers, reads open source magazines, buys computers from vendors who install open source operating systems, or purchases services and manuals from open source developers helps even more. This has absolutely nothing to do with that. Do you have something more valid to say than open source developers shouldn't develop for their target platforms, but instead for older ones? I bet, if you look at it, that X11amp will be in its stable version around the time that Gtk+ 1.2 comes out. Therefore that is probably its target platform. If there target platform is Gtk+ 1.2, it makes a hell of a lot more sense to develop on Gtk+ 1.1.x then 1.0.x. It's one thing to switch in the middle of a stable version, but you're complaining about a development version being in development?
Lastly, x11amp is an mp3 player. This isn't the kernel or libc that we're talking about. you can (a) live without it for a few months and (b) choose another one. Just learn from the closing verse to MST3K's theme song, "Repeat to yourself 'It's just a show' - I should really just relax!"
They laughed at Einstein. They laughed at the Wright Brothers. But they also laughed at Bozo the Clown. -- C. Sagan
And who exactly is going to bug-test the libraries? I mean - changing the source slightly when the nexts stable library comes out can't be that hard (Spoken with no experience whatsoever. Correct me if I'm wrong) It sounds as if it all works at the moment so stop fretting - just wait until it comes out in a nice stable package for your enjoyment. Thats generally what I do.
Thank you X11 Amp people. My linuxPPC box awaits your Glorious program!
forgot to compile X with threading support last time. damnit