/* * delay() crea 3 audiotrack cloni di quelle "principali" * e ci applica un effetto creato con la classe EnvironmentalReverb * Un thread (timer) gestisce l'avvio posticipato dell'effetto * Se al double tap è già attivo(isDelaying==true), le audiotrack * e l'effetto ad esse applicato vengono rilasciati */ synchronized void delay() { if (isPlaying == true) { if (isDelaying == false) { isDelaying = true; showToast("Delay on"); // Creo effetto audio per le tracce ritardate che vado a sovrapporre delay = new EnvironmentalReverb(1, 0); delay.setReverbLevel((short) 1000); delay.setRoomLevel((short) -10); delay.setRoomHFLevel((short) -10); delay.setReverbDelay(100); delay.setEnabled(true); SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); final int delaytime = preferences.getInt("rdelay", 10); final float idelay = preferences.getInt("idelay", 10) / 10; timer = new Thread() { @Override public void run() { try { audioXd = playSound(genArrayX); // Genero le audiotrack basate sullo stesso audioYd = playSound(genArrayY); // array "sonoro" delle audiotrack "principali" audioZd = playSound(genArrayZ); audioXd.setPlaybackHeadPosition( audioX .getPlaybackHeadPosition()); // Imposto posizione uguale a quella della // traccia audioYd.setPlaybackHeadPosition( audioY.getPlaybackHeadPosition()); // in riproduzione audioZd.setPlaybackHeadPosition(audioZ.getPlaybackHeadPosition()); audioXd.attachAuxEffect(delay.getId()); audioXd.setAuxEffectSendLevel(idelay); audioYd.attachAuxEffect(delay.getId()); audioYd.setAuxEffectSendLevel(idelay); audioZd.attachAuxEffect(delay.getId()); audioZd.setAuxEffectSendLevel(idelay); // Aggiungo effetto alle audiotrack audioXd.play(); audioYd.play(); audioZd.play(); audioXd.pause(); audioYd.pause(); audioZd.pause(); // Necessario per inizializzare le audiotrack sleep(delaytime); // Tempo in millisecondi di ritardo tra la traccia principale // e quella ritardata (settabile tramite seekbar) } catch (InterruptedException e) { e.printStackTrace(); } finally { if (isPlaying) { audioXd.play(); audioYd.play(); audioZd.play(); } timer.interrupt(); } super.run(); } }; timer.start(); } // Fine isdelaying == false else { isDelaying = false; showToast("Delay off"); audioXd.release(); audioYd.release(); audioZd.release(); delay.release(); } } // Fine isplaying } // Fine delay