A Reimplementation of Winamp 2.9 in HTML5 and JavaScript
github.com
github.com
Plus, you have to keep adding skin support for every new feature you add, which means the many skins that don't keep up will no longer work for the latest version of your app, which pisses off users. And when skins slow down or stop being made (people get bored, move on) it reflects poorly on the app, making it look like a ghost town.
Businesses often care a lot about it, they just call it “branding” (and it can be a big deal, even for internal tools); obviously, you need to show different examples to them than typical consumers.
(I may have opinions about this trend.)
Would also like to point out that customisation on MySpace is probably responsible for a whole generation of not only developers but non-tech focused people learning how to code. Met a lot of artists and designers who now work on the internet who MySpace was the starting point.
Not sure on the generation of web developers MySpace created. Pretty sure every single page that looked like this was plastered with logos for theme building sites/companies littered with various neon-on-black comic sans designs as far as the eye can see.
Anecdotal: I use a custom Facebook skin that makes the whole UI red and add a background image. Since I've started using it, I spend less time on the website. It feels, in a way, more tiring to use the custom theme.
Edit: I now realize that, taken out of context, my comment sounds pretty twisted.
The Web is a medium with built-in customizability.
This "our product is perfect and must be used as is" attitude reminds me of a relatively recent example that seems to be dying down: mobile websites that used the `maximum-scale=1 ` value in `<meta name="viewport"`. This disabled zooming in mobile devices. This was an accessibility issue that affected people who otherwise don't encounter other accessibility issues.
If it were simply a matter of providing the smallest payload to clients, these sites could provide some sort of external manifest/source map mapping human-readable class names to hashes.
Let's stop using divs for presentation whilst we're at it and spend man-years on picking the right semantically named elements with no benefit to anyone anywhere ever.
No ajax or js either, I'm pretty sure they didn't envisage that.
Edit: read the FAQ, downvotes are not for disagreement.
Commenting about downvotes in arguments isn't ok, though: https://news.ycombinator.com/newsguidelines.html.
Not to mention how your method could break tomorrow without warning because Facebook (or whatever you're skinning) push out an update that's incompatible with the theme you've hacked on to it.
What you had to make skins yourself??? You didn't just get them via micro-transactions and loot-boxes???
/s
[0] https://chrome.google.com/webstore/detail/dark-reader/eimadp...
If the end user thinks it would be better with a different font or larger text or a different background, then they're right.
And realistically once an app ships to the end user the developer has forfeited all control anyway.
Oh how many devs i have encountered over the years with that exact attitude, in particular post iPhone...
I tried to theme some popular sites to my taste of dark themes and it's really tedious.
If you don't want/can't run Winamp, VLC might almost be what you want.
to be fair it's been a long time since i looked into skinning it and things may be better now. it's still an excellent clean audio player, i just keep it close to stock with a few addons so i send audio to a chromecast.
there sure were some wild and beautiful fb2k skins and themes back in the day.
I will say I really like(d) the windows 7-10 taskbar in general, and the windows 7-style start menu interaction with the windows 10 look (without the tiles). I switched to Ubuntu with gnome last year after win10 just pissed me off one too many times with the "user engagement" crap that gets loaded with win10. Though I've thought about going back a few times. (Laptop at home and at work are 2014-2015 mac pros)
Type nullsoft
Now you just need shoutcast support ;).
Cheers!
Any plans to make this a PWA (by adding a serviceworker)? Would be awesome to be able to run this offline and in a dedicated window.
Thanks for your hard work and for making sure it wasn't broken in Edge. It was really satisfying to pull it up on my Windows 10 Mobile without issue.
If the latter, how can you still implement the equalizer?
See how it's used here: https://github.com/captbaritone/winamp2-js/blob/master/js/me...
-----------------------------------
It's done! Winamp2-js (https://jordaneldredge.com/projects/winamp2-js/) finally supports all three windows!
To celebrate, here's a list of some of the cool things it can do: (thread) https://pbs.twimg.com/media/DVcfDHBVQAAp3Tm?format=png
* Load any classic Winamp skin just by dragging it onto the main window. (Shoutout to @stuk for JSZip which lets us decompress .wsz files in the browser. (link: https://stuk.github.io/jszip/) https://video.twimg.com/ext_tw_video/961271636983820288/pu/v...
* Drag local audio files into the playlist to queue them up. https://video.twimg.com/ext_tw_video/961271712238063621/pu/v...
* Visualize your music with the bar or line visualizer. https://video.twimg.com/ext_tw_video/961271795725709314/pu/v...
* Adjust the fully functional EQ to pump up the bass. (Shoutout to @epistemex for cardinal-spline-js (link: https://github.com/epistemex/cardinal-spline-js)) https://video.twimg.com/ext_tw_video/961271880035389441/pu/v...
* Import/export Winamp's own binary EQ settings files. https://video.twimg.com/ext_tw_video/961272045177782275/pu/v...
* Export your playlist as an .html file. https://video.twimg.com/ext_tw_video/961272121270743040/pu/v...
* Save screen real estate with each window's "shade" mode. https://pbs.twimg.com/media/DVcf90bVQAALtl_?format=jpg
* See each file's title/artist as specified in its ID3 tags. (Shoutout to @aadsm for jsmediatags (link: https://github.com/aadsm/jsmediatags)) https://video.twimg.com/ext_tw_video/961272266322407425/pu/v...
* If a skin specifies some transparent regions in its region.txt, they are respected. (Shoutout to @SaraSoueidan for (link: https://www.sarasoueidan.com/blog/css-svg-clipping/)) https://video.twimg.com/ext_tw_video/961272327584403457/pu/v...
* Drag windows around, and easily align them with window snapping. https://video.twimg.com/ext_tw_video/961272384148815873/pu/v...
* Use hotkeys to control all major functions. https://video.twimg.com/ext_tw_video/961272440251822080/pu/v...
* Select/drag tracks to reorder them. https://video.twimg.com/ext_tw_video/961272499219587072/pu/v...
* "Double" mode (ctrl+d) makes the main and EQ windows twice as big. https://pbs.twimg.com/media/DVcgTW3VMAAgrdc?format=jpg
Getting all of this to work entirely in the browser has been a great challenge, and I've learned a lot. Thanks to @The_DoctorO for being an invaluable source of insider information. Thanks to @LuigiHann for catching many small places where I hand't perfectly recreated Winamp's handling of skins. Thanks to @ja2ke for the original retweet which I believe kicked this whole thing off more than three years ago. And of course, thanks to @JustinFrankel. ️
-----------------------------------
(@captbaritone, I'm assuming you're ok with pasting the content here, but please let me know in case you have objections.)
Wishful thinking: If this included something akin to Shoutcast (perhaps via WebRTC), it would give us back the peer-to-peer listening joy we had for small groups and teams back in the day. I miss the era when things were more commonly/naturally peer-to-peer and decentralized.
To this day I find Spotify and its competitors a poor substitute, algorithms still can't match a well curated station.
If you're looking to tune in to something, I like http://www.somafm.com, possibly the original spotify / coding playlist. (BeatBlender, etc)
I'm not saying there aren't still decent media players out there, but honestly I think Winamp is still the best there's ever been.
[1] https://github.com/projectM-visualizer/projectm [2] https://www.clementine-player.org/
:)
56k was just the last version of Dial-up. I started on 9600baud (9.6k) and it started well before that even, at something like 0.1k.
I think my aging LAN gear capped out way before the fiber did, and an upgrade is on my todo list. ;)
It was leecher heaven!
That is until some wiseass thought it'd be a good idea to run a private ftp site for a piracy group from their dorm room. The damn thing saturated the entire network until they got caught.
As of Mp3 Player, it was my first one... and it simply worked! I didn't need anything more than quick play (light memory use) and eventually a play lists. Its too bad they didn't cashed hard-core on it.
Not idea why anyone ever would need to change for another player that does... more.
Its still my default for all audios on Windows.
https://www.gizmodo.com.au/2013/11/a-brief-history-of-the-wi...
Remember when 192kbps sounded so much better than the typical 128kbps tracks? Now 320kbps is just assumed. Yay! for 4G.
I'm semi-guessing the browser re-implementation does not support these. Pity.
Atwood's law
That's so many memories ! Thanks captbaritone !
A few things I noticed: I am trying a long live set and times over 100 minutes are not shown properly. I shows modulo of 100.
Left and right arrows shortcuts should be jump 5 seconds not 5 minutes.
https://github.com/captbaritone/winamp2-js/issues/485
I haven't been able to verify the second one.
Anyway, if you want AVS, at some point they pubished sources, perhaps someone could reimplement AVS and AVS2?
You can follow along here: https://gitter.im/visbot/AVS
I wonder if I can get other things to run in the same isolated space??? To begin with how about something symbolic like XEyes or good old, in fact anything good old.
With this we have a clean implementation tho.
You'd still need the Spotify desktop client open (Winamp2-js would function as a remote), but you could do things like populating the playlist window with a user playlist.
Now if yahoo would give musicmatch jukebox 7.5 back to the world I could DJ like it's 1999 and be happy again.
You really learn to love higher level abstractions when you write that much assembly by hand...
These days i think i'll just use Foobar2k on Windows, and Deadbeef (or a terminal player) on Linux.
Windows 10
TypeError: Object.entries is not a function(…)e.(anonymous function) @ console.js:32
Skin.js:127 Uncaught (in promise) TypeError: Object.entries is not a function(…)
#1 - TypeError: Object.entries is not a function(…) e.(anonymous function) @ winamp.js:38
#2 - winamp.js:49 Uncaught (in promise) TypeError: Object.entries is not a function at _ (https://jordaneldredge.com/projects/winamp2-js/built/winamp....) at Ct.beginWork (https://jordaneldredge.com/projects/winamp2-js/built/winamp....) at i (https://jordaneldredge.com/projects/winamp2-js/built/winamp....) at a (https://jordaneldredge.com/projects/winamp2-js/built/winamp....) at s (https://jordaneldredge.com/projects/winamp2-js/built/winamp....) at E (https://jordaneldredge.com/projects/winamp2-js/built/winamp....) at b (https://jordaneldredge.com/projects/winamp2-js/built/winamp....) at h (https://jordaneldredge.com/projects/winamp2-js/built/winamp....) at p (https://jordaneldredge.com/projects/winamp2-js/built/winamp....) at Object.Nt.updateContainer (https://jordaneldredge.com/projects/winamp2-js/built/winamp....) at https://jordaneldredge.com/projects/winamp2-js/built/winamp.... at Object.Rt.unbatchedUpdates (https://jordaneldredge.com/projects/winamp2-js/built/winamp....) at gn (https://jordaneldredge.com/projects/winamp2-js/built/winamp....) at uo.render (https://jordaneldredge.com/projects/winamp2-js/built/winamp....) at e.<anonymous> (https://jordaneldredge.com/projects/winamp2-js/built/winamp....) at r (https://jordaneldredge.com/projects/winamp2-js/built/winamp....) at a._invoke (https://jordaneldredge.com/projects/winamp2-js/built/winamp....) at a.e.(anonymous function) [as next] (https://jordaneldredge.com/projects/winamp2-js/built/winamp....) at r (https://jordaneldredge.com/projects/winamp2-js/built/winamp....) at https://jordaneldredge.com/projects/winamp2-js/built/winamp....