Design and implement a Karaoke application which allows searching a large number of songs by title and adding songs to a ‘play-list’. When playing it should play the video of the songs in the play-list in order. You should consider the most appropriate data structure(s) and algorithm(s) to implement these features. Your design, including analysis of the time complexity of your solution, will be presented as a written report.
Code must compile and run on the Linux lab setup
A company are launching a new karaoke business and they require software which allows customers to search for songs and add them to the play-list.
At initial release, it is expected that there will be several million songs, and the number will continue to grow with time. The list of songs (and karaoke videos) will be sourced separately, so you do not need to focus on creating these (a sample song list and single video file will be provided for development and testing). This data should not be hardcoded in your program and it should be possible to load another file instead of this sample file without recompilation (e.g. using a command line argument). The song list file will be formatted as one song per line, and each line will be a with the format that should be loaded into the program. The file will have details of one song per line, and will include
• song title
• playing time
• video file name
You can assume that no two songs have the same title. The application should have an intuitive user interface which allows the user to search for a song by title and add songs to the end of the play-list. The user should be able to play, pause, stop and skip the songs in the play-list. When a song is played it should be removed from the play-list. When the song is playing its video should be displayed in the GUI window. The most common functions are
• search song in library (by title)
• add song to play-list
• play songs in play-list (in order)
• add songs to library
therefore, performance should be taken into consideration. It should also be possible to delete a song from the play-list, but as users normally simply skip the song when it starts playing, this will be used far less often, so performance is not as important.
Song class Implement a class to hold the details of a song, each line from the data list will be used to initialise an object of type ‘Song’.
Design and Implement Logic Select appropriate data structures and design the class(es) and methods to use these data structures to achieve the required functionality:
• add song(s) to song library
• search song library for a song by title
• add song to end of play-list
• play next song in (and remove from) play-list
• retrieve songs in play-list (to view)
• delete song from play-list
When selecting data structure(s) to use in your solution, you should consider the time complexity, especially the most frequently used functionality. Analysis of the time complexity should be included in your report with your design. You should then implement your design and test it with the sample data
Graphic user interface
Design and implement a GUI using JavaFX. The GUI should make use of the class(es) you implemented to enable required functionality of the system. The GUI will have an intuitive user interface to execute the functionality previously mentioned. It will also display the video when playing, along with necessary controls to play, pause and skip songs.
– pseudo code
– analysis of time complexity of solution
– GUI mock-ups/wireframe diagrams (not screen shots of final application)
– description of the testing approach(es) used
– evidence of testing, e.g. testing result tables
– summary of work done
– limitations of your approach and critical reflection of your work
– how would you approach a similar project differently in future
• Appendices – Code listings of the class(es)