PROJECT: JxMusic


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

  • QUERY is a string to be searched from the names of the playlists, which doesn’t need to be an exact match.

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

  • INDEX refers to the playlist’s index in the playlist panel.

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:

playlistNewCommandSequenceDiagram

The following activity diagram summarizes what happens when a user executes a new command:

PlaylistNewActivityDiagram

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