Hallo,
ich arbeite an einem Audioplayer, der mp3s abspielt. Soweit läuft auch alles ganz gut, jedoch habe ich leider noch ein Problem mit der Methode setLevel des JMF. Übergebe ich der Merhode einen höheren Wert als 0.6 erhalte ich folgende Exception:
Hier relevante Teile meiner Klasse Audioplayer:
Aufgerufen wird setVolume von einer anderen Klasse aus durch ein ChangeEvent eines JSliders aufgerufen mit dem die Lautstärke geregelt wird.
Hier noch der Code des Sliders:
Ich bin für jede Hilfe dankbar
ich arbeite an einem Audioplayer, der mp3s abspielt. Soweit läuft auch alles ganz gut, jedoch habe ich leider noch ein Problem mit der Methode setLevel des JMF. Übergebe ich der Merhode einen höheren Wert als 0.6 erhalte ich folgende Exception:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Requested value 6.1285 exceeds allowable maximum value 6.0206.
at javax.sound.sampled.FloatControl.setValue(Unknown Source)
at com.sun.media.sound.DirectAudioDevice$DirectDL$Gain.setValue(Unknown Source)
at com.sun.media.renderer.audio.device.JavaSoundOutput.setGain(JavaSoundOutput.java:157)
at com.sun.media.renderer.audio.JavaSoundRenderer$GCA.setLevel(JavaSoundRenderer.java:202)
at audioplayer.AudioPlayer.setVolume(AudioPlayer.java:92)
at audioplayer.Display$10.stateChanged(Display.java:340)
at javax.swing.JSlider.fireStateChanged(Unknown Source)
at javax.swing.JSlider$ModelListener.stateChanged(Unknown Source)
at javax.swing.DefaultBoundedRangeModel.fireStateChanged(Unknown Source)
at javax.swing.DefaultBoundedRangeModel.setRangeProperties(Unknown Source)
at javax.swing.DefaultBoundedRangeModel.setValue(Unknown Source)
at javax.swing.JSlider.setValue(Unknown Source)
at javax.swing.plaf.basic.BasicSliderUI$TrackListener.mouseDragged(Unknown Source)
at java.awt.Component.processMouseMotionEvent(Unknown Source)
at javax.swing.JComponent.processMouseMotionEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Hier relevante Teile meiner Klasse Audioplayer:
Java:
package audioplayer;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Ellipse2D;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import javax.media.*;
import javax.media.protocol.DataSource;
import javax.media.protocol.URLDataSource;
import javax.media.rtp.event.NewParticipantEvent;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class AudioPlayer extends JFrame {
private static final long serialVersionUID = 1L;
Playlist plist = new Playlist();
File datei;
Player audioPlayer;
public final static int EMPTY = 1, PLAYING = 2, PAUSED = 3, STOPPED = 4;
private boolean shuffle = false, repeat = false;
private int state; //Status des Players
int actualposition = 1;
int volume=100;
public AudioPlayer(){
state = EMPTY;
try {
Format[] f = new Format[1];
f[0] = new Format("mpeglayer3");
PlugInManager.addPlugIn("com.sun.media.codec.audio.mp3.JavaDecoder", f, f, PlugInManager.CODEC);
}
catch(Exception e){
e.printStackTrace();
}
}
public void setVolume(int vol){
audioPlayer.getGainControl().setLevel((float)vol/100f);
}
}
Aufgerufen wird setVolume von einer anderen Klasse aus durch ein ChangeEvent eines JSliders aufgerufen mit dem die Lautstärke geregelt wird.
Hier noch der Code des Sliders:
Java:
volumeslider = new JSlider(0,100,100);
// volumeslider.setHorizontalAlignment(SwingConstants.CENTER);
volumeslider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
int x = volumeslider.getValue();
player.setVolume(x);
System.out.println(x);
}
});
volumeslider.setBounds(270,230, 100,15);
volumeslider.setBackground(Color.BLACK);
pane.add(volumeslider,0);
Ich bin für jede Hilfe dankbar