2010-06-28 4 views
0

나와 나와 친구가 schoolproject로 MP3 플레이어를 프로그래밍하고 있습니다. 우리는 거의 끝났으며 이제 플레이어의 볼륨을 변경하는 함수를 프로그래밍하려고하는 시점에 갇혀 있습니다. 우리가 사용하는 :JLayer를 사용하여 볼륨 조정

  • AudioDevice
  • AdvancedPlayer

나는 다른 사람이 allready 같은 질문을하지만 난 꽤 솔루션을하지 않았다 나는 이러한 응답 싶지 않았다 알고 늙은 질문 그래서 나는 다시 물어볼 줄 알았어.

건배 티모

답변

2

이 작업을 수행하는 가장 쉬운 방법은 기본적으로 당신이 JavaSound를 통해 jlayer 사용을 의미 mp3spi를 통해 jlayer 사용하는 것입니다. 그런 다음 JavaSound에서와 같이 라인에서 게인을 설정할 수 있습니다.

첫째로, 당신은 당신의 클래스 경로에 다음을 추가해야합니다

  • jl1.0.1.jar
  • mp3spi1.9.5.jar
  • tritonus_share.jar

.. . 모두 mp3spi (위 링크)에 대한 배포판에 있습니다.

둘째, 재생하기 전에 AudioInputStream을 디코딩해야합니다.

Clip clip = AudioSystem.getClip(); 
clip.open(audioStream2); 

및 JavaSound API 컨트롤을 사용할 수 있습니다 :

FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN); 
gainControl.setValue(-30.0f); 

참고 : 자원을 종료하는 것을 잊지 마세요, 그냥했습니다

AudioInputStream audioStream = AudioSystem.getAudioInputStream(file); 
AudioFormat baseFormat = audioStream.getFormat(); 
AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, baseFormat.getSampleRate(), 16, baseFormat.getChannels(), 
     baseFormat.getChannels() * 2, baseFormat.getSampleRate(), false); 
AudioInputStream audioStream2 = AudioSystem.getAudioInputStream(decodedFormat, audioStream); 

그런 다음 당신은 디코딩 된 스트림을 재생 이 문제에 대한 요점을 보여주었습니다 - JavaSound에 대한 익숙 함이 예상됩니다, read here.

0

JLGUI는 UI 기반 JLayer 앱 조정 볼륨의 좋은 예이다. tar.gz 파일에서 소스 코드를 얻을 수 있습니다. http://www.javazoom.net/jlgui/sources.html

if (src == ui.getAcVolume()) 
    { 
     Object[] args = { String.valueOf(ui.getAcVolume().getValue()) }; 
     String volumeText = MessageFormat.format(ui.getResource("slider.volume.text"), args); 
     ui.getAcTitleLabel().setAcText(volumeText); 
     try 
     { 
      int gainValue = ui.getAcVolume().getValue(); 
      int maxGain = ui.getAcVolume().getMaximum(); 
      if (gainValue == 0) theSoundPlayer.setGain(0); 
      else theSoundPlayer.setGain(((double) gainValue/(double) maxGain)); 
      config.setVolume(gainValue); 
     } 
     catch (BasicPlayerException ex) 
     { 
      log.debug("Cannot set gain", ex); 
     } 
    } 
+1

if/else 서식이 머리를 아프게합니다. – akf

+0

안녕하세요, 빠른 답변에 감사드립니다. 나는 그것을 확인하고 내가 그것을 얻지 못하면 다시 물을 것이다 :-) – Timothy

+0

Ohh emm 당신이 게시 한 코드가 어떤 파일에 있는지 빠르게 알 수 있습니까? 건배 – Timothy