
// VolChanger.java
// Andrew Davison, April 2005, ad@fivedots.coe.psu.ac.th

/* Třída PanChanger je vlákno pro úpravu hlasitosti, které
   pracuje se syntezátorem použitým při přehrávání MIDI-souborů
   v aplikaci FadeMiDi.

   Postupně snižuje hlasitost přehravače (přístupem k ovládacím
   prvkům syntezátoru pro daný kanál).
*/

public class VolChanger extends Thread
{
  // doba mezi aplikací změn hlasitosti, v ms
  private static int PERIOD = 500;

  private FadeMidi player;
  private int numChanges = 0;   
        // počet úprav hlasitosti


  public VolChanger(FadeMidi p)
  {  super("VolChanger");  
     player = p;
  }


  public void startChanging(int duration)
  /* PanMidi volá tuto metodu s parametrem délky 
     trvání MIDI-sekvence v milisekundách. */ 
  {
    // spočti, kolkrát bude nutné upravit hlasitost
    numChanges = (int) duration/PERIOD;
    // System.out.println("Počet změn: " + numChanges);
    start();
  } // konec metody: startChanging()


  public void run()
  /* Upraví nastavení polohy ve stereu, trošku si pospi, poté vše opakuj, 
     dokud neuběhne čas odpovídající délce skladky. */
  {
     /* vypočti stepVolume, velikost snížení hlasitosti
        v každém kroku. */
     int volume = player.getMaxVolume();
     int stepVolume = (int) volume / numChanges;
     if (stepVolume == 0)
       stepVolume = 1;
     System.out.println("Max. hlasitost: "+volume+", krok: " + stepVolume);
  
     int counter = 0;
     System.out.print("Probíhá tlumení hlasitosti");
     while(counter < numChanges){ 
       try {
         volume -= stepVolume;    // sniž požadovanou hlasitsot
         if ((volume >= 0) && (player != null))
           player.setVolume(volume);    // nastav novou hodnotu hlasitosti
         Thread.sleep(PERIOD);          // chvíli posečkej
       }
       catch(InterruptedException e) {}
       System.out.print(".");
       counter++;
     } 
     System.out.println();
  } // konec metody: run()

}  // konec třídy: VolChanger
