Может кто-нибудь сказать мне, почему мой регулятор громкости не работает? - PullRequest
0 голосов
/ 31 декабря 2010

Может кто-нибудь сказать мне, почему мой регулятор громкости не работает ...?

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);
    }
}

Ответы [ 2 ]

1 голос
/ 02 января 2011

Громкость никогда не меняется только потому, что ... вы никогда не меняете ее!Я предполагаю, что вы хотите изменить громкость при изменении состояния ползунка, поэтому вам просто нужно установить громкость в вашем методе stateChanged.Чтобы сделать это, вы можете использовать следующую инструкцию: volume.setValue (-20.63f), которую вы уже использовали в других местах вашей программы.Просто замените параметр на желаемое значение (например, значение ползунка).

Надеюсь, это поможет.

0 голосов
/ 21 июня 2011

ОК, похоже, вы правильно сделали регулятор громкости.Вы хотите сказать, что в следующей строке вы помещаете разные значения, и они всегда звучат одинаково?

volume.setValue(-20.63f);  

Я не могу себе представить, что будут делать значения 10 или 80, так как я думаю, что диапазон равен -80до 6. И большая часть нижнего конца этого в значительной степени неразборчиво.Это должно соответствовать децибелам от -80 до 6 или вольт или что-то более типичное для измерителя VU.Например, мой микшер имеет измеритель уровня громкости, который варьируется от -20 до +5.

В любом случае, пробные значения, такие как 5 или 0 или -10, могут иметь больше шансов звучать как-то.

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

...