Sunday, March 16, 2014

A small Outline!

It has been a long time since I've been thinking about creating app for music management, today it has evolved to a platform. To be frank, that was the real reason why I did a project related to music identification during my academics (link here). Today, when I look back, it is messy and totally unusable in it's coding style. It is time to step a head and move one more level. The core idea had changed a lot and my thoughts also. Anyway, I have some thoughts in my head which I could implement with some effort. I don't know much about the feasibility of this. I just want to look into it as a 'hobby'. May be, something which I am doing to learn what is happening. All I got is a 6 months experience in a start up company, but it has changed the way I look into a project. I would like to make this an open source as it would be great to accept suggestions and help from better minds in this world. 

The Idea!!

I wouldn't say that the idea is definitive or already existing. This was not the thing I was thinking about when I began to think about this project. It was like a new music identification system of my own! Yeah!! I dropped the idea when I came to understand that there are a lot of projects (that too open-source) regarding that idea and there was no point in reinventing the wheel. I still got a 1 GB folder containing materials about music identification projects which includes a lot of html files, jar files, zipped files, pdfs, back up of my project  and the most important thing, folders extracted from the above mentioned zipped files! Totally unusable stuffs! Even though I was never able to completely understand what they do, I have heard of some music suggestion/ identification systems which are hugely under-utilized for it's purpose. 

When I am in the office, I used to see some of my co-workers listen to music through youtube. They will plug in their headphones and listen to the music alone. It is costing a lot of bandwidth which is totally unnecessary. The way I see it, there are a lot of people who stream video just for it's audio. I know that there are several applications for that purpose, but none of them came to my attention till I searched for them. Internet is getting popular and cheap and it makes sense if I could just create an application to stream music. What if I can make the artists sell their music through online? Of course, there are applications for that too. I'm just trying to implement it in my way. Right now, I think I can make a difference. What if I can monetize their songs just by advertisements. A lot of songs became popular just because they were there in the youtube. If they can sell it there, why can't we do the same? What if you can just create a playlist with your music collection and upload the missing songs in our server, so that you can earn contributor badge? (Of course, with your responsibility. If someone sues, then I should blame it on you.). That is just how everything works, even in youtube. My idea is to involve some of the local artists to contribute to my project. So that it is completely legal for them to sell their music. A lot of young artists are creating their names just by posting the video in youtube, so I think it is possible to make them to contribute to my server also. 

"I'm thinking about a system which can make use of several music identification system to store information about the song. A system which can help you to generate a playlist of your own or from your friends favorites or a random generation of playlist from your history of listening to music. A system which can help you to monetize an artist's efforts through popularity of his song. A system which can help you to discuss and socialize about music! A system which can help you to report and contribute to music metadata. "

Several music identification system to store information about the song?

Like I said, there are a lot of independent music identification servers in this world, which are open source and deserve to receive information about new songs. What if I can bring all of them under one roof? I'm thinking about the concept of external Ids. If I receive a song, then I can go through all the identification of these 'several music identification systems' to receive information. I do not believe that all of them were reinventing the wheels. There are ups and downs for each of them. For example, EchoPrint does not have anything to do with 'moods', but Echonest's fingerprint can provide a lot of other information about the song. Every musical identification system has it's own ups and downs. What if I can act as a mediator between them? I do not have any knowledge about how successful their efforts are, but it is not that effective in my environment. 

Let me go with a specific identification method, say, EchoPrint, which doesn't have much information about other aspects of song other than it's name and title (as I recall). So, my idea is to use the same file to identify it using echonest and last fm, then I can save their ids which points to my id generated with echoprint (one to many relationship. What can I do? I'm still a fresher!). In one aspect, I can use the information to suggest songs for the user and at the same time, I can contribute back to the system where the information about the song is not there. ie, Last fm may have a field called artist and title and if it is not there in the Echonest, why can't I use it. It is mutually beneficial. YES! Of course I know that they are not going to let me save their music data and there may be wolfs of business world which prevent me from doing it, may be, it will sort out on its own in the mean time. What if I can make use of partial data in Echonest and echoprint together in my system? Multiple functionalities in different system all together in my system? This is an area which require a lot of thoughts and feasibility study and definitely 'changes'! Let me skip it for later. I would like to express my sincere courtesy to opengamma team for the idea of externalIds! At present, I am working with their project.

Playlist of your own or from friend's favorite music?

I do not want to do social networking for this sole purpose. As it has been developed and implemented ( like facebook), I can just use their API to do the social networking part. I honestly do not know about that part, but I believe that I could use my friends information. I have a friend, who used to like most of my selection of songs. When I was in college, we used to talk about songs and suggest and share them to each other (I'm a pathetic singer and he is a nice pretender that he is a singer. His songs were comparatively tolerable!  ;)). Why can't we just port it to online? There are projects which does the same, but I still wonder why it is not that popular among us.  It is possible that I might like their playlist. May be, I could merge it with one of my playlist. I can suggest friends according to the playlist histories as well. The more they use my server, the better should be their suggestions. 

About playlist generation

In most cases, I do not like every songs in an album. So, I would select the songs I like and save them in a folder. So, that folder will be a mix of a lot of songs. The problem I used to face is that I might miss this folder somehow (By formating my mobile or pmp). So, what if I could use the identification process to get back my playlist? Let us say I have a huge folder containing all my songs, by the process of identification, I should be able to identify the songs I like from that huge folder. I am considering a method of finding the songs without metadata as well. 

Let me give an example. Suppose that I have a huge collection of Bryan Adam's songs and I am a big fan of the songs "18 till I die" and "Summer of 69" and these songs are there in my playlist. If I use the function "findTheseSongs()", the system should be able to automatically search and find the songs in the folder and automatically point to the songs which are available in the folder. It is like checking a list of songs in the folder to create a playlist. What if i could find all the mild songs in a folder? What if I could find all the pop songs in a folder? Well, this is a client portion, what if I can do it in a server?

Save a playlist and stream songs in the playlist using filters. If you happened to find an interesting playlist in your friend's profile, you may just merge it with one of your playlist and play. I have a lot of implementation ideas in this section like getting previous state of each playlist and all. 

My priority would be to reduce bandwidth usage and play according to the user's preference. Here in India, people used to save mp3 files in their system. In the move, it is the best method of having a playlist. May be I should consider streaming also. Protection of files is also considered as it is illegal to share copyrighted material around. It should be sorted out.

Finding songs from the playlist history is another aspect in consideration.

Monetizing from popularity?

As I have mentioned, I do not have the perfect or clear idea of how I am going to implement this thing. All I got is that there are some ideas which could be considered and rest can be kicked out. I'm thinking about cross-platform applications for this project, and what if I could use some statistics to help for suggestions. Now-a-days, it is not that hard to find location of a  device. At least, I could use an IP address. I could use this location to find popular songs in user's region. I can provide the information to the artist, to help with his popularity analysis. I do not know the amount of money which could be monetized through advertisements. Here in India, songs are a good publicity for the films as there will be a lot of songs in a movie. So, may be I could use it for that purpose also. I do not know how far it is going to be successful, but, may be it will work out. 

Reporting and contributing to music metadata

The users may contribute to musical metadata. If a song happened to have no metadata in any server, may be the other users(privileged) can contribute to the data about the song. If more and more people hear this song, they could either accept or report the metadata which is there with the song. I know that there will be a lot of issues, but something is better than nothing. 


This is what I got right now and as a part of starting up the project, I am thinking about creating a music player in android which can use echoprint for musical fingerprinting. 

Sincerely,

Raghu