コード例 #1
0
ファイル: PlayerService.java プロジェクト: scarma/Music-Moves
  /*
   * 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