Skip to content

TaToTanWeb/swing-mp3-player

Repository files navigation

swing-mp3-player

overview

Table of contents

Analisi dei requisiti

Il sistema software dovrà fornire all’utente la possibilità di ascoltare i file musicali contenuti all’interno del proprio computer, tramite una apposita interfaccia grafica suddivisa nelle seguenti pagine.

Libreria

Attraverso la pagina della libreria si potrà visualizzare la lista di tracce di cui il sistema ha precedentemente memorizzato il percorso file. Per ciascuna traccia deve essere visualizzato un pannello contentente il suo titolo, il nome dell’artista e un pulsante che ne avvii la riproduzione.
Se l’utente non ha ancora aggiunto nessuna traccia, dovrà essere visualizzato un testo che invita a farlo.

Sorgenti

Nella pagina sorgenti sarà possibile visualizzare la lista dei percorsi delle cartelle in cui il sistema cerca i file audio: questa lista potrà essere modificata aggiungendo una cartella o rimuovendone una. L'aggiunta di una cartella dovrà portare alla sua scansione. La lista dovrà essere memorizzata in un apposito database locale, da cui, ad ogni avvio del sistema, dovrà essere letta. Il software dovrà poi effettuare nuovamente la scansione di ciascuna cartella per rilevare eventuali nuovi brani. La scansione consiste nello scorrimento di tutti i file contenuti nella cartella e nelle varie sotto-cartelle, e nella visualizzazione della lista di tracce ottenute nella sezione Libreria. Almeno il formato audio MP3 dovrà essere supportato.

Riproduttore

La scheda del riproduttore fornirà all’utente la possibilità di controllare l’audio attualmente in riproduzione: il sistema dovrà mostrare l’immagine di copertina del brano, oltre al suo titolo e a quello dell’artista che lo interpreta. Durante la riproduzione dovranno inoltre essere disponibili un pulsante per mettere in pausa, uno per riprendere, uno per andare alla canzone successiva e uno per andare alla canzone precedente. Il sistema dovrà inoltre tenere traccia della coda di riproduzione, e riprodurre la traccia successiva nella lista quando quella attualmente in riproduzione sarà terminata.
Se l’utente non ha ancora avviato un brano, la schermata del riproduttore mostrerà un’immagine e un testo predefiniti.

Progettazione

Segue uno schema scheletro del progetto. La classe Main sarà l'ingresso del programma e si occuperà di creare la finestra (JFrame) e di istanziare e contenere le tre pagine principali: Library, Sources e Player.

schema-app

In particolare, Main dovrà essere una sottoclasse di TabsPanel, che si occupa di istanziare il JTabbedPane e di aggiungervi i componenti, che devono implementare l'interfaccia Tab, che fornisce informazioni essenziali per l'utilizzo nel JTabbedPane come il nome del tab e l'icona.

schema-tabs



Database

Il database verrà gestito dalla classe Singleton Data utilizzando SQLite. Si terrà traccia dei brani all'interno del programma e non delle cartelle, per avere subito le loro informazioni a disposizione e non dover effettuare la rilettura dei tag MP3. L'unica tabella esistente dovrà essere simile a quella proposta di seguito.

data-sql

Sarà disponibile internamente una lista di tracce con lo stesso contenuto del database (localTracksCache) per velocizzare il tempo di lettura e non doversi preoccupare del numero di chiamate effettuate.
Le classi interessate potranno inoltre iscriversi per ricevere notifiche ogni volta che il database viene modificato. Ciascuna notifica consisterà in un oggetto della classe TracklistUpdate, in grado di portare informazioni sulla traccia in questione e se questa sia stata aggiunta o rimossa.
Un brano verrà rappresentato dalla classe Track, e conterrà una serie di informazioni quali titolo, artista, album e percorso file.

schema-data

Libreria

La pagina della libreria mostrerà la lista di tracce al momento disponibili per la riproduzione. Tale componente sarà internamente suddiviso in tre parti:

  • TracklistController, utilizzata dal client (in questo caso Library). Istanzia le altre due parti ed espone alcuni dei loro metodi utili all'esterno
  • TracklistModel racchiude i meccanismi interni della classe, come la lista di tracce e metodi per aggiungerne di nuove o rimuoverne di esistenti, o il metodo startPlayback per avviare la riproduzione di un brano. Riceve aggiornamenti sullo stato del database dalla classe Data, e li utilizza per tenere aggiornati i dati interni
  • TracklistView si occupa di mostrare a schermo le tracce in memoria, ricevendo aggiornamenti in tempo reale dal Model.

schema-tracklist

Sorgenti

La pagina delle sorgenti mostrerà la lista di cartelle scansionate e due pulsanti per aggiungere o rimuovere cartelle. Anche questo sarà suddiviso in tre:

  • LocalController, utilizzata all'esterno, istanzia le altre due parti e ne espone i metodi principali. Gestisce l'input utente trammite click sui pulsanti
  • LocalModel contiene la logica interna, la lista di cartelle e metodi per aggiungerne di nuove o rimuoverne di esistenti, o il metodo scanDirectory per avviare la scansione di una cartella
  • LocalView si occupa di mostrare a schermo la lista delle cartelle e i pulsanti, o un testo di riempimento se non ne sono state selezionate alcune.

schema-local

Player

Anche la pagina di gestione della musica sarà suddivisa in tre componenti Model, View e Controller. La PlayerView mostrerà le informazioni sul brano ricevute tramite il metodo display(Track) da PlayerModel e i pulsanti, il cui input verrà catturato da PlayerController e inoltrato a PlayerModel, responsabile della logica interna del player, per la quale si serve delle classi offerte dalla libreria JACo MP3 Player.

PlayerModel è inizialmente nello stato inattivo, pronto a passare allo stato attivo nel momento in cui l'utente avvia una traccia dalla lista. Se la riproduzione termina e non ci sono tracce in coda, il player tornerà nuovamente nello stato inattivo, in cui verranno mostrati un'immagine e un titolo predefiniti e le operazioni di previous, play/pause e next non avranno alcun effetto.

Diagrammi delle interazioni

Il seguente diagramma illustra i passaggi tra le classi che dovranno avvenire a partire dal click sul pulsante per iniziare la riproduzione di un brano.

La scelta di una cartella da aggiungere porterà invece ad una catena simile alla seguente

Design pattern utilizzati

  • Singleton in Data
  • State in Player
  • Observer tra Data e TracklistModel e tra TracklistModel e TracklistView
  • Model-View-Controller in Library, Local e Player

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published