谁能告诉我为什么我的音量控制不起作用?

任何人都可以告诉我为什么我的音量控制不起作用……?

import java.io.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.sound.sampled.*; import javax.swing.event.*; /**/ 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); } } 

音量永远不会改变只是因为……你永远不会改变它! 我想你想要在滑块状态改变时修改音量,所以你只需要在stateChanged方法中设置音量。 为此,您可以使用以下指令:volume.setValue(-20.63f),您已在程序中的其他位置使用过。 只需将参数替换为您想要的值(例如滑块的值)。

希望这可以帮助。

好吧,好像你正确地控制了“音量”。 你是说你在下面的行中放了不同的值,它总是听起来相同的音量?

 volume.setValue(-20.63f); 

我无法想象10或80的值会是什么,因为我认为范围是-80到6.而且大部分底端都是听不到的。 它应该对应于-80到6的分贝或伏特或更典型的VU表。 我的调音台有一个VU表,例如-20到+5。

无论如何,尝试像5或0或-10这样的测试值可能会有更好的机会听起来像是什么。

此外,大多数人都希望在播放期间更改音量,作为动态过程,因此我们在代码中寻找逻辑位置来执行此操作,例如Timer或Slider。 但我想你只是试图让声音以不同的硬编码声音级别播放,而滑块只是用于显示进度。 我发现代码很难破译,以及问题的描述。