2010-12-31 20 views
0

Kann mir jemand sagen, warum mein Lautstärkeregler nicht funktioniert ...?Kann mir jemand sagen, warum meine Lautstärkeregelung nicht funktioniert?

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

Was ist das Problem? Erhalten Sie irgendeine Ausnahme? – Favonius

+1

Was soll das nicht tun? Was soll nicht passieren? –

+0

Nein, keine Ausnahme .... aber ich kann die Lautstärke nicht erhöhen oder verringern ... !! – user528050

Antwort

1

Das Volumen ändert sich nie, nur weil ... Sie es nie ändern! Ich nehme an, Sie möchten, dass die Lautstärke geändert wird, wenn sich der Slider-Status ändert. Sie müssen also nur die Lautstärke in Ihrer stateChanged-Methode einstellen. Um dies zu tun, können Sie die folgende Anweisung verwenden: volume.setValue (-20.63f), die Sie bereits anderweitig in Ihrem Programm verwendet haben. Ersetzen Sie einfach den Parameter durch den gewünschten Wert (z. B. den Wert des Schiebereglers).

Hoffe, das hilft.

+0

zuerst teste ich das Volumen mit -20.63f und dann 10.00,80.84 ..... aber ich fand immer die Lautstärke wird gleich sein. – user528050

+0

Sie sollten die Zeile s.setValue (pos) entfernen; oder sogar die ganze "Tick" -Methode. Ich weiß nicht, was es tun soll, aber ich würde wetten, dass ich ohne besser arbeiten würde. – Hal

+0

es ist für die Einstellung der Position der Liniensteuerung mit den Songs.Wenn Sie etwas bessere Idee haben bitte ... Ich muss wissen wollen, was das ist ... aber bitte noch ich bin nicht in der Lage, die Lautstärke zu steuern ... hilf mir um dieses Problem zu beheben ... bitte ich brauche das wirklich. – user528050

0

OK, es sieht so aus, als hätten Sie die "Lautstärkeregelung" korrekt ausgeführt. Willst du damit sagen, dass du in der folgenden Zeile andere Werte anlegst und es immer die gleiche Lautstärke hat?

volume.setValue(-20.63f); 

Ich kann mir nicht vorstellen, welche Werte von 10 oder 80 tun würde, als ich das Angebot denken -80 bis 6. ist und der größte Teil des unteren Endes davon ist ziemlich unhörbar. Es soll Dezibel von -80 bis 6 oder Volt entsprechen oder etwas typischer für ein VU-Meter. Mein Mixer hat ein VU-Meter, das beispielsweise von -20 bis +5 reicht.

In jedem Fall haben die Testwerte wie 5 oder 0 oder -10 eine bessere Chance, wie etwas zu klingen.

Außerdem erwarten die meisten, dass man die Lautstärke während der Wiedergabe ändert, als dynamischen Prozess, und deshalb suchen wir nach logischen Stellen in Ihrem Code, wie dem Timer oder dem Slider. Aber ich denke, Sie haben nur versucht, Sounds zu verschiedenen hartcodierten Sound-Levels zu bekommen, und der Schieberegler diente nur dazu, den Fortschritt anzuzeigen. Ich fand den Code ziemlich schwer zu entziffern, ebenso wie die Beschreibung des Problems.

Verwandte Themen