L’AudioManager è una classe della view che si occupa della gestione degli audio, in particolare delle canzoni e degli effetti sonori.

I suoni sono salvati in file di tipo wav e utilizzano la classe Clip per la riproduzione dei suoni. Questi file, essendo particolarmente pesanti, vengono processati soltanto una volta all’avvio del gioco e poi, ad ogni riproduzione, viene riprodotta la clip dello specifico suono presente in una lista.

Inizializzazione

Durante l’inizializzazione della classe, chiamiamo il metodo loadAudios() che, attraverso la classe Clip, converte i file audio in oggetti che possono riprodurre dei suoni.

private void loadAudios() {  
    // Carica le canzoni  
    String[] songNames = {"song-intro-and-playing", "song-playing"};  
    songs = new Clip[songNames.length];  
    
    for (int i = 0; i < songNames.length; i++)  
        songs[i] = GetAudio(songNames[i]);  
  
    // Carica gli effetti sonori  
    String[] soundEffectNames = {"sfx-home", "sfx-jump", ..., "sfx-hurry-up"};  
    soundEffects = new Clip[soundEffectNames.length];  
    
    for (int i = 0; i < soundEffectNames.length; i++)  
        soundEffects[i] = GetAudio(soundEffectNames[i]);  
  
    setSoundEffectVolume();  
}

Canzoni

Nel gioco ci sono due canzoni: intro-song e playing-song. L’intro-song viene riprodotta all’inizio della partita e, alla sua fine, viene automaticamente riprodotta la playing-song. Quest’ultima viene riprodotta in loop, ovvero viene riprodotta da capo ogni volta che finisce.

Questi automatismi sono ottenuti attraverso degli action-listener che permettono di eseguire del codice specifico quando avviene un determinato evento. In questo caso, quando l’intro-song termina, riproduciamo la playing-song in loop.

public void playIntroSong() {  
    currentSongID = INTO_AND_PLAYING_SONG;  
    setSongVolume();  
  
    // Crea un listener per riprodurre la playing song dopo la fine dell'intro song  
    LineListener listener = new LineListener() {  
        @Override  
        public void update(LineEvent event) {  
            if (event.getType() == LineEvent.Type.STOP) {  
                songs[currentSongID].removeLineListener(this);  
                playPlayingSong();  
            }  
        }  
    };  
  
    // Aggiunge il listener alla intro song  
    songs[currentSongID].addLineListener(listener);  
  
    // Inizia a riprodurre la intro song  
    songs[currentSongID].setFramePosition(0);

Effetti Sonori

SuonoDescrizione
sfx-jumpSuono del salto del player
sfx-player-deathSuono della morte del player
sfx-bubble-shootSuono dell’attacco del player
sfx-enemy-bubble-popSuono della enemy bubble che espode
sfx-water-flowSuono della bolla d’acqua che esplode
sfx-lightningSuono della bolla lampo che esplode
sfx-reward-collectedSuono riprodotto quando si raccoglie un reward
sfx-powerup-collectedSuono riprodotto quando si raccoglie un powerUp
sfx-hurry-upSuono riprodotto quando inizia l’evento hurryUp
sfx-game-overSuono riprodotto quando si perde la partita
sfx-game-completedSuono riprodotto quando si vince il gioco
sfx-homeSuono riprodotto quando si avvia l’app

Ogni suono ha un id specifico e possiamo riprodurre i suoni attraverso questo metodo:

public void playSoundEffect(int soundEffectID) {  
    soundEffects[soundEffectID].start();