Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > как сделать более эффективно


Автор: Muerto 30.12.2006, 12:12
это класс в моем метрономе, который отвечает за сам клик.
но таймер не успивает =-((((
я пытался все из таймер а вытащить,но достаточно хоть одну строку убрать
например эту stream = AudioSystem.getAudioInputStream(file); поместить выше,и файл уже заного не играется=-(((
очень нужна помощь,спасибо заранее и с новым годом  smile 
Код
public class Play
{
  Timer timer;
  Clip clip;
  AudioInputStream stream;
  AudioFormat format;
  String file_name;
  File file;
  int s_volume;

  Play(int delay, int period, int soundkind, int sound_volume)
  {
    if(soundkind == 1)
      file = new File("Samples/Click1.wav");
    if(soundkind == 2)
      file = new File("Samples/Click2.wav");
    if(soundkind == 3)
      file = new File("Samples/Bass Drum.wav");
    if(soundkind == 4)
      file = new File("Samples/Crash.wav");
    if(soundkind == 5)
      file = new File("Samples/ShortCrash.wav");
    if(soundkind == 6)
      file = new File("Samples/Hi hat 1.wav");
    if(soundkind == 7)
      file = new File("Samples/Hi hat 2.wav");
    if(soundkind == 8)
      file = new File("Samples/Hi hat 3.wav");
    if(soundkind == 9)
      file = new File("Samples/Hi hat 4.wav");
    if(soundkind == 10)
      file = new File("Samples/Hi hat 5.wav");
    if(soundkind == 11)
      file = new File("Samples/Hi hat 6.wav");
    if(soundkind == 12)
      file = new File("Samples/Snare.wav");
    if(soundkind == 13)
      file = new File("Samples/Stick.wav");
    if(soundkind == 14)
      file = new File("Samples/Stick2.wav");
    if(soundkind == 15)
      file = new File("Samples/Tom.wav");
    final double value = sound_volume / 100.0;

    timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask()
    {
      public void run()
      {
        try
        {
          stream = AudioSystem.getAudioInputStream(file);
          format = stream.getFormat();
          stream = AudioSystem.getAudioInputStream(format, stream);
          // Create the clip
          DataLine.Info info = new DataLine.Info(Clip.class, stream.getFormat(), ((int) stream.getFrameLength() * format.getFrameSize()));

          clip = (Clip) AudioSystem.getLine(info);
          // This method does not return until the audio file is completely loaded
          clip.open(stream);
          FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
          float dB = (float) (Math.log(value == 0.0 ? 0.0001 : value) / Math.log(10.0) * 20.0);
          gainControl.setValue(dB);
          System.out.println("gain control:" + gainControl + ",value=" + value);
          if(value > 0)
          {
            // Start playing
            clip.start();
          }
        }
        catch(Exception e)
        {
          e.printStackTrace();
        }
      }
    }, delay, period);
  }

  public void stop()
  {
    timer.cancel();
  }
}

Добавлено @ 12:12 
и ещё не знаю как сделать что бы таймер работал определенное время,например 2 минуты.

Автор: LSD 30.12.2006, 13:31
Как часто должен срабатывать таймер, и какова продолжительность клипа? Засеки сколько по времени будет выполняться метод run().

Автор: Muerto 30.12.2006, 14:18
продалжительность клипа оч мала, ну мож 0.1 секунды.
таймер срабатывает так часто= как ему зададут! он получает с Ж слайдера значение, и через форумулу переводит это в мили секунды.
другими словами period= тэмп.

могу выложить всю программу...

Автор: Muerto 30.12.2006, 14:33
Вот залил http://rapidshare.com/files/9510401/Metronome_by_david_kurushin_.rar.html
собственно прога в основном закончена, это мой проект на атестат...
осталось только  поправить пару багов, вид получше сделать и все.
пока самый большой баг это сбивание таймера,и я понимаю от чего, я его нагрузил.
но как разгрузить что бы сохранить ту же функциональность не знаю smile

Добавлено @ 14:38 
зы не жмите пока на плей два раза...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)