5,666,132 members and growing! (17,447 online)
Email Password   helpLost your password?
Languages » C# » General     Beginner License: The Code Project Open License (CPOL)

MP3-CMS Project

By thund3rstruck

Update to the MP3-CMS Project
VB, Javascript, XML, CSS, SQL, HTML, C# 2.0, C#, Windows, .NET, .NET 2.0VS2005, Visual Studio, DBA, Dev, QA

Posted: 30 Mar 2007
Updated: 26 Sep 2008
Views: 27,483
Bookmarked: 46 times
Announcements
Loading...



Search    
Advanced Search
Sitemap
11 votes for this Article.
Popularity: 3.10 Rating: 2.97 out of 5
3 votes, 27.3%
1
1 vote, 9.1%
2
2 votes, 18.2%
3
3 votes, 27.3%
4
2 votes, 18.2%
5
Note: This is an unedited contribution. If this article is inappropriate, needs attention or copies someone else's work without reference then please Report This Article

MP3-CMS Introduction

Even in 2008 managing digital music libraries remains an enduring problem in a distributed environment. Most of us have pcs or pc appliances in just about every room in the house. Making sure all of these devices all have access to the family's digital music library seems as simple as creating a file server. However as the features included in these standalone players increase, so do application footprints. Each application needs to expend time and cycles scanning the file server for music, updating it's database, and then there's the problem of synchronization or having to make sure that all these applications have the newest music in their databases. Ultimately it becomes quite a administrative task. What happens when you want to experiment with new platforms such as Macintosh, Linux, or UNIX? You have to learn new programs that all have different features. This type of thing is what locks a lot of people into specific platforms.

What is needed is a single interface, with common features that runs entirely from a web server. It needs to be intelligent. Specifically it should allow consumers to create playlists, rate tracks, comment on albums, generate smart playlists based on criteria such as star ratings, genres, newest tracks, and most importantly it should remember which tracks have been played and how often. Based on such analysis the system should recommend music and this system should be self-contained with as little administration as possible. If the users add or delete music from the server, the system should update itself appropriately.

The Mission

Quite simply, the goal of the project is to create the very best Web MP3 player there is. The users should not need to be necessarily technically saavy and the only thing we should require of the user is a Windows IIS server and some music. We'd like the solution to be database agnostic but more importantly we do NOT want to require a commercial database such as MS-SQL. The database should exist to persist our business logic, not the other way around.

Product Installation

The installation wiki steps through the installation. The steps typically consist of the following actions:
    • Ensure your directory heirachy follows a convention where albums are in their own folder
    • Use a tagging program to ensure that your ID3Tags are set correctly
    • Ensure your album art is either embedded in each track or it exists as a file called folder.jpg in the album's folder
    • Edit the configuration files to point to your server and SQLite data directory
    • Configure the IIS Virtual Directory and Application Pool
    • Configure Access Control Lists (ACL) for your music directory to allow the site access to it

Product Features

  • FileSystemWatcher - A DataManagementHttpModule controls the FileSystemWatcher which monitors the watched directory for changes. It removes items from the database when they're deleted and adds new records as new files are added into the system.
  • User Data - Entities such as UserAlbumData and UserTrackData allow for user defined data like Album and track star ratings as well as user comments and fan art
  • Fan Art - Using an aspx script, GetFanArt.aspx, the system aggregates the album directory for .jpg files and displays them as fanart for the artist. Users need only copy over images to the artist directory to get them into the site.
  • Track Lyrics - Using LyricWiki, the system will fetch lyrics for your tracks.
  • Album Reviews - using a very primitive web scraper users can attempt to auto-fetch album reviews from the web
  • Smart Playlists - As well as traditional playlists, the system supports various smart playlists such as songs by multiple genres, most played, newest, random, etc, etc.
  • SQLite Engine - with release 1.5 and up, an MSSQL server is no longer needed. The system uses the persistence engine NHibernate with SQLite for data storage.
  • iTunes Music Charts - the site aggregates various iTunes feeds so you can reference whats popular compared to what you have.
  • AudioScrobbler Web Services - Though we have not yet integrated posting to audioscrobbler, you can get details about artists from the AS feeds

Basic Usage

A formal users manual has not yet been established but you can see from the following matrix the basic user interactions with the application

Home Browse Artist
Browse Album Browse Genre
Playlists Search
Get Artist Get Album
Get Track  
 

 

The Solution Components

Credits

Code Resources

The Domain Model
uml-core

Scanner & Queue Processor
uml-scanner

Developer Install Instructions

  1. Download the Source Code
  2. Copy the sample_web.config file and paste it into the working directory as Web.Config
  3. Create a new folder in ~/config called my_settings
  4. Copy the configuration files in ~/config/default to ~/config/my_settings
  5. Edit the AppSettings.config file. Set a scan path & turn the scanner on or off
  6. Edit the NHibernate.config file. In the SQLite connection.connection_string property.

  7. NOTE: This property must point to the fully qaulified path to your App_Data folder
  8. Edit the web.config file and replace all instances of /config/default to /config/my_settings


Namespaces

  • baileysoft.mp3: The root namespace (scanner, etc)
  • baileysoft.mp3.audioscrobbler: AudioScrobbler Handlers
  • baileysoft.mp3.Core.Data: NHibernate Handlers
  • baileysoft.mp3.Core.Domain: Nibernate O/R PICO classes
  • baileysoft.Utils.Web: Scrapers, Rss

Moving Forward

Due to personal obligations and lack of developer involvement the product is in danger of going extinct but I'm doing as much as I can by myself at this point. I have just about every feature I want and I'd say my original vision is about 90% completed. One of the last features I want are alternate skins and I'm researching an MVC model like MonoRail to potentially provide that capablity. In the meantime, I've worked out some test skins; one of which you can see below:

History

  • Cleaned article
  • Dumped the original article; updated for v1.5.0.3
  • Updated article 03/07: entire code base re-written. Article depreciated
  • Originally submitted 03-30-2007
  • Online Demo is now up 04-01-2007
  • Fixed broken links
  • Updated article 06-14-2007

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

thund3rstruck


I'm a typical 29 year old generation X guy that likes video games, NFL football, and comic style art. I have an insatiable passion for programming and doing what ever it takes to become a better programmer.
Occupation: Software Developer
Location: United States United States

Other popular C# articles:

Article Top
Sign Up to vote for this article
You must Sign In to use this message board.
FAQ FAQ Noise ToleranceSearch Search Messages 
 Layout  Per page   
 Msgs 1 to 25 of 32 (Total in Forum: 32) (Refresh)FirstPrevNext
Generalsource treemembermjmeans18:26 18 Nov '08  
GeneralRe: source treemembermjmeans18:59 18 Nov '08  
GeneralRe: source treemembermjmeans19:09 18 Nov '08  
GeneralRe: source treemembermjmeans19:19 18 Nov '08  
GeneralRe: source treemembermjmeans19:24 18 Nov '08  
GeneralRe: source tree - almost runningmembermjmeans20:13 18 Nov '08  
GeneralRe: source tree - GOT IT!membermjmeans21:11 18 Nov '08  
GeneralRe: source tree - GOT IT!memberthund3rstruck4:23 19 Nov '08  
GeneralRe: source tree - GOT IT!membermjmeans21:06 19 Nov '08  
GeneralRe: source tree - GOT IT!memberthund3rstruck4:48 20 Nov '08  
RantRe: source tree - GOT IT!memberCodeMasterMP8:22 20 Nov '08  
Generalmanage.aspx missingmembermjmeans22:03 17 Nov '08  
GeneralRe: manage.aspx missingmemberthund3rstruck5:04 18 Nov '08  
GeneralRe: manage.aspx missingmembermjmeans14:34 18 Nov '08  
GeneralRe: manage.aspx missingmemberthund3rstruck16:51 18 Nov '08  
GeneralFileSystemWatchermemberbinaryDigit@@21:50 26 Sep '08  
GeneralRe: FileSystemWatchermemberthund3rstruck19:03 27 Sep '08  
QuestionSystem.Data.SQLite.SQLiteException: Unable to open the database filemembermshehadeh23:26 27 Mar '08  
GeneralRe: System.Data.SQLite.SQLiteException: Unable to open the database filememberthund3rstruck4:32 28 Mar '08  
GeneralMP3-CMS v1.5.0memberthund3rstruck15:57 7 Mar '08  
GeneralSong is not playingmemberqumer1013:59 5 Apr '07  
GeneralRe: Song is not playingmemberthund3rstruck4:23 5 Apr '07  
GeneralRe: Song is not playingmemberqumer1015:42 5 Apr '07  
GeneralRe: Song is not playingmemberthund3rstruck6:16 5 Apr '07  
GeneralUnable to run Scannermemberqumer1012:57 5 Apr '07  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 26 Sep 2008
Editor:
Copyright 2007 by thund3rstruck
Everything else Copyright © CodeProject, 1999-2008
Web11 | Advertise on the Code Project