# sound mit behavior geht nicht



## blubbbla (14. Dez 2006)

ich höre einfach nichts. ich möchte einen sound abspielen. gibt es sowas wie ne play funktion? muss dazu sagen, dass ich das noch nie gemacht habe und mir etwas zus. gesucht habe. aber jetzt kommt ich nicht mehr weiter :-(



```
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.event.*;
import com.sun.j3d.utils.applet.MainFrame; 
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import java.io.*;

//   sound renders a single, rotating cube.

public class sound extends Applet {

 public BranchGroup createSceneGraph() {
         // Create the root of the branch graph

             try{
             FileInputStream stream = new FileInputStream("sound/blubb.wav");
             MediaContainer media = new  MediaContainer(stream);
                            media.setCacheEnable(true);
             }
             catch (FileNotFoundException e){};


         BranchGroup objRoot = new BranchGroup();
 
         MediaContainer myWave = new  MediaContainer("file:./sound/blubb.wav");
         Point2f[] myAtten = {
                 new Point2f(0.0f,1.0f),
                 new Point2f(0.0f,0.5f),
                 new Point2f(0.0f,0.0f)
           };
         PointSound mySound = new PointSound();
         mySound.setSoundData(myWave);
         mySound.setEnable(true);
         mySound.setInitialGain(1.0f);
         mySound.setLoop(-1);
         mySound.setPosition(new Point3f(0.0f,1.0f,0.0f));
         mySound.setDistanceGain(myAtten);
         
         BoundingSphere myBounds = new BoundingSphere(new Point3d(),1000.0);
          mySound.setSchedulingBounds(myBounds);
          
          objRoot.addChild(mySound);

         
         return objRoot;
     } 


     public sound() {
        setLayout(new BorderLayout());
        Canvas3D canvas3D = new Canvas3D(null);
        add("Center", canvas3D);

        BranchGroup scene = createSceneGraph();

        // SimpleUniverse is a Convenience Utility class

        SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
        AudioDevice audioDev = simpleU.getViewer().createAudioDevice();

  // This will move the ViewPlatform back a bit so the
  // objects in the scene can be viewed.

        simpleU.getViewingPlatform().setNominalViewingTransform();

        simpleU.addBranchGraph(scene);
    }

    //  The following allows this to be run as an application
    //  as well as an applet

    public static void main(String[] args) {
  Frame frame = new MainFrame(new sound(), 256, 256);
    } 
    


}
```


----------



## Illuvatar (14. Dez 2006)

Ich glaube, du machst es dir etwas kompliziert 

Wenn der Sound an einer ganz genauen Stelle sein soll, brauchst du schon den PointSound, aber um einfach Sound abzuspielen, schau dir mal den BackgroundSound an.


----------



## blubbbla (15. Dez 2006)

ich habs hinbekommen - es lag der der url form.

aber jetzt will ich den sound mittels behavior ein und ausschlaten. und das geht einfach nicht. ich hatte das schon mal mit einem licht gemacht und hab das der soundquelle angepasst. aber irgendwie passiert nichts :-(


```
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.event.*;
import com.sun.j3d.utils.applet.MainFrame; 
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import java.io.*;

//   sound renders a single, rotating cube.

public class sound extends Applet {

 public BranchGroup createSceneGraph() {
         // Create the root of the branch graph

             try{
             FileInputStream stream = new FileInputStream("sound/blubb.wav");
             MediaContainer media = new  MediaContainer(stream);
                            media.setCacheEnable(true);
             }
             catch (FileNotFoundException e){};


         BranchGroup objRoot = new BranchGroup();
 
         MediaContainer myWave = new  MediaContainer("file:./sound/blubb.wav");
         Point2f[] myAtten = {
                 new Point2f(10.0f,1.0f),
                 new Point2f(20.0f,0.5f),
                 new Point2f(30.0f,0.0f)
           };

         PointSound mySound = new PointSound();
         mySound.setCapability(PointSound.ALLOW_ENABLE_WRITE);
         mySound.setSoundData(myWave);
         mySound.setEnable(false);
         mySound.setInitialGain(1.0f);
         mySound.setLoop(0);
         mySound.setPosition(new Point3f(0.0f,0.0f,0.0f));
         mySound.setDistanceGain(myAtten);
         
         //BoundingSphere myBounds = new BoundingSphere();
          //mySound.setSchedulingBounds(myBounds);
          
          SoundBehavior mySoundBehavior = new SoundBehavior(mySound);
          mySoundBehavior.setSchedulingBounds(new BoundingSphere());
          objRoot.addChild(mySoundBehavior);
          
          //objRoot.addChild(mySound);

         
         return objRoot;
     } 


     public sound() {
        setLayout(new BorderLayout());
        Canvas3D canvas3D = new Canvas3D(null);
        add("Center", canvas3D);

        BranchGroup scene = createSceneGraph();

        // SimpleUniverse is a Convenience Utility class

        SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
        AudioDevice audioDev = simpleU.getViewer().createAudioDevice();

  // This will move the ViewPlatform back a bit so the
  // objects in the scene can be viewed.

        simpleU.getViewingPlatform().setNominalViewingTransform();

        simpleU.addBranchGraph(scene);
    }

    //  The following allows this to be run as an application
    //  as well as an applet

    public static void main(String[] args) {
  Frame frame = new MainFrame(new sound(), 256, 256);
    } 
    


}
```


```
import java.awt.event.*;
import java.util.Enumeration;
import javax.media.j3d.*;

public class SoundBehavior extends Behavior{
       private PointSound psound;
       private WakeupCondition cond;
       
       SoundBehavior(PointSound psound)
       {
         this.psound = psound;
       }

       public void initialize(){
         cond = new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED);
         this.wakeupOn(cond);
       }
       
       public void processStimulus(Enumeration criteria){
            WakeupOnAWTEvent event = (WakeupOnAWTEvent) criteria.nextElement();
            KeyEvent key = (KeyEvent) event.getAWTEvent()[0];
            char c = key.getKeyChar();
            
            switch(c){
              case '1': this.psound.setEnable(true);break;
             // case '0': this.psound.setEnable(false);break;
              default: break;
            }
            
            this.wakeupOn(cond);
       }
}
```


----------



## Illuvatar (15. Dez 2006)

Das einzige was mir da auf Anhieb einfällt, ist, dass du die Zeile 27 von dem SoundBehavior vielleicht besser nicht als Kommentar machen solltest?


----------



## blubbbla (15. Dez 2006)

naja da hab ich einfach die 0 auskommentiert. aber bei der 1 müsste es ja eigentlich gehen


----------

