# Java3D Sound spielt nur einen Sound ab.



## ChrisKu (20. Aug 2011)

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:


```
@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


----------



## ChrisKu (21. Aug 2011)

Keiner eine Idee?

Beim herumprobieren habe ich festgestellt, dass der Fehler nicht auftritt, wenn ich statt des JavaSoundMixers den JOALMixer verwende. Ist das nun einer der vielen Bugs im JavaSound3D oder habe ich etwas falsch gemacht?


----------



## ChrisKu (22. Aug 2011)

Bounce


----------



## twseitex (22. Aug 2011)

Java Tips - How to use 3D sound in Java3D


----------



## Marco13 (22. Aug 2011)

An sich ist das ja nicht sooo hilfreich ... aber da es ein KSKB ist, dann doch (*zwei mal räusper*)  .

Das funktioniert bei mir. Wenn das bei dir nicht funktioniert, könnte es vielleicht irgendwie am Soundkartentreiber oder so liegen...?! (Zumindest würde ein Test da schon neue Einsichten bringen)


----------



## ChrisKu (23. Aug 2011)

Erst einmal danke, ihr Beiden. Das KSKB hatte ich allerdings schon getestet mit dem gleichen Effekt wie in meinem Code.

Ich werde zum Testen, ob es am SoundkartenTreiber etc. liegt den Code mal auf ein paar anderen Rechnern testen. Und melde mich dann mit den Ergebnissen.

Das ist mir jetzt ehrlich gesagt ein bisschen peinlich : Das Problem liegt offensichtlich nicht an Java3D (Abbitte!!) sondern an meiner IDE (Netbeans 7). Von der Console aus funktioniert es nämlich. Sorry, aber Danke Marco13, hast mich in die richtigen Bahnen gelenkt.


----------



## Marco13 (23. Aug 2011)

Aber DA wäre jetzt schon interessant, woran das liegt ???:L Wird da beim Start ein anderes JRE verwendet oder so? (Selbst DANN wäre es noch komisch, aber an irgendwas muss es ja liegen - und an einer IDE sollte es eigentlich nicht liegen...)


----------



## ChrisKu (23. Aug 2011)

> Aber DA wäre jetzt schon interessant, woran das liegt Wird da beim Start ein anderes JRE verwendet oder so? (Selbst DANN wäre es noch komisch, aber an irgendwas muss es ja liegen - und an einer IDE sollte es eigentlich nicht liegen...)



Schon wieder Bingo! Das System nutzt Java 6, Netbeans als Default jedoch Java 7. Umstellung von Netbeans auf Java 6 und es funzt.


----------



## Marco13 (23. Aug 2011)

OK, in Anbetracht der Tatsache dass Java 7 noch sehr neu ist, ist das dann gar nicht so verwunderlich....


----------

