Overview
JxMusic is a desktop music player application developed as a school project for the learning of Software Engineering principles. The project is built upon AddressBook(Level 4). The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.
Summary of contributions:
-
Major enhancement: Playlist Management
-
What it does: Allows the ability to add to, delete from, and search for playlists within the music library.
-
Justification: Allows the user to organise their music collection to suit their listening preferences. Users can sort their music by creating playlist based on genre, likeability, age etc. The user can easily search through large collections of music via the search command. When the playlist is no longer used or needed, one can simply delete.
-
Highlights: Playlist names can allow not just single words, but phases. Searching for a playlist has been made easier by utilising the ability to find matching sub-strings of the playlist names. Can create a new playlist while simultaneously adding tracks to the playlist
-
-
Minor enhancement: Added the ability to pause a track that is currently playing
-
Code contributed: *Code contributed
Other contributions:
Project management:
-
Issue Tracker management:
-
Ensure there are no coding standard violations
-
Implemented corresponding test cases to cover newly-implemented Playlist management feature.
Enhancements to existing features:
-
Refactored code throughout the Logic component
Community:
-
PRs reviewed (with non-trivial review comments)
-
Reported bugs and suggestions for other teams in the class
Contributions to the User Guide
Given below are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users. |
Introduction
The JxMusic is a music platform that lets you add to, organize and play your digital audio collection on your computer. The player is optimized for those who prefer to work with a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI).
Searching for a playlist : playlist search
Searches for playlists by names.
Format: playlist search QUERY
Examples:
-
playlist search Fav
Searches for playlists that has Fav in their names.
Deleting a playlist : playlist del
Removes an existing playlist from the library.
Format: playlist del INDEX
Examples:
-
playlist del 1
Deletes the first playlist in the panel if it exists.
Pausing a playing track : pause
Pauses a playing track.
Format: pause
Examples:
-
play t/Some Song
pause
The track is paused.
Contributions to the Developer Guide
Given below are sections I contributed to the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project. |
Playlist Management feature
Current Implementation
Playlist new - Creates a new playlist which is added to the library
Playlist del - Deletes the playlist indexed displayed on the playlist panel from the library
Playlist search - Searches through the library and displays the playlist/s that match the desired String/ sub-String
Playlist list - Lists all playlists within the library
The PlaylistNewCommand creates a new Playlist that is added to the Library object if it does not exists. It’s command phrase pattern is playlist new p/playlist [t/track]…
where playlist
denotes the name of the playlist and track
denotes the name of the tracks.
Additionally, it implements the following operations:
Pattern:
playlist new p/playlist [t/track]…
Example:
playlist new p/Favourites t/Somesong t/Othersong
If no tracks are specified, an empty playlist will be created. Otherwise, the list of tracks will be automatically added into the playlist.
The PlaylistNewCommandParser handles parsing of the user input, specifically for the mandatory playlist name as well as the optional track list.
If there exists a playlist in the library with the same name as the new playlist, it will be rejected from being added into the library as playlist is identified by its name.
The following sequence diagram shows how a new playlist is added:
The following activity diagram summarizes what happens when a user executes a new command:
Design Considerations
Aspect: How tracks are added to a new playlist
-
Alternative 1 (current choice): When adding tracks to a new playlist - Identify the tracks by full track name.
-
Pros: Easy to implement and intuitive for the user.
-
Cons: Tracks with long name could take a long time to type.
-
-
Alternative 2: Identify the track via index within the track List panel.
-
Pros: Can be much faster to add tracks
-
Cons: If panel List is large, it could take a long time to find track
-
Aspect: Data structure to support adding a Playlist
-
Alternative 1 (current choice): New playlists are added to the bottom of the Library.
-
Pros: Keeps the most recent / relevant playlists at the highest playlist index number.
-
Cons: Hard to find playlist when Library contains a large amount of playlists.
-
-
Alternative 2: Playlists are displayed in alphabetical order
-
Pros: Easier to find desired playlist within large list.
-
Cons: Harder to find recently added playlists
-
-
Alternative 3: New playlists display at the top of the playlist panel.
-
Pros: Keeps the most recent / relevant playlists at the top and easily accessible.
-
Cons: Has larger compute time cost when list is large == User Stories
-
Priorities: High (must have) - * * *
, Medium (nice to have) - * *
, Low (unlikely to have) - *
Priority | As a … | I want to … | So that I can…. |
---|---|---|---|
|
user |
Add a track |
Save them to my library |
|
user |
Delete a track |
Refine my library |
|
user with multiple playlists |
Manage playlists |
Maintain different playlists |
|
user with multiple tracks |
Manage tracks in the playlist |
Customise playlists |
|
user |
play tracks |
Listen to them |
|
user |
Pause a track |
Stop when I need to |
|
user |
Continue from pause |
Continue from set position with current track |
|
user |
Seek a track |
Skip parts of a track |
|
user |
Skip a track |
Iterate through my playlist and play a track I want to hear |
|
user |
Control volume |
Listen comfortably |
|
user |
Search for a track |
Find and a particular track with ease |
|
user |
Repeat a playlist |
Continue listening when playlist has finished |
|
user |
Shuffle a playlist |
Listen to playlists in different order |
|
user |
See usage instructions |
Refer to instructions when I need help |