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();
}
}
Komentar
Posting Komentar