About
worldTunes ©2009 was made by Adam Schwartz, a web designer and composer living in Cambridge, MA.
All code writen by Adam, including but not limited to the Playlist, Track, and WT classes, are licensed under the MIT Creative Commons License. (More information about licensing coming soon. Email me if you have questions.)
Other codebases used, such as jQuery, SoundManager2, SWFObject, XBMImages, and JuicyDrop are all licensed individually. Please refer to their respective websites for more information.
Features
- Playlists - Dynamically create playlists.
- Sorting - Sort playlists by Title, Artist, Album, Genre, etc.
- Searching - Seach Seeqpod for mp3s available online. Create playlists of music from search results. Get album art on the fly from Flickr API.
- Navigating - Navigate playlists with arrow keys like in iTunes and other desktop applications. Follows iTunes' other shortcut conventions: Ctrl+Up/Down = Volume Up/Down, Ctrl+Left/Right = Previous/Next Track, etc.
- Streaming - You don't have to wait for mp3s to load before playing them.
- Visualizing - Real-time visualizer. (Note: Only works with locally hosted files, all other mp3s use random visualization)
- iTunes-like UI - Very fluid layout which is familiar to millions and very easy to use.
Known Issues (report any here)
- Visualizer Doesn't Work When Youtube Video (Or Other Flash Video with Sound) Is Open In Another Browser Tab (see areSoundsInaccessible() method for flash 9.0)
- Library Persitence only in Firefox
- Delete Track While In Playlist Removes Highlighting of Currently Playing Track (issue is with
Playlist().current)
- Shift Select Playlists, then Press Up/Down Arrows
- Many Features Broken in Opera
Track Shouldn't Be Allowed To Be Added to the Same Places Twice Resolved in v1.1
Up/Down arrows and Delete button don't do anything in Internet Explorer and Google Chrome. (See megaKeyboardHandler(). Anybody know what I'm doing wrong?) Fixed in v0.9 (simply needed to bind keydown to document instead of body)
Specific Aesthetic bugs in IE. Fixed in v0.6
No title bars (and therefore no sorting) in Google Chrome. Fixed in v0.5
Pages have wierd scroll bar issues. Fixed in v0.2
Building Playlists of length >100 Tracks can be slow (and hang the javascript interpreter). Fixed in v0.2 (Playlist.add() unnecessarilly redrawing the playlist table)
Changelog and Planned Releases
Version 1.1 -- Current Version!
Allow users/developers to use worldTunes interface with their own data Resolved (see the For Developers tab)
Handle duplicates in playlists and Library Resolved (Done)
Version 1.0
Notion of "Library" (= Every song you've ever added to a playlist?) Resolved (Done)
Playlist <td>s need to have inner wrappers to ensure they're one line. Resolved (Done)
Basic Shuffle Implementation Resolved (Done)
Shuffle toggle button on bottom bar Resolved (Done)
Version 0.9
Better "Show Current Song" Button
Remove Filter If There Is One Applied Resolved (Filter Removed for Any Tab Change)
Instantly Scroll to It Resolved (Done)
When Page Initially Loads, Should Be Disabled Resolved (Done)
Pop Out Player
Mini Player
Better #message information (ie. total time) Resolved (Done)
"Search, 56 tracks" (also goes with next item) Resolved (Done)
Grey "X" on #search-input RHS Resolved (Done)
Persist Playlist Ordering Resolved (Partial -- will need to be looked at again)
Web Browser Resolved (Done)
Lyrics Engine Resolved (Done)
Auto-Complete On/Off Setting Resolved (Done)
Scroll Bar on Playlist Column Resolved (Done)
Second Tier File Menu Items (i.e. "Themes >") Resolved (Done)
Themes
280slides theme example Resolved (Done)
Dynamic Stylesheet using PHP color variables Resolved (Done)
Persistent Cookie Preference Resolved (Done)
Version 0.9
Detect Focus In a Smarter Way (Allow Up/Down Arrows in Playlists, etc.) Resolved (Done)
Pandora Shuffle Resolved (Done)
Artist Information (Last.FM Integration) Resolved (Done)
Version 0.8
Auto-Complete in search input Resolved (Done)
Allow for resizing the width of left column.
Repeat
Repeat toggle button on bottom bar Resolved (Done)
Control.next() and Control.previous() conditionals Resolved (Done)
Version 0.7
Allow for drag-and-drop tracks between playlists/searches.
Ability to remove playlists/searches from left bar.
Version 0.6
Remove dead mp3 links from search results (properly). Resolved (Fixed Upstream)
Ability to rename playlists. Resolved (Done)
Preferences window Resolved (Done)
File/Edit/View/Etc. menus Resolved (Done)
Dynamic favicon (Firefox-only) Resolved (Done)
Version 0.5
Persistence/Storage Using Cookies
Save/Restore playists from another session. Resolved (Done)
Playist() and Track() serialization/unserialization. Resolved (Done)
Version 0.4
Drag and drop tracks between playlists and search results. Resolved (Done)
Version 0.3
Popup message window thing to display errors, confirm deletion of tracks, etc. Resolved (Done)
Confirm before deleting tracks from playlists. Resolved (Done)
UI for manipulating track data inline. Resolved (Done)
Visualizer Resolved (Done). Visualizer like JuicyDrop?
Version 0.2
Ability to remove tracks from playlists. Resolved (Done)
Remove dead mp3 links from search results. Resolved (Code in place, pushed to v1.*)
Playlist titles need to match iTunes style.
Filters on current playlist. (The way input behaves in iTunes.) Resolved (Done)
Playlist <td>s need to have inner wrappers to ensure they're one line. (Also do "..." thing?) Unresolved (Moved to v0.9)
Incorporate length data into Playlist Resolved (Done)
Track() reorganizatin
Playlist.add((new Track()).track()) should be Playlist.add((new Track())) Resolved (Done)
Should reorganize to displayed and not displayed. Resolved (Won't fix)
Allow for manipulation of track meta-data after being added to playlists. Resolved (Done) (use Track.set({foo: 'bar'});)
Version 0.1
Dynamically create playlists. createPlaylist() wrapper method for easy use. Resolved (Done)
Sort playlists by Title, Artist, Album, and Genre. Resolved (Done)
Seach Seeqpod API and build playlist from JSON results. Resolved (Done)
User arrow keys (and ctrl+arrow keys) to navigate playlis the same way you would in iTunes. Resolved (Done)
Get album art on the fly from Flickr API. Resolved (Done)
Stream mp3s using SoundManager. Resolved (Done)
Fluid layout, iTunes-like UI. Resolved (Done)
This page displays lyrics for the currently playing track, if they are available. This service is provided by LyricsFly.com.
Embedding worldTunes interface with your own Library
-
Simply place an iframe on your webpage with the src as
http://polymath.mit.edu/projects/worldTunes/#/[LIBRARY JSON], where [LIBRARY JSON] is JSON code representing the library of tracks you want the player to be initialized with.
For example, you could use the following for string for [LIBRARY JSON]:
{tracks:[{title:"Intro",artist:"Adam Schwartz",length:"0:19",url:"/www/music/21.mp3"},{title:"Black Part I",artist:"Adam Schwartz",length:"8:51",url:"/www/music/22.mp3"},{title:"Black Part II",artist:"Adam Schwartz",length:"4:26",url:"/www/music/23.mp3"},{title:"White Part I",artist:"Adam Schwartz",length:"16:17",url:"/www/music/24.mp3"},{title:"White Part II",artist:"Adam Schwartz",length:"6:08",url:"/www/music/25.mp3"},{title:"Black & White",artist:"Adam Schwartz",length:"8:02",url:"/www/music/26.mp3"}]}
That would give you the example found
here.
-
Check back in the near future for more examples of what types of things you can do with an embedded worldTunes page.