From e58b48a3162539cb79ff495d6040ca6f53f069d6 Mon Sep 17 00:00:00 2001 From: said belhadj Date: Sat, 26 Jun 2021 01:58:15 +0200 Subject: Add the possibility to listen a song thanks to Audio System library --- Song/Side_To_Side.wav | Bin 0 -> 43422962 bytes files/albums.xml | 2 ++ files/elements.xml | 6 +++--- src/musichub/business/AudioElement.java | 16 ++++++++++++++++ src/musichub/business/MusicHub.java | 13 +++++++++++++ src/musichub/business/Song.java | 11 +++++++++++ src/musichub/main/Main.java | 11 ++++++++++- 7 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 Song/Side_To_Side.wav diff --git a/Song/Side_To_Side.wav b/Song/Side_To_Side.wav new file mode 100644 index 0000000..3c874db Binary files /dev/null and b/Song/Side_To_Side.wav differ diff --git a/files/albums.xml b/files/albums.xml index edfd610..edb2a94 100644 --- a/files/albums.xml +++ b/files/albums.xml @@ -12,6 +12,7 @@ b2ee0ca0-b5e2-4bc9-8fed-7932fb145f2f bbe99998-1be6-4a40-8bf0-6a7fce9087c9 66d277ca-cbc4-471c-a07e-082363375bcc + 44136020-dc80-4522-9b71-2b9aad5e3039 @@ -22,6 +23,7 @@ 1978-01-23 44136020-dc80-4522-9b71-2b9aad5e3039 + 66d277ca-cbc4-471c-a07e-082363375bcc \ No newline at end of file diff --git a/files/elements.xml b/files/elements.xml index 7fefc5f..553f228 100644 --- a/files/elements.xml +++ b/files/elements.xml @@ -9,11 +9,11 @@ pop - I Want to Hold your Hand - The Beatles + Side To Side + Ariana Grande 186 66d277ca-cbc4-471c-a07e-082363375bcc - i_want_to_hold_your_hand.mp3 + Song/Side_To_Side.wav rock diff --git a/src/musichub/business/AudioElement.java b/src/musichub/business/AudioElement.java index e0a686b..9294b49 100644 --- a/src/musichub/business/AudioElement.java +++ b/src/musichub/business/AudioElement.java @@ -3,8 +3,16 @@ package musichub.business; import org.w3c.dom.Document; import org.w3c.dom.Element; +import java.io.File; +import java.io.IOException; import java.util.UUID; +import javax.sound.sampled.AudioInputStream; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.Clip; +import javax.sound.sampled.LineUnavailableException; +import javax.sound.sampled.UnsupportedAudioFileException; + public abstract class AudioElement { protected String title; protected String artist; @@ -84,5 +92,13 @@ public abstract class AudioElement { parentElement.appendChild(contentElement); } + + public void playSong() throws UnsupportedAudioFileException, IOException, LineUnavailableException { + File file = new File(this.content); + AudioInputStream audioStream = AudioSystem.getAudioInputStream(file); + Clip clip = AudioSystem.getClip(); + clip.open(audioStream); + clip.start(); + } } \ No newline at end of file diff --git a/src/musichub/business/MusicHub.java b/src/musichub/business/MusicHub.java index 38e2214..e138d84 100644 --- a/src/musichub/business/MusicHub.java +++ b/src/musichub/business/MusicHub.java @@ -6,8 +6,12 @@ import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import java.io.IOException; import java.util.*; +import javax.sound.sampled.LineUnavailableException; +import javax.sound.sampled.UnsupportedAudioFileException; + class SortByDate implements Comparator { public int compare(Album a1, Album a2) { return a1.getDate().compareTo(a2.getDate()); @@ -326,4 +330,13 @@ public class MusicHub { } xmlHandler.createXMLFile(document, ELEMENTS_FILE_PATH); } + + public void getSong(List Songs, String songTitle) throws NoAlbumFoundException, UnsupportedAudioFileException, IOException, LineUnavailableException { + for (AudioElement s : Songs) { + if (s.getTitle().equalsIgnoreCase(songTitle)) { + s.playSong(); + } + } + + } } \ No newline at end of file diff --git a/src/musichub/business/Song.java b/src/musichub/business/Song.java index 3e9011b..7b90156 100644 --- a/src/musichub/business/Song.java +++ b/src/musichub/business/Song.java @@ -1,5 +1,14 @@ package musichub.business; +import java.io.File; +import java.io.IOException; + +import javax.sound.sampled.AudioInputStream; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.Clip; +import javax.sound.sampled.LineUnavailableException; +import javax.sound.sampled.UnsupportedAudioFileException; + import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -53,4 +62,6 @@ public class Song extends AudioElement { parentElement.appendChild(song); } + + } \ No newline at end of file diff --git a/src/musichub/main/Main.java b/src/musichub/main/Main.java index b72a95b..58080bd 100644 --- a/src/musichub/main/Main.java +++ b/src/musichub/main/Main.java @@ -2,11 +2,17 @@ package musichub.main; import musichub.business.*; +import java.io.IOException; +import java.util.ArrayList; import java.util.Iterator; +import java.util.List; import java.util.Scanner; +import javax.sound.sampled.LineUnavailableException; +import javax.sound.sampled.UnsupportedAudioFileException; + public class Main { - public static void main(String[] args) { + public static void main(String[] args) throws UnsupportedAudioFileException, IOException, LineUnavailableException { MusicHub theHub = new MusicHub(); @@ -55,7 +61,10 @@ public class Main { albumTitle = scan.nextLine(); try { + List songs = theHub.getAlbumSongs(albumTitle); System.out.println(theHub.getAlbumSongs(albumTitle)); + String song = scan.nextLine(); + theHub.getSong(songs, song); } catch (NoAlbumFoundException ex) { System.out.println("No album found with the requested title " + ex.getMessage()); } -- cgit v1.2.3