Implementasi Music Organizer

Nama: Azka Rizqullah Ramadhani

NRP: 5025231148

Kelas: Pemrograman Berbasis Object (A)


Deskripsi Tugas

Membuat Music Organizer yang dapat memainkan lagu, menghapus list lagu, dan menambahkan list lagu dengan konsep Pemrograman Berbasis Object.

Track

public class Track {
private String title;
private String artist;
private int time;

public Track(String title,String artist,int time){
this.title = title;
this.artist = artist;
this.time = time;
}

String getTitle(){
return title;
}

String getArtist(){
return artist;
}

public int getTime() {
return time;
}

private String formatTime() {
int minutes = time / 60;
int seconds = time % 60;
return String.format("%d:%02d", minutes, seconds);
}

public String getDetail() {
return "Song\t: " + title + "\n" +
"Artist\t: " + artist + "\n" +
"Duration\t: " + formatTime();
}

}
Deskripsi Kelas
Kelas Track digunakan untuk merepresentasikan informasi dasar tentang sebuah lagu, termasuk judul, artis, dan durasi.

Atribut Kelas
  • title: Judul lagu (tipe String).
  • artist: Nama artis (tipe String).
  • time: Durasi lagu dalam detik (tipe int).
Konstruktor
  • public Track(String title, String artist, int time): Menginisialisasi objek Track dengan judul, nama artis, dan durasi yang diberikan.
  • Metode
  • String getTitle(): Mengembalikan judul lagu.
  • String getArtist(): Mengembalikan nama artis.
  • public int getTime(): Mengembalikan durasi lagu dalam detik.
  • private String formatTime(): Mengubah durasi dari detik ke format menit dan detik.
  • public String getDetail(): Mengembalikan informasi lengkap tentang lagu

MusicPlayer

public class MusicPlayer {
private boolean isPlaying;

public MusicPlayer() {
this.isPlaying = false;
}

// Method to play a track
public void play(Track track) {
if (isPlaying) {
System.out.println("\nAnother song is playing now\n");
} else {
isPlaying = true; // Set isPlaying to true before starting the thread

new Thread(() -> {
int duration = track.getTime(); // Get the track duration
try {
for (int i = 0; i < duration; i++) {
System.out.println("Playing: " + track.getTitle() + " - " + (i + 1) + "s");
Thread.sleep(1000); // Simulate the duration of the track
}
System.out.println("Track finished: " + track.getTitle());
} catch (InterruptedException e) {
System.out.println("Playback was interrupted.");
} finally {
stop(); // Call stop() to reset the playing status
}
}).start();
}
}

public void stop() {
if (isPlaying) {
System.out.println("Stopping the track....");
isPlaying = false;
} else {
System.out.println("No track is currently playing.");
}
}
}
Deskripsi Kelas
Kelas MusicPlayer bertanggung jawab untuk memutar lagu-lagu, mengelola status pemutaran, dan menghentikan lagu saat diminta.

Atribut Kelas
  • isPlaying: Status apakah lagu sedang diputar (tipe boolean).
  • Konstruktor
  • public MusicPlayer(): Menginisialisasi MusicPlayer dengan status pemutaran false.
  • Metode
  • public void play(Track track): Memulai pemutaran lagu. Jika sudah ada lagu yang diputar, memberi tahu pengguna.
  • public void stop(): Menghentikan pemutaran lagu jika ada lagu yang sedang diputar.

MusicOrganizer

import java.util.ArrayList;

public class MusicOrganizer {
private ArrayList<Track> files;
private MusicPlayer player;

public MusicOrganizer(){
files = new ArrayList<>();
player = new MusicPlayer();
}

public void startPlaying(int index){
if (index >= 0 && index < files.size()) {
Track filename = files.get(index);
player.play(filename);
} else {
System.out.println("Index out of bounds.");
}
}

public void ListAllTrack(){
for (Track file : files) {
System.out.println("################");
System.out.println(file.getDetail());
System.out.println("################\n");
}
}

public void addTrack(Track track){
files.add(track);
}

public int searchTrack(String trackName){
for (int i=-0;i< files.size();i++) {
if (files.get(i).getTitle().equals(trackName)) {
System.out.println("Track found: " + files.get(i).getTitle());
return i;
}
}
System.out.println("Track not found.");
return -1;
}

public void removeTrack(int index){
if(index>=0 && index<files.size()){
System.out.println("Track " + files.get(index).getTitle() + " Already Removed");
files.remove(index);
}else{
System.out.println("Out of bound.");
}
}

public void removeTrack(Track track){
int indexFind =searchTrack(track.getTitle());
if(indexFind==-1){
System.out.println("Track name not in playlist.");
}else{
files.remove(indexFind);
System.out.println("Track " + track.getTitle() + " Already Removed");
}
}
}
Deskripsi Kelas
Kelas MusicOrganizer bertindak sebagai pengelola koleksi lagu. Ia dapat menambahkan, menghapus, dan memutar lagu dari daftar.

Atribut Kelas
  • ArrayList<Track> files: Koleksi lagu-lagu yang dikelola (tipe ArrayList<Track>).
  • MusicPlayer player: Objek MusicPlayer untuk memutar lagu.
  • Konstruktor
  • public MusicOrganizer(): Menginisialisasi koleksi lagu dan objek MusicPlayer.
  • Metode
  • public void startPlaying(int index): Memulai pemutaran lagu berdasarkan indeks.
  • public void ListAllTrack(): Menampilkan semua lagu dalam koleksi.
  • public void addTrack(Track track): Menambahkan lagu ke dalam koleksi.
  • public int searchTrack(String trackName): Mencari lagu berdasarkan judul dan mengembalikan indeksnya.
  • public void removeTrack(int index): Menghapus lagu dari koleksi berdasarkan indeks.
  • public void removeTrack(Track track): Menghapus lagu berdasarkan objek Track.

Main

Fungsi main adalah titik masuk dari program Java. Di sinilah semua logika utama aplikasi pemutar musik dieksekusi.

public class Main {
public static void main(String[] args) {
MusicOrganizer musicOrganizer = new MusicOrganizer();

// Create two different Track objects
Track track1 = new Track("Aku Mau Makan", "Siti Lololo", 2);
Track track2 = new Track("Lagu Kedua", "Penyanyi Kedua", 3);
Track track3 = new Track("Lagu Ke3", "Penyanyi Ke3", 3);


// Add tracks to the MusicOrganizer
musicOrganizer.addTrack(track1);
musicOrganizer.addTrack(track2);
musicOrganizer.addTrack(track3);

// List all tracks to verify they were added
musicOrganizer.ListAllTrack();

musicOrganizer.startPlaying(0);
musicOrganizer.startPlaying(1);
musicOrganizer.startPlaying(2);

try {
Thread.sleep(8000);
}
catch(InterruptedException e) {
e.printStackTrace();
}

musicOrganizer.removeTrack(1);
musicOrganizer.removeTrack(track3);

musicOrganizer.ListAllTrack();

}
}



Hasil

Komentar

Postingan populer dari blog ini

Implementasi Unit Test

Implementasi Support System

Tugas Ticket Machine