2016-09-24 6 views
-1

Я в настоящее время bussy создаю видеоигру в качестве небольшого побочного проекта, чтобы сохранить навыки программирования в университете. Одним из аспектов видеоигр являются звуковые эффекты, и я ошеломляю, как это сделать лучше всего на Java.Звуковые эффекты на Java?

В настоящее время я использую Clip класс для звуковых эффектов, вот предварительный просмотр (очень простой и общий) код, я использую:

 try { 
      AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File(path)); 
      clip = AudioSystem.getClip(); 
      clip.open(audioInputStream); 
      if(loop) 
      { 
       clip.loop(Integer.MAX_VALUE); 

       volumeControl = (FloatControl)clip.getControl(FloatControl.Type.MASTER_GAIN); 
       setVolume(volume); 
       launched = true; 
      } 
      else 
      { 
       clip.start(); 

       volumeControl = (FloatControl)clip.getControl(FloatControl.Type.MASTER_GAIN); 
       setVolume(volume); 
       running = true; 
       CoreTime.sfx.add(this); 

      } 
     } catch(Exception e){System.out.println(e + "=-=-=-=-=-=-=-=-=-=run SFXPlayer");} 

Проблема с Clip класса, однако, что он создает новую тему для себя, на которой он воспроизводит аудио. Наличие большого количества клипов, требуемых для одновременного воспроизведения, может таким образом увеличить количество созданных потоков и даже, возможно, заморозить игру в течение нескольких секунд. С некоторым анализом я получил количество потоков, чтобы увеличить до 60 потоков при одновременном воспроизведении множества звуковых эффектов.

Теперь, очевидно, это нежелательное поведение, и мне интересно, как я могу обойти это и более эффективно реализовать звуковые эффекты. Есть ли методы или способы, о которых вы, ребята, знаете, не создаете это безумно большое количество потоков, где я могу воспроизводить множество звуковых эффектов сразу? Некоторая помощь будет действительно оценена!

+0

«Есть разница между запущенным и запущенным булевым, о чем я не буду здесь объяснять.» «Если вы этого не сделаете, то это неясно, что вы просите **. – progyammer

+0

@progy_rock Булевы не имеют отношения к квесту, поэтому я не вижу смысла в вашем комментарии? – ImJustACowLol

ответ

1

Если JavaFX является вариантом, может быть хорошей идеей переключиться на него, поскольку он обеспечивает хороший набор функций для воспроизведения звука. Из официальной документации:

AudioClip plonkSound = new AudioClip("http://somehost/path/plonk.aiff"); 
plonkSound.play(); 

Вы также можете использовать .wav файлы, которые являются популярным выбором для звуковых эффектов. Для получения дополнительной информации посетите javadoc.

Смежные вопросы