Hallo,
ich habe folgendes Problem. Ich möchte mehrere Musikstücke hintereinander abspielen. Leider wird immer nur eines abgespielt. Woran liegt das hier? Er bricht immer in der Zeile mit this.panControl = (FloatControl) clip.getControl(FloatControl.Type.PAN); ab...
Vielen Dank im Voraus und hier der Code:
ich habe folgendes Problem. Ich möchte mehrere Musikstücke hintereinander abspielen. Leider wird immer nur eines abgespielt. Woran liegt das hier? Er bricht immer in der Zeile mit this.panControl = (FloatControl) clip.getControl(FloatControl.Type.PAN); ab...
Vielen Dank im Voraus und hier der Code:
Code:
package Components;
import java.applet.Applet;
import java.applet.AudioClip;
import java.io.File;
import java.lang.reflect.Array;
import java.net.URL;
import java.util.Arrays;
import javax.swing.JApplet;
import javax.sound.*;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.FloatControl;
public class IPlay {
private String[] playList = new File("Music/Songs").list();
private float gain = 0.2f;
private float pan = 0.2f;
AudioInputStream ais;
FloatControl panControl;
Clip clip = null;
int index = 0;
public IPlay() {
PlayALL();
}
public void PlayALL() {
for (int i = 0; i < playList.length; i++) {
try {
playSound("Music/Songs/"+playList[i], 0.2f, 0.2f);
} catch (Exception e) {
}
}
}
public void playSound(String name, float pan, float gain) throws Exception {
// AudioInputStream öffnen
this.ais = AudioSystem.getAudioInputStream(new File(name));
AudioFormat format = ais.getFormat();
// ALAW/ULAW samples in PCM konvertieren
if ((format.getEncoding() == AudioFormat.Encoding.ULAW)
|| (format.getEncoding() == AudioFormat.Encoding.ALAW)) {
AudioFormat tmp = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
format.getSampleRate(), format.getSampleSizeInBits() * 2,
format.getChannels(), format.getFrameSize() * 2, format
.getFrameRate(), true);
ais = AudioSystem.getAudioInputStream(tmp, ais);
format = tmp;
}
// Clip erzeugen und öffnen
DataLine.Info info = new DataLine.Info(Clip.class, format, ((int) ais
.getFrameLength() * format.getFrameSize()));
this.clip = (Clip) AudioSystem.getLine(info);
clip.open(ais);
// PAN einstellen
this.panControl = (FloatControl) clip.getControl(FloatControl.Type.PAN);
panControl.setValue(pan);
// MASTER_GAIN einstellen
FloatControl gainControl = (FloatControl) clip
.getControl(FloatControl.Type.MASTER_GAIN);
gainControl.setValue(gain);
// Clip abspielen
clip.start();
while (true) {
try {
Thread.sleep(100);
} catch (Exception e) {
// nothing
}
if (!clip.isRunning()) {
break;
}
}
clip.stop();
clip.close();
}
public static void main(String[] arg) {
IPlay i = new IPlay();
}
}