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

Popular posts from this blog

Evaluasi Tengah Semester Pemrograman Berbasis Objek (PBO) A 2024

Tugas Pertemuan 7 Pemrograman Berbasis Objek (PBO) A 2024

Evaluasi Akhir Semester Pemrograman Berbasis Objek (PBO) A 2024