2010-12-31 2 views
0

누군가 내 볼륨 컨트롤이 작동하지 않는 이유를 말할 수 있습니까?누군가 내 볼륨 컨트롤이 작동하지 않는 이유를 말할 수 있습니까?

import java.io.*; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.sound.sampled.*; 
import javax.swing.event.*; 
/*<Applet code="kkk" height=400 width=400></Applet>*/ 
public class kkk extends JComponent 
{ 
    static File f1; 
    int prog; 
    static JFrame jf; 
    int al; 
    JLabel time; 
    Timer tr; 
    Button b; 
    int pos=0; 
    Clip c; 
    AudioInputStream a; 
    JSlider s; 
    public static void main(String args[]) 
    { 
     f1=new File("mm.wav"); 
     jf=new JFrame(); 
     jf.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
     kkk kp=new kkk(f1); 
     jf.getContentPane().add(kp, "Center"); 
     jf.setSize(400,400); 
     jf.setVisible(true); 
    } 
    kkk(File f1) 
    { 
     try 
     { 
      a=AudioSystem.getAudioInputStream(f1); 
      AudioFormat af=a.getFormat(); 
      DataLine.Info di=new DataLine.Info(Clip.class,af); 
      c=(Clip)AudioSystem.getLine(di); 
      c.open(a); 
     } 
     catch(Exception e) 
     { 
      System.out.println("Exception caught "); 
     } 
     finally 
     { 
      try 
      { 
       a.close(); 
      } 
      catch(Exception e) 
      { 
       System.out.println("Exception caught "); 
      } 
     } 
     al=(int)(c.getMicrosecondLength()/1000); 
     s=new JSlider(); 
     Button b=new Button("play"); 
     time=new JLabel(); 
     Box row = Box.createHorizontalBox(); 
     row.add(s); 
     row.add(b); 
     row.add(time); 
     b.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent eee) 
     { 
      play(); 
     }}); 
     s.addChangeListener(new ChangeListener(){ 
     public void stateChanged(ChangeEvent ee) 
     { 
      //repaint(); 
      prog=s.getValue(); 
      time.setText(prog/1000 + "." + (prog % 1000)/100); 
      //if(prog!=ap) 
      //skip(prog); 
     }}); 
     tr = new javax.swing.Timer(100, new ActionListener() { 
       public void actionPerformed(ActionEvent e) { 
       tick(); 
       } 
       }); 
     setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 
       this.add(row); 
    } 
    public void play() 
    { 
     try 
     { 
      FloatControl volume = (FloatControl) c.getControl(FloatControl.Type.MASTER_GAIN); 
volume.setValue(-20.63f); 
     } 
     catch(Exception e) 
     {} 
     c.start(); 
     tr.start(); 
    } 
    //public void skip(
    public void tick() 
    { 
      pos = (int) (c.getMicrosecondPosition()/1000); 
       s.setValue(pos); 
    } 
} 
+1

무엇이 문제입니까? 예외가 있습니까? – Favonius

+1

그런 일이 일어나면 안되는 일이 무엇입니까? 무슨 일이 일어나지 않아야합니까? –

+0

아니요 아무 예외도 ....하지만 볼륨을 늘리거나 줄일 수는 없습니다 ... !! – user528050

답변

1

음량은 결코 바뀌지 않으므로 ... 변경하지 않으셔도됩니다. 슬라이더 상태가 변경 될 때 볼륨을 수정하기를 원한다면 stateChanged 메소드에서 볼륨을 설정하기 만하면됩니다. 이렇게하려면 다음 명령을 사용할 수 있습니다. 이미 프로그램의 다른 위치에서 사용했던 volume.setValue (-20.63f). 매개 변수를 원하는 값 (예 : 슬라이더 값)으로 바꿉니다.

희망이 도움이됩니다.

+0

먼저 20.63f로 볼륨을 테스트 한 다음 10.00,80.84 .....로 테스트하지만 볼륨이 항상 동일하다는 것을 알았습니다. – user528050

+0

줄 s.setValue (pos)를 제거해야합니다. 심지어는 전체 "진드기"방법을 사용합니다. 나는 그것이 무엇을 해야하는지 모른다. 그러나 나는 내가 없이는 더 잘할 것이라고 내기를했다. – Hal

+0

노래로 라인 컨트롤의 위치를 ​​설정하기위한 것입니다. 더 좋은 아이디어가 있다면 ... 그게 무엇인지 알고 싶습니다.하지만 여전히 볼륨을 조절할 수는 없지만 ... 도와주세요. 이 문제를 해결하려면 ... 제발 내가 진정으로 이것을 필요로합니다. – user528050

0

좋아, "볼륨"컨트롤을 올바르게 만든 것처럼 보입니다. 다음 행에 다른 값을 넣었고 항상 같은 볼륨으로 들렸다 고 말하는 것입니까?

volume.setValue(-20.63f); 

나는 범위는 6 -80이며, 그 하단의 대부분은 거의 들리지 생각하는 나는, 10 또는 80의 값이 어떻게 할 것인지 상상할 수 없다. -80에서 6 또는 V 또는 VU 미터에서 더 일반적인 것의 데시벨에 해당합니다. 내 믹서에는 -20에서 +5 범위의 VU 미터가 있습니다 (예 :).

어떤 경우에도 5 또는 0 또는 -10과 같은 테스트 값을 시도하면 무언가처럼 들릴 가능성이 더 높습니다.

또한 대부분의 사람들은 재생 중에 동적 프로세스로 볼륨을 변경하려고하므로 Timer 나 Slider와 같은 코드에서 논리적 인 위치를 찾고 있습니다. 하지만 하드 코딩 된 여러 사운드 레벨에서 사운드를 재생하려고하는 것 같았습니다. 슬라이더는 진행 상황을 표시하기위한 것입니다. 문제의 설명뿐만 아니라 해독하기 어려운 코드를 발견했습니다.

관련 문제