Friday, June 15, 2012

Project Proposal

Project Name: Lyrics Art Program
Project Members: Sean Owens

Required Tools and Skills:
  • Skills
    • Java
    • JavaScript
    • HTML
    • Image Processing
  • Tools
Motivation: 
     This project was conceived while I was listening to a new album (Graveyard of Empires by Evans Blue). After listening to the album multiple times, I began to notice that the singer used a lot of the same words across multiple songs on the CD. I thought it would be interesting to develop a program that could analyze the lyrics for an album and produce a graphic representation of the general trends either consciously or sub-consciously created by the lyricist. I view this representation as a cloud of words that are sized based on their prevalence in the albums lyrics.
     The second half of this project was sort of an afterthought to the part explained above. After deciding to write a program to analyze album lyrics, I began to think about what interesting things I could do with them. The idea I came up with was a mosaic of the album art created by coloring the lyrics and blocking them together. This process will be explained further in the procedure section. Hopefully, this will create an interesting graphic that has both high enough resolution that the album art can be observed easily and large enough text font that the words can be read if desired.

Explanation of Tools Choice:
     This project will be a software application. The two languages chosen for consideration are C++ and Java. There are two reasons that Java was chosen over C++ for this project. First, this program will require connecting to the internet and html parsing, so Java's java.net package will provide a very robust and simple interface. Second, I have decided that I would like to design this program to run virtually on my website, so converting the local application will simply require adding the Java code to the desired JavaScript code.
     I will be using NetBeans 7.1 for development of this application because it provides excellent support for Java coding as well as web development.


Proposed Procedure:
     This program will require four main steps: obtaining the lyrics, generating the lyrics cloud, generating the album lyric art and converting to a web application.
  1. Obtaining the lyrics:
     To obtain the lyrics, I need to first get the band and album names from the user. With this information, I can search the lyrics database from AZLyrics. At this point I will be able to parse through the album's song list and use the song titles to access their respective lyrics. I will store these lyrics in a data structure (I am currently thinking of using a TreeMap because I can use the words as keys that will be stored alphabetically for free and store the word's count as the value). Once the lyrics are in the data structure, I can move onto the next two steps.
         2.   Generating the "Lyrics Cloud":

         To generate the lyrics cloud, I will begin by opening an html file to write out to and writing out all of the html header lines. Then I will iterate through the data structure containing the lyrics and use the value to determine the text size that the words will be displayed at (I haven't decided how exactly the value will map to text size, but I will start with a simple 1-1 mapping and build from there). Once all of the words have been iterated over, I will write out the closing lines for the html.

         3.   Generating the album lyric art:
      
         To generate the album lyric art I will begin by reading in a pre-saved image file of the album using Java's javax.imageio package. Once the image data is collected, I will determine the necessary size and spacing for creating a properly scaled version of the image using the lyrics. After this, I will determine the area taken up by each character and determine its color by averaging the pixel colors in that region of the input image. I will output this to an html file as well.

         4.   Converting to a web application

         I have not yet decided on a process for the web application yet. I will provide more ideas in future posts.