Hallo Zusammen,
ich beschäftige mich erstmalig etwas mit Java3D Sound. Ich schaffe es auch, einen Sound abspielen zu lassen. Hier mal der relevante Code:
Mit der Methode processKeyEvent kann ich den Sound ein und ausschalten und mir anzeigen lassen, ob der Sound gespielt wird. Das Problem:
Ich kann nur den jeweils zuerst geladenen Sound hören, also in diesem Fall "laser2.wav". Der zweite Sound (hier "Explo1.wav" ist nicht zu hören, auch wenn isPlaying() true ausgibt. Wenn ich nun die beiden Sounds in umgekehrter Reihenfolge in die BranchGroup einhänge, ist das Verhalten genau umgekehrt: "Explo1.wav" ist hörbar, "laser2.wav" nicht.
Ich kann mir dieses verhalten nicht erklären. Jemand eine Idee?
Vielen Dank
Chris
ich beschäftige mich erstmalig etwas mit Java3D Sound. Ich schaffe es auch, einen Sound abspielen zu lassen. Hier mal der relevante Code:
Java:
@Override
protected void createScene() {
sceneBG.addChild(new CheckerFloor().getBG());
PhysicalEnvironment pe = su.getViewer().getPhysicalEnvironment();
AudioDevice device = new JavaSoundMixer(pe);
device.initialize();
pe.setAudioDevice(device);
beamPS = initSound("laser2.wav");
explPS = initSound("Explo1.wav");
sceneBG.addChild(beamPS);
sceneBG.addChild(explPS);
beamPS.setLoop(100);
explPS.setLoop(100);
}
private PointSound initSound(String filename) {
MediaContainer soundMC = null;
try {
soundMC = new MediaContainer("file:" + filename);
soundMC.setCacheEnable(true); // load sound into media container
} catch (Exception ex) {
System.out.println(ex);
}
// create a point sound
PointSound ps = new PointSound();
ps.setSchedulingBounds(bounds);
ps.setSoundData(soundMC);
ps.setInitialGain(1.0f); // full on sound from the start
ps.setCapability(PointSound.ALLOW_ENABLE_WRITE); // can be switched on/off
ps.setCapability(PointSound.ALLOW_POSITION_WRITE); // position can be adjusted
System.out.println("PointSound created from sounds/" + filename);
return ps;
}
@Override
protected void processKey(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_B) {
beamPS.setEnable(!beamPS.getEnable());
} else if (e.getKeyCode() == KeyEvent.VK_X) {
explPS.setEnable(!explPS.getEnable());
} else if (e.getKeyCode() == KeyEvent.VK_P) {
System.out.println(beamPS.isPlaying());
System.out.println(explPS.isPlaying());
}
}
Mit der Methode processKeyEvent kann ich den Sound ein und ausschalten und mir anzeigen lassen, ob der Sound gespielt wird. Das Problem:
Ich kann nur den jeweils zuerst geladenen Sound hören, also in diesem Fall "laser2.wav". Der zweite Sound (hier "Explo1.wav" ist nicht zu hören, auch wenn isPlaying() true ausgibt. Wenn ich nun die beiden Sounds in umgekehrter Reihenfolge in die BranchGroup einhänge, ist das Verhalten genau umgekehrt: "Explo1.wav" ist hörbar, "laser2.wav" nicht.
Ich kann mir dieses verhalten nicht erklären. Jemand eine Idee?
Vielen Dank
Chris