Tugas Pertemuan 5 Pemrograman Berbasis Objek (PBO) A 2024
Nama : Amadeo Yesa
NRP : 5025231160
Kelas : A
Tahun : 2024
Pada pertemuan 5, diberikan studi kasus Music Organizer. Implementasi Music Organizer menggunakan 4 class, yaitu Class MusicOrganizer sebagai class utama; Class MusicPlayer yang berfungsi sebagai pemutar musik; Class Track sebagai struktur data yang menyimpan data tiap lagu; Class TrackReader yang berfungsi membaca daftar lagu dari suatu folder.
Class MusicOrganizer
package music;
import track.*;
import java.util.ArrayList;
public class MusicOrganizer {
private ArrayList tracks;
private MusicPlayer player;
private TrackReader reader;
public MusicOrganizer(){
tracks = new ArrayList();
player = new MusicPlayer();
reader = new TrackReader();
readLibrary("../music_files");
System.out.println("Music library loaded. " + getNumberOfTracks() + " tracks.");
System.out.println();
}
public void addTrack(Track track){
tracks.add(track);
}
public int getNumberOfTracks(){
return tracks.size();
}
public void searchTrack(int index){
if(index >= 0 && index < tracks.size()){
Track result = tracks.get(index);
System.out.println(result.getDisplayString());
}
}
public void listAllTracks(){
if(tracks.size() > 0){
System.out.println("Tracks List:");
int index = 0;
while(index < tracks.size()){
Track track = tracks.get(index);
index++;
System.out.println(index + ". " + track.getDisplayString());
}
}else{
System.out.println("Tracks List is empty.");
}
System.out.println("");
}
public void removeTrack(int index){
if(index >= 0 && index < tracks.size()){
tracks.remove(index);
}
}
public void playTrack(int index){
int real_index = index - 1;
if(indexValid(real_index)){
Track track = tracks.get(real_index);
player.startPlaying(track.getFilename());
System.out.println("Now playing: " + track.getDisplayString());
}
System.out.println("");
}
public void stopTrack(){
player.stopPlaying();
System.out.println("");
}
public void readLibrary(String folderName){
tracks = reader.readTracks(folderName);
}
public boolean indexValid(int index){
return index >= 0 && index < tracks.size();
}
}
Attribute:- tracks: sebagai daftar semua lagu yang berupa Array berisi Class Track.
- player: sebagai pemutar lagu yang berupa Class MusicPlayer.
- reader: sebagai pembaca daftar lagu yang berupa Class TrackReader.
Method:
- Constructor: menginisialisasi tiap-tiap atribut dan juga membaca folder daftar lagu.
- addTrack(Track track): menambahkan sebuah lagu dalam atribut tracks.
- getNumberOfTracks(): mengembalikan jumlah lagu dalam atribut tracks.
- searchTrack(int index): mencari lagu dengan index.
- listAllTracks(): mencetak semua lagu yang ada dalam atribut tracks.
- removeTrack(int index): menghapus lagu dengan index.
- playTrack(int index): memainkan lagu dengan index.
- stopTrack(): menghentikan lagu.
- readLibrary(String folderName): membaca folder daftar lagu.
- indexValid(int index): memastikan index yang dimasukkan valid.
Class MusicPlayer
package music;
public class MusicPlayer {
private boolean isPlaying;
public MusicPlayer(){
isPlaying = false;
}
public void startPlaying(String filename){
System.out.println("File: " + filename + " is now playing.");
isPlaying = true;
}
public void stopPlaying(){
if(isPlaying){
System.out.println("Track stopped.");
isPlaying = false;
}else{
System.out.println("No track is currently playing.");
}
}
}Attribute:- isPlaying: status apakah pemutar musik sedang memutar musik atau tidak.
Method:
- Constructor: menginisialisasi atribut isPlaying sebagai false.
- startPlaying(String filename): memainkan lagu dengan nama file filename.
- stopPlaying(): menghentikan lagu.
Class Track
package track;
public class Track {
private String filename;
private String artist;
private String title;
public Track(String filename, String artist, String title){
this.filename = filename;
this.artist = artist;
this.title = title;
}
public String getFilename(){
return filename;
}
public String getArtist(){
return artist;
}
public String getTitle(){
return title;
}
public String getDisplayString(){
return artist + " - " + title;
}
}
Attribute:- filename: nama file.
- artist: nama musisi.
- title: judul lagu.
Method:
- Constructor: menginisialisasi atribut filename, artist, dan title sesuai argumen yang dimasukkan.
- getFilename(): mengembalikan nama file.
- getArtist(): mengembalikan nama musisi.
- getTitle(): mengembalikan judul lagu.
- getDisplayString(): mengembalikan String dengan format.
Class TrackReader
package track;
import java.util.ArrayList;
import java.io.File;
public class TrackReader {
public ArrayList readTracks(String folderName){
ArrayList tracks = new ArrayList<>();
File folder = new File(folderName);
if (!folder.exists() || !folder.isDirectory()) {
System.out.println("Invalid folder path!");
return tracks;
}
File[] files = folder.listFiles((dir, name) -> name.endsWith(".mp3"));
if (files == null || files.length == 0) {
System.out.println("No mp3 files found in the folder.");
return tracks;
}
for(File file : files){
String fileNameFull = file.getName();
String fileName = fileNameFull.substring(0, fileNameFull.lastIndexOf(".mp3"));
String[] parts = fileName.split("-");
if (parts.length == 2) {
String title = parts[0].trim();
String artist = parts[1].trim();
tracks.add(new Track(fileName, artist, title));
} else {
System.out.println("File name format incorrect for: " + fileName);
}
}
return tracks;
}
}
Class ini membaca folder yang berisi daftar lagu dan mengembalikan dalam bentuk Array dari Class Track.Main
import music.MusicOrganizer;
public class Main {
public static void main(String[] args) {
MusicOrganizer org = new MusicOrganizer();
org.listAllTracks();
org.playTrack(1);
org.playTrack(3);
org.stopTrack();
org.playTrack(2);
org.stopTrack();
}
}
Main yang menjalankan keseluruhan program Music Organizer.Hasil
Source Code:

Comments
Post a Comment