# Java3D Point Sound



## Developer_X (13. Apr 2009)

Hi, ich hab schon danach gegoogled und die Api gelesen, aber keine Beispiel gefunden, dass auf meinem Compúter funktioniert. Kann mir einer helfen, und mir ein Beispiel dazu geben, wie man den "Point Sound" verwendet, bitte?


----------



## diggaa1984 (13. Apr 2009)

was funktioniert denn nicht, wenn nichtmal fertige Beispiele bei dir laufen!?


----------



## Developer_X (13. Apr 2009)

ich hab nicht mal ne Ahnung, wie ich das ganze angehen, könnte.
nach der Api zu Folge,
sollte das so gehen:

```
PointSound s = new PointSound("Pfad zum Sound",x,y,z,);
```
Hast du ein beispiel, ich find keins


----------



## Developer_X (13. Apr 2009)

ich habs ma so ausprobiert klappt aber nicht fehler meldung ist auch dabei

```
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
import java.net.MalformedURLException;
import java.net.URL;

import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.behaviors.vp.*;       
	
	public class Test_Class extends Applet {       

    private SimpleUniverse universe ;
    private Canvas3D canvas;
    private BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 10.0), 1000.0);
    
      public void setupView() 
      { 
    	OrbitBehavior orbit = new OrbitBehavior(canvas,
                OrbitBehavior.REVERSE_ALL|OrbitBehavior.STOP_ZOOM);
        orbit.setSchedulingBounds(bounds);
        ViewingPlatform viewingPlatform = universe.getViewingPlatform();
        
        viewingPlatform.setNominalViewingTransform();
        viewingPlatform.setViewPlatformBehavior(orbit);       
        }       
          
        public BranchGroup createSceneGraph() {
        BranchGroup objRoot = new BranchGroup();       
        
  //hier!!!
        objRoot.addChild(new Bush().Bush());
        try {
			objRoot.addChild(new PointSound(new MediaContainer(new URL("F:/Rayman/Sound.Library/Pirates.wav")),2,2,2, 2));
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
  //hier!!!      
        Color3f lightColor = new Color3f(.6f,.6f,.6f);
        AmbientLight ambientLight= new AmbientLight(lightColor);
        ambientLight.setInfluencingBounds(bounds);
        objRoot.addChild(ambientLight);
        DirectionalLight directionalLight = new DirectionalLight();
        directionalLight.setColor(lightColor);
        directionalLight.setInfluencingBounds(bounds);
        objRoot.addChild(directionalLight);       
        return objRoot;       
    }       
     
    public void init() {
         BranchGroup scene = createSceneGraph();       
         setLayout(new BorderLayout());
         
         GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
         canvas = new Canvas3D(config);
         add("Center", canvas);       
        
         universe = new SimpleUniverse(canvas);       
         setupView();       
         universe.addBranchGraph(scene);
    }       
    public void destroy() {universe.removeAllLocales();}       
   
    public static void main(String[] args) {new MainFrame(new Test_Class(), 256, 256);}
}
```


```
Exception in thread "Thread-3" javax.media.j3d.SoundException: MediaContainer: setURL - bad URL
	at javax.media.j3d.MediaContainerRetained.setURLString(MediaContainerRetained.java:116)
	at javax.media.j3d.MediaContainerRetained.setURLString(MediaContainerRetained.java:94)
	at javax.media.j3d.MediaContainer.<init>(MediaContainer.java:95)
	at Plant.Test_Class.createSceneGraph(Test_Class.java:34)
	at Plant.Test_Class.init(Test_Class.java:48)
	at com.sun.j3d.utils.applet.MainFrame.run(MainFrame.java:267)
	at java.lang.Thread.run(Unknown Source)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at Plant.Test_Class.destroy(Test_Class.java:59)
	at com.sun.j3d.utils.applet.MainFrame$1.windowClosing(MainFrame.java:226)
	at java.awt.Window.processWindowEvent(Unknown Source)
	at java.awt.Window.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(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.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)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at Plant.Test_Class.destroy(Test_Class.java:59)
	at com.sun.j3d.utils.applet.MainFrame$1.windowClosing(MainFrame.java:226)
	at java.awt.Window.processWindowEvent(Unknown Source)
	at java.awt.Window.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(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.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)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at Plant.Test_Class.destroy(Test_Class.java:59)
	at com.sun.j3d.utils.applet.MainFrame$1.windowClosing(MainFrame.java:226)
	at java.awt.Window.processWindowEvent(Unknown Source)
	at java.awt.Window.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(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.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)
```


----------



## Marco13 (13. Apr 2009)

Das Format für die URL stimmt nicht, wie man ... *gääähn* auch rausfinden würde, wenn man sich einmal die Mühe machen würde, sich die API-Doku von "URL" anzusehen. Übergib dem MediaContainer direkt den Pfad statt einer URL, dann könnte es gehen.


----------



## Developer_X (13. Apr 2009)

hab ich schon probiert, dann kommt das:

```
objRoot.addChild(new PointSound(new MediaContainer("F:/Rayman/Sound.Library/Pirates.wav"),2,2,2, 2));
```


```
Exception in thread "Thread-3" javax.media.j3d.SoundException: MediaContainer: setURL - bad URL
	at javax.media.j3d.MediaContainerRetained.setURLString(MediaContainerRetained.java:116)
	at javax.media.j3d.MediaContainerRetained.setURLString(MediaContainerRetained.java:94)
	at javax.media.j3d.MediaContainer.<init>(MediaContainer.java:95)
	at Plant.Test_Class.createSceneGraph(Test_Class.java:38)
	at Plant.Test_Class.init(Test_Class.java:53)
	at com.sun.j3d.utils.applet.MainFrame.run(MainFrame.java:267)
	at java.lang.Thread.run(Unknown Source)
```


----------



## Marco13 (13. Apr 2009)

OK, das würde man sehen, wenn man sich die MediaContainer-Doku ansehen würde  : Dort muss ein URL-String übergeben werden, d.h. der String muss mit "file:" anfangen. Die absoluten Pfadangaben sollten dort auch raus, aber das nur nebenbei...


----------



## Developer_X (13. Apr 2009)

etwa so?

```
objRoot.addChild(new PointSound(new MediaContainer("file:F:/Rayman/Sound.Library/Pirates.wav"),2,2,2, 2));
```
Funktioniert immer noch nicht


----------



## Developer_X (13. Apr 2009)

oh du meinst, so, da kommt keine Fehlermeldung mehr, aber auch kein Sound, ich hör nichts, auch wenn ich den auf Punkt null setzte, und die Kamera auch auf Punkt null ist.

```
objRoot.addChild(new PointSound(new MediaContainer(new URL("file:///F:/Rayman/Sound.Library/THEME.wav")),20,0,0,0));
```


----------



## Marco13 (13. Apr 2009)

Mal sinnlos unfundiert rumgeraten (was dich ja hoffentlich nicht stört :bae: ) : Vermutlich muss man dem PointSound auch noch passende SchedulingBounds geben...


----------



## MiDniGG (13. Apr 2009)

Is bei dem Pfad ned einfach en slash zu viel?
Und braucht man das file:// überhaupt noch, wenn der String eh in ne URL umgewandelt wird?!


----------



## Developer_X (13. Apr 2009)

```
PointSound p = null;
				try {
					p = new PointSound(new MediaContainer(new URL("file:///F:/Rayman/Sound.Library/THEME.wav")),50,0,0,0);
				} catch (MalformedURLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				p.setSchedulingBounds(bounds);
				
		objRoot.addChild(p);
```
Soweit sind wir schonmal, und an MidNIgis, Frage, ja, man muss das "file:///" davor setzten.
Sonst klappt es nicht


----------



## Developer_X (13. Apr 2009)

aber ich hör immer noch keinen Sound


----------



## MiDniGG (13. Apr 2009)

Developer_X hat gesagt.:


> ```
> PointSound p = null;
> try {
> p = new PointSound(new MediaContainer(new URL("file:///F:/Rayman/Sound.Library/THEME.wav")),50,0,0,0);
> ...



WTF? Wie schreibst Du mich denn? :lol:


----------



## Developer_X (14. Apr 2009)

ok sorry, du heißt MiDniGG
aber. was mache ich falsch ich hör immer noch nichts
ich zeig euch am Besten meine ganze Klasse

```
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
import java.net.MalformedURLException;
import java.net.URL;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.behaviors.vp.*;       
	
	public class Test_Class extends Applet {       

    private SimpleUniverse universe ;
    private Canvas3D canvas;
    private BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 10.0);
    
      public void setupView() 
      { 
    	OrbitBehavior orbit = new OrbitBehavior(canvas,
                OrbitBehavior.REVERSE_ALL|OrbitBehavior.STOP_ZOOM);
        orbit.setSchedulingBounds(bounds);
        ViewingPlatform viewingPlatform = universe.getViewingPlatform();
        
        viewingPlatform.setNominalViewingTransform();
        viewingPlatform.setViewPlatformBehavior(orbit);       
        }       
          
        public BranchGroup createSceneGraph() {
        BranchGroup objRoot = new BranchGroup();       
        
  //hier!!!
        
			
				PointSound p = null;
				try {
					p = new PointSound(new MediaContainer(new URL("file:///F:/Rayman/Sound.Library/THEME.wav")),50,0,0,0);
				} catch (MalformedURLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				p.setSchedulingBounds(bounds);
				
		objRoot.addChild(p);
  //hier!!!      
        Color3f lightColor = new Color3f(.6f,.6f,.6f);
        AmbientLight ambientLight= new AmbientLight(lightColor);
        ambientLight.setInfluencingBounds(bounds);
        objRoot.addChild(ambientLight);
        DirectionalLight directionalLight = new DirectionalLight();
        directionalLight.setColor(lightColor);
        directionalLight.setInfluencingBounds(bounds);
        objRoot.addChild(directionalLight);       
        return objRoot;       
    }       
     
    public void init() {
         BranchGroup scene = createSceneGraph();       
         setLayout(new BorderLayout());
         
         GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
         canvas = new Canvas3D(config);
         add("Center", canvas);       
        
         universe = new SimpleUniverse(canvas);       
         setupView();       
         universe.addBranchGraph(scene);
    }       
    public void destroy() {universe.removeAllLocales();}       
   
    public static void main(String[] args) {new MainFrame(new Test_Class(), 256, 256);}
}
```


----------



## Vayu (14. Apr 2009)

hast du die Boxen eingeschaltet? 

oder evtl musst dem sound ja auch erst noch sagen, dass er sich abspielen soll?

einfach mal die Sound-API lesen. Weil PointSound erbt ja von Sound

Sound (Java 3D API)

Sound.setEnable(true) oder sowas


----------



## Developer_X (14. Apr 2009)

meine boxen sind an, aber das ich den Sound abspielen soll, wusste ich noch gar nciht, danke für den Tipp


----------



## Developer_X (14. Apr 2009)

also Point Sound erbt von Sound
d.h. alle Funktionen von "Sound" sind auch in PointSound + ein paar mehr sachen
so mein Problem ist immer noch da, keine ahnung wie ich den Sound starten so, "start" gibts ja leider nicht "isPlaying" geht nicht, und sachen wie loop gibts nur mit get "getLoop" also keine Ahnung wie ich das starten soll, weißt dus?

```
PointSound p = null;
				try {
					p = new PointSound(new MediaContainer(new URL("file:///F:/Rayman/Sound.Library/THEME.wav")),50,0,0,0);
				} catch (MalformedURLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				p.setSchedulingBounds(bounds);
				p.isPlaying();
```


----------



## Vayu (14. Apr 2009)

ich hab doch meine vermutung schon geschrieben ...

setEnable(true)

ich hab keine ahnung ob das damit geht, war nur ne vermutung


----------



## roque (14. Apr 2009)

übrigens wurde dir ja oben eh schon der Link zur API präsentiert, wenn du da auch nur einmal draufgeklickt hättest hättest du super schön und ausführlich lesen können wie man vorgeht um den Sound abzuspielen..

Beispielsweise der Abschnitt
_Enable Sound
....
Setting the enable flag to true during construction acts as a request to start the sound playing "as soon as it can" be started.
... _

weiter unten würde man dann die von Vayu genannte methode finden.. und noch vieles mehr an Erklärung..


----------



## Vayu (14. Apr 2009)

ich bin mal gespannt ob er die setLoop() methode findet ^^ weil es wird bestimmt bald die frage kommen, wieso der sound nur einmal abspielt


----------



## Developer_X (14. Apr 2009)

ok


----------



## Developer_X (14. Apr 2009)

als ob ich das mit set Enabled noch nciht ausprobiert hätte, und vieles mehr, auch mit, set´Loop. usw...
ich hör aber immer noch keinen Sound

```
PointSound p = null;
				try {
					p = new PointSound(new MediaContainer(new URL("file:///F:/Rayman/Sound.Library/THEME.wav")),1,0,0,0);
				} catch (MalformedURLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				p.setSchedulingBounds(bounds);
				p.setEnable(true);
				
		objRoot.addChild(p);
```


----------



## Vayu (14. Apr 2009)

dann keine ahnung. laut API sollte das so funktionieren. Vielleicht wird dein Methode in der der sound erzeugt wird noch gar nicht aufgerufen.

fliegen dir im Hintergrund irgendwelche Exceptions auf die Konsole?


----------



## void (14. Apr 2009)

Einfach mal nach "pointsound example" googlen und man findet z.B.

PointSound Example Code


----------



## Developer_X (14. Apr 2009)

das klappt bei mir setEnable true
nicht
über all bei all Exaples ist die Rede von JOAL
eine Frage. könnt ihrs starten nur mit dem Normalen Java3D Package?


----------



## Illuvatar (14. Apr 2009)

Die Sound-Unterstützung von Java3D ist noch nicht so 100% ausgereift.
In einem SimpleUniverse wird leider standardmäßig kein AudioDevice gesetzt, das muss man manuell machen:

```
import com.sun.j3d.audioengines.javasound.JavaSoundMixer;
// ...
// Dann beim Initialisieren:
         PhysicalEnvironment environment = universe.getViewer().getPhysicalEnvironment();
         AudioDevice device = new JavaSoundMixer(environment);
         device.initialize();
         environment.setAudioDevice(device);
```
Dein Code für den eigentlichen PointSound stimmt glaub ich mittlerweile (setEnable muss mit rein!).
Womit du ein Problem kriegen könntest ist, dass ein Applet nicht einfach so auf eine Sounddatei zugreifen darf, die irgendwo auf der Festplatte liegt. Aber du willst ja ein Applet...


----------



## Vayu (14. Apr 2009)

ich versteh eh nicht wieso da in seinen Codeschnipseln überall ABSOLUTE Pfade drinstehen? Statt dass er relative verwendet, die in sein Projekt zeigen ... das muss man doch später alles wieder umbauen und vor allem wiederfinden!


----------



## Sempah (14. Apr 2009)

Developer_X hat gesagt.:


> das klappt bei mir setEnable true
> nicht
> über all bei all Exaples ist die Rede von JOAL
> eine Frage. könnt ihrs starten nur mit dem Normalen Java3D Package?



Gibt es schon ein Dictionary: Deutsch-DevX; DevX-Deutsch?


----------



## mr-gurke (14. Apr 2009)

Vayu hat gesagt.:


> ich versteh eh nicht wieso da in seinen Codeschnipseln überall ABSOLUTE Pfade drinstehen? Statt dass er relative verwendet, die in sein Projekt zeigen ... das muss man doch später alles wieder umbauen und vor allem wiederfinden!


Kennt er denn schon den Unterschied zwischen relativen Pfaden und absoluten?

@Developer_X: Wenn du bei deinen Sounds und deinen Grafiken das Ziel nicht absolut, also F:/Rayman/Sound.Library/THEME.wav, sondern relativ (d.h. mit dem Navigieren durchs Dateisystem nicht ganz oben beim Arbeitsplatz anfängst, sondern dort wo du, bzw. dein Applet gerade ist) angibst, sparst du dir zum einen eine Menge potentielle Schreibfehler und wenn du deine Dateien, die dein Applet braucht in einem Unterverzeichnis von deiner Hauptklasse ablegst (z.B. Files\Sound\THEME.wav (so sieht ein relativer Pfad aus)), kannst du das ganze Projekt irgendwo hinverschieben z.b. nach C:\zuGrabeGetrageneProjekte\ und das Programm findet die Sounds und Bilder immer noch


----------



## Leroy42 (14. Apr 2009)

Sempah hat gesagt.:


> Gibt es schon ein Dictionary: Deutsch-DevX; DevX-Deutsch?



Nööh ;(

Aber vielleicht sollte man das mal in Angriff nehmen!


----------



## Developer_X (14. Apr 2009)

@ILLUVATOR
ich hab deinen code mal in mein applet, in "init" geschrieben, ging immer noch nciht, dann nante ich die init methode in eine public um, und änderte das ganze in extends JFrame 
dann hatts aber immer noch nicht funktioniert.


----------



## Illuvatar (14. Apr 2009)

Developer_X hat gesagt.:


> @ILLUVATOR


fast


> dann nante ich die init methode in eine public um


Der Satz macht leider keinen Sinn 0o


> und änderte das ganze in extends JFrame
> dann hatts aber immer noch nicht funktioniert.


Bei mir funktionierts. Dann steht ja jetzt wohl Aussage gegen Aussage


----------



## Developer_X (15. Apr 2009)

Hier mein Code als JFrame:

```
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
import java.net.MalformedURLException;
import java.net.URL;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.swing.JFrame;
import javax.vecmath.*;
import com.sun.j3d.utils.behaviors.vp.*;       
	
	public class Test_Class extends JFrame 
	{       

    private SimpleUniverse universe ;
    private Canvas3D canvas;
    private BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 10.0);
    
      public void setupView() 
      { 
    	OrbitBehavior orbit = new OrbitBehavior(canvas,
                OrbitBehavior.REVERSE_ALL|OrbitBehavior.STOP_ZOOM);
        orbit.setSchedulingBounds(bounds);
        ViewingPlatform viewingPlatform = universe.getViewingPlatform();
        
        viewingPlatform.setNominalViewingTransform();
        viewingPlatform.setViewPlatformBehavior(orbit);       
        }       
          
        public BranchGroup createSceneGraph() {
        BranchGroup objRoot = new BranchGroup();       
        
  //hier!!!
       
        MediaContainer myWave = null;
		try {
			myWave = new MediaContainer(new URL("file:///F:/Rayman/Sound.Library/Sounds/MainSound.wav"));
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        Point2f[] myAtten = {
        	    new Point2f( 100.0f, 1.0f ),
        	    new Point2f( 350.0f, 0.5f ),
        	    new Point2f( 600.0f, 0.0f )
        	};
        PointSound mySound = new PointSound( );
        mySound.setSoundData( myWave );
        mySound.setEnable( true );
        mySound.setInitialGain( 1.0f );
        mySound.setLoop( -1 );  // Loop forever
        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);
  //hier!!!      
        Color3f lightColor = new Color3f(.6f,.6f,.6f);
        AmbientLight ambientLight= new AmbientLight(lightColor);
        ambientLight.setInfluencingBounds(bounds);
        objRoot.addChild(ambientLight);
        DirectionalLight directionalLight = new DirectionalLight();
        directionalLight.setColor(lightColor);
        directionalLight.setInfluencingBounds(bounds);
        objRoot.addChild(directionalLight);       
        return objRoot;       
    }       
     
    public Test_Class()
    {
    	setVisible(true);
    	
         BranchGroup scene = createSceneGraph();       
         setLayout(new BorderLayout());
         
         GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
         canvas = new Canvas3D(config);
         add("Center", canvas);       
        
         universe = new SimpleUniverse(canvas);       
         setupView();       
         universe.addBranchGraph(scene);
    }       
    public void destroy() {universe.removeAllLocales();}       
   
    public static void main(String[] args) {new Test_Class();}
}
```


----------



## MiDniGG (15. Apr 2009)

Developer_X hat gesagt.:


> Hier mein Code als JFrame:
> ...



Dann passt jetzt alles?! Freut mich.


----------



## Developer_X (15. Apr 2009)

nein eben nicht, ich hab keine fehlermeldung und höre keinen Sound, auich wenn ich mit der Maus ranzoome, PS:
Das Beispiel könnt ihr bei euch kompilieren, dann will ich wissen obs bei euch klappt.


----------



## MiDniGG (15. Apr 2009)

Also bei mir kommt nur en schwarzes fenster, wenn ich es groß ziehe... absicht? Oder sollte eigentlich was zu sehen sein???


----------



## Developer_X (15. Apr 2009)

is absicht, aber kannst du was hören?


----------



## Developer_X (15. Apr 2009)

füge dem createthescenegraph ganze einfach nnoch folgendes zu:

```
objRoot.addChild(new Sphere(0.1f));
```


----------



## MiDniGG (15. Apr 2009)

Developer_X hat gesagt.:


> is absicht, aber kannst du was hören?



Nein

*Edit:* Schau Dir nochmal den Beitrag von Illuvatar an. Damit geht's bei mir 
*Edit1:* Beitrag #27


----------



## Developer_X (15. Apr 2009)

ich hoffe doch sehr, du hast daran gedacht den PFad zur mUsik zu verändern oder?
Wenn nicht, nehm einen längeren Sound. den du auf deinem PC hast du starte ihn dann
und sag mir dann, kannst du was hören?


----------



## MiDniGG (15. Apr 2009)

Developer_X hat gesagt.:


> ich hoffe doch sehr, du hast daran gedacht den PFad zur mUsik zu verändern oder?
> Wenn nicht, nehm einen längeren Sound. den du auf deinem PC hast du starte ihn dann
> und sag mir dann, kannst du was hören?



Ganz bescheuert bin ich nicht ^^
Hab das ding.wav von M$ genommen ^^ Ganz schön nervig bei nem Endlos-Loop :lol:


----------



## Developer_X (15. Apr 2009)

ja, also hörst du was?


----------



## MiDniGG (15. Apr 2009)

Developer_X hat gesagt.:


> ja, also hörst du was?



Siehe Seite 2 letzter Beitrag


----------



## Developer_X (15. Apr 2009)

geht imer noch nicht+ Fehlermeldung

```
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
import java.net.MalformedURLException;
import java.net.URL;

import com.sun.j3d.audioengines.javasound.JavaSoundMixer;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.swing.JFrame;
import javax.vecmath.*;
import com.sun.j3d.utils.behaviors.vp.*;       
	
	public class Test_Class extends JFrame 
	{       

    private SimpleUniverse universe ;
    private Canvas3D canvas;
    private BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 10.0);
    
      public void setupView() 
      { 
    	OrbitBehavior orbit = new OrbitBehavior(canvas,
                OrbitBehavior.REVERSE_ALL|OrbitBehavior.STOP_ZOOM);
        orbit.setSchedulingBounds(bounds);
        ViewingPlatform viewingPlatform = universe.getViewingPlatform();
        
        viewingPlatform.setNominalViewingTransform();
        viewingPlatform.setViewPlatformBehavior(orbit);       
        }       
          
        public BranchGroup createSceneGraph() {
        BranchGroup objRoot = new BranchGroup();       
        
  //hier!!!
        objRoot.addChild(new Bush().Bush());
       
        MediaContainer myWave = null;
		try {
			myWave = new MediaContainer(new URL("file:///F:/Rayman/Sound.Library/Sounds/MainSound.wav"));
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        Point2f[] myAtten = {
        	    new Point2f( 100.0f, 1.0f ),
        	    new Point2f( 350.0f, 0.5f ),
        	    new Point2f( 600.0f, 0.0f )
        	};
        PointSound mySound = new PointSound( );
        mySound.setSoundData( myWave );
        mySound.setEnable( true );
        mySound.setInitialGain( 1.0f );
        mySound.setLoop( -1 );  // Loop forever
        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);
  //hier!!!      
        Color3f lightColor = new Color3f(.6f,.6f,.6f);
        AmbientLight ambientLight= new AmbientLight(lightColor);
        ambientLight.setInfluencingBounds(bounds);
        objRoot.addChild(ambientLight);
        DirectionalLight directionalLight = new DirectionalLight();
        directionalLight.setColor(lightColor);
        directionalLight.setInfluencingBounds(bounds);
        objRoot.addChild(directionalLight);     
                
        
        return objRoot;       
    }       
     
    public Test_Class()
    {
    	setVisible(true);
    	
    	 PhysicalEnvironment environment = universe.getViewer().getPhysicalEnvironment();
         AudioDevice device = new JavaSoundMixer(environment);
         device.initialize();
         environment.setAudioDevice(device);
          
         BranchGroup scene = createSceneGraph();       
         setLayout(new BorderLayout());
         
         GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
         canvas = new Canvas3D(config);
         add("Center", canvas);       
        
         universe = new SimpleUniverse(canvas);       
         setupView();       
         universe.addBranchGraph(scene);
    }       
   
    public static void main(String[] args) {new Test_Class();}
}
```


```
Exception in thread "main" java.lang.NullPointerException
	at Plant.Test_Class.<init>(Test_Class.java:81)
	at Plant.Test_Class.main(Test_Class.java:98)
```


----------



## MiDniGG (15. Apr 2009)

Developer_X hat gesagt.:


> geht imer noch nicht+ Fehlermeldung
> 
> ```
> import java.awt.BorderLayout;
> ...



Dann schau wo die Nullpointer geschmissen wird und setz den Block den du eingefügt hast n bisschen weiter runter


----------



## Developer_X (15. Apr 2009)

ja ejtzt klappts bei mir. aber eine Sache noch

Der Sound wird nicht leiser wenn ich weggehe,
PS:
Natürlich habe ich "myBounds" soklein gemacht damit es nur noch 1 ist


----------



## Developer_X (15. Apr 2009)

MidNIgi, bitte, wieso hör ich den Sound über all?


----------



## MiDniGG (15. Apr 2009)

Developer_X hat gesagt.:


> MidNIgi, bitte, wieso hör ich den Sound über all?



Keine Ahnung. Ich kenn mich mit dem Zeuchs noch weniger aus als Du... Und es darf doch wirklich nicht so scher sein meinen Nick richtig zu schreiben :autsch:


----------



## Vayu (15. Apr 2009)

ich würd dich wahrscheinlich immer komplett klein schreiben  diese groß- und kleinbuchstaben gewurschtel is nix für mich midnigg


----------



## MiDniGG (15. Apr 2009)

Vayu hat gesagt.:


> ich würd dich wahrscheinlich immer komplett klein schreiben  diese groß- und kleinbuchstaben gewurschtel is nix für mich midnigg



Das stört mich ja ned. Wär mir auch egal wenn de mIdNiGg schreibst. Aba wenigstens die Buchstaben sollten passen ^^


----------



## Leroy42 (15. Apr 2009)

MiDniGG hat gesagt.:


> Das stört mich ja ned. Wär mir auch egal wenn de mIdNiGg schreibst. Aba wenigstens die Buchstaben sollten passen ^^



Okay, aber dann verrate uns doch auch, was _MiDniGG_ bedeuten soll. :bahnhof:


----------



## MiDniGG (15. Apr 2009)

Leroy42 hat gesagt.:


> Okay, aber dann verrate uns doch auch, was _MiDniGG_ bedeuten soll. :bahnhof:



Nö 
Naja. OK. Überzeugt :-D
Wenn Du "Hackers 2" kennst oder zu der Zeit Nachrichten gelesen hast :-D Dann sagt Dir der Name "Kevin Mitnick" vllt. was. Ich fand den Namen toll hab en bissl umgeändert und seither, ohne irgendwelche Schadenersatzklagen o.ä., verwendet ^^

cya


----------



## Leroy42 (15. Apr 2009)

Das hilft mir auch nicht viel weiter; aber egal:

Danke!


----------



## Vayu (15. Apr 2009)

man kann es sich auch zu leicht machen Leroy ... Kevin Mitnick ? Wikipedia

lesen bildet


----------



## Illuvatar (15. Apr 2009)

Jetzt ist mal genug mit Offtopic, ja?
Die Lösung würde mich um ehrlich zu sein auch interessieren - ich hab keine gefunden. Ich kann (in Bezug auf das Problem) nichts falsches in Developer_Xs Code finden.


----------



## Developer_X (15. Apr 2009)

die Lösung ist folgende, wenns dich interessiert:

```
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
import java.net.MalformedURLException;
import java.net.URL;

import com.sun.j3d.audioengines.javasound.JavaSoundMixer;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.swing.JFrame;
import javax.vecmath.*;
import com.sun.j3d.utils.behaviors.vp.*;       
	
	public class Test_Class extends JFrame 
	{       

    private SimpleUniverse universe ;
    private Canvas3D canvas;
    private BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 10.0);
    
      public void setupView() 
      { 
    	OrbitBehavior orbit = new OrbitBehavior(canvas,
                OrbitBehavior.REVERSE_ALL|OrbitBehavior.STOP_ZOOM);
        orbit.setSchedulingBounds(bounds);
        ViewingPlatform viewingPlatform = universe.getViewingPlatform();
        
        viewingPlatform.setNominalViewingTransform();
        viewingPlatform.setViewPlatformBehavior(orbit);       
        }       
          
        public BranchGroup createSceneGraph() {
        BranchGroup objRoot = new BranchGroup();       
        
  //hier!!!
      
       
        MediaContainer myWave = null;
		try {
			myWave = new MediaContainer(new URL("file:///F:/Rayman/Sound.Library/Sounds/MainSound.wav"));
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        Point2f[] myAtten = {
        	    new Point2f( 100.0f, 1.0f ),
        	    new Point2f( 350.0f, 0.5f ),
        	    new Point2f( 600.0f, 0.0f )
        	};
        PointSound mySound = new PointSound( );
        mySound.setSoundData( myWave );
        mySound.setEnable( true );
        mySound.setInitialGain( 1.0f );
        mySound.setLoop(-1);  // Loop forever
        mySound.setPosition( new Point3f( 0.0f, 0.0f, 0.0f ) );
        mySound.setDistanceGain( myAtten );
        BoundingSphere myBounds = new BoundingSphere(
        	    new Point3d(), 1.0 );
        	mySound.setSchedulingBounds( myBounds );

        	objRoot.addChild(mySound);
  //hier!!!      
        Color3f lightColor = new Color3f(.6f,.6f,.6f);
        AmbientLight ambientLight= new AmbientLight(lightColor);
        ambientLight.setInfluencingBounds(bounds);
        objRoot.addChild(ambientLight);
        DirectionalLight directionalLight = new DirectionalLight();
        directionalLight.setColor(lightColor);
        directionalLight.setInfluencingBounds(bounds);
        objRoot.addChild(directionalLight);     
                
        
        return objRoot;       
    }       
     
    public Test_Class()
    {
    	setVisible(true);
    	
          
         BranchGroup scene = createSceneGraph();       
         setLayout(new BorderLayout());
         
         GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
         canvas = new Canvas3D(config);
         add("Center", canvas);       
        
         universe = new SimpleUniverse(canvas);       
         setupView();       
         universe.addBranchGraph(scene);
         

    	 PhysicalEnvironment environment = universe.getViewer().getPhysicalEnvironment();
         AudioDevice device = new JavaSoundMixer(environment);
         device.initialize();
         environment.setAudioDevice(device);
    }       
   
    public static void main(String[] args) {new Test_Class();}
}
```
Aber illuvatar eine Frage, desto näher ich mich zum null punkt bewege, desto lauter sollte es doch werden, dem ist aber nicht so, wieso?


----------



## Illuvatar (15. Apr 2009)

Developer_X hat gesagt.:


> Aber illuvatar eine Frage, desto näher ich mich zum null punkt bewege, desto lauter sollte es doch werden, dem ist aber nicht so, wieso?


Genau das ist, was ich nicht weiß.


----------



## Marco13 (16. Apr 2009)

Ohne das jetzt komplett verfolgt zu haben: Die SchedulingBounds haben einen Radius von 1.0, aber die Attenuation einen von 100.0 - kann's sein, dass das einfach nicht zusammenpasst?


----------



## Illuvatar (16. Apr 2009)

Hm ich weiß nicht warum er jetzt den schedulingBounds-Radius auf 1 gesetzt hat - aber ich hab vorhin einiges rumprobiert, mit einem genug großen Radius, und hab es nicht zum funktionieren gebracht.
Seltsam - hab es grad nochmal probiert, und wenn ich den Radius auf 1 setze, höre ich den Sound immer noch, auch wenn ich mit der Kamera meilenweit weg bin.


----------



## Developer_X (16. Apr 2009)

Ja und genau das kanns ja wohl nicht sein, die Klasse heißt doch PointSound, gerade weil sie
den Sounda auf einen Punkt konfiguriert, und das ist das seltsame


----------



## diggaa1984 (16. Apr 2009)

also so wie ich das mal zu Anfang des Threads gelesen hab heisst die klasse pointSound, weil sie ausgehend von einem Punkt in alle denkbaren Richtungen die "Soundwellen" sendet und nicht kegelförmig mit nem 50° Winkel in Richtung xy oder dergleichen.


----------



## MiDniGG (16. Apr 2009)

diggaa1984 hat gesagt.:


> also so wie ich das mal zu Anfang des Threads gelesen hab heisst die klasse pointSound, weil sie ausgehend von einem Punkt in alle denkbaren Richtungen die "Soundwellen" sendet und nicht kegelförmig mit nem 50° Winkel in Richtung xy oder dergleichen.



Macht doch nix... Wenn man wegzommt sollte es leiser werden (zumindest lt. API und meinem mittelmäßigen Englisch :-D ) und das ist ja grad das Problem


----------



## Developer_X (16. Apr 2009)

auch wenns sies überall hinsenden würde, müsste man es ab ner bestimmten Entfernung leiser oder gar nicht mehr hören können.!


----------



## diggaa1984 (16. Apr 2009)

da widerspreche ich ja gar nich


----------



## Developer_X (16. Apr 2009)

is ja ok, aber das momentane Problem bezieht sich darauf, dass der Sound nicht leiser wird, wenn man weiter weg geht, verstehst du?

Die Rede davon, dass die Wellen sich nicht über hin verbreiten würden, war nicht gewesen.

Kannst du mir vielleicht weiterhelfen, und sagen wieso dies nicht der fall ist?

PS:ich hab ein neues Benutzterbild


----------



## diggaa1984 (16. Apr 2009)

ne, ich hab zwar auch anfangs mal die API gelesen und hab nur nen schimmer Ahnung davon was in etwa dazu genutzt werden muss um das Geforderte umzusetzen, aber ich denke, dass die anderen sich schon intensiver damit beschäftigt haben, zumindest mit deinem Code um da besser zu helfen. Mich jetzt noch in deinen Code reinzudenken wär mir zu aufwendig.


----------



## Spacerat (16. Apr 2009)

Ich liefere hier mal  'ne Übersetzung die weiterhelfen könnte: dict.cc Wörterbuch :: attenuation :: Englisch-Deutsch-übersetzung

In dem Codeschnipsel der API wird dort noch ein Point2f-Array dafür angegeben (andeutungsweise). Bei Developer_X fehlt dieses. Das würde bedeuten, das der Sound gar nicht abnimmt, wenn "attenuation" standardmässig auf 0 steht.


----------



## Developer_X (16. Apr 2009)

@Spacerat,  hab ich doch hier:

```
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
import java.net.MalformedURLException;
import java.net.URL;

import com.sun.j3d.audioengines.javasound.JavaSoundMixer;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.swing.JFrame;
import javax.vecmath.*;
import com.sun.j3d.utils.behaviors.vp.*;       
	
	public class Test_Class extends JFrame 
	{       

    private SimpleUniverse universe ;
    private Canvas3D canvas;
    private BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 10.0);
    
      public void setupView() 
      { 
    	OrbitBehavior orbit = new OrbitBehavior(canvas,
                OrbitBehavior.REVERSE_ALL|OrbitBehavior.STOP_ZOOM);
        orbit.setSchedulingBounds(bounds);
        ViewingPlatform viewingPlatform = universe.getViewingPlatform();
        
        viewingPlatform.setNominalViewingTransform();
        viewingPlatform.setViewPlatformBehavior(orbit);       
        }       
          
        public BranchGroup createSceneGraph() {
        BranchGroup objRoot = new BranchGroup();       
        
  //hier!!!
       
        MediaContainer myWave = null;
		try {
			myWave = new MediaContainer(new URL("file:///F:/Rayman/Sound.Library/Sounds/MainSound.wav"));
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        Point2f[] myAtten = {
        	    new Point2f( 100.0f, 1.0f ),
        	    new Point2f( 350.0f, 0.5f ),
        	    new Point2f( 600.0f, 0.0f )
        	};
        PointSound mySound = new PointSound( );
        mySound.setSoundData( myWave );
        mySound.setEnable( true );
        mySound.setInitialGain( 1.0f );
        mySound.setLoop(-1);  // Loop forever
        mySound.setPosition( new Point3f( 0.0f, 0.0f, 0.0f ) );
        mySound.setDistanceGain( myAtten );
        BoundingSphere myBounds = new BoundingSphere(
        	    new Point3d(), 1.0 );
        	mySound.setSchedulingBounds( myBounds );

        	objRoot.addChild(mySound);
  //hier!!!      
        Color3f lightColor = new Color3f(.6f,.6f,.6f);
        AmbientLight ambientLight= new AmbientLight(lightColor);
        ambientLight.setInfluencingBounds(bounds);
        objRoot.addChild(ambientLight);
        DirectionalLight directionalLight = new DirectionalLight();
        directionalLight.setColor(lightColor);
        directionalLight.setInfluencingBounds(bounds);
        objRoot.addChild(directionalLight);     
                
        
        return objRoot;       
    }       
     
    public Test_Class()
    {
    	setVisible(true);
    	
          
         BranchGroup scene = createSceneGraph();       
         setLayout(new BorderLayout());
         
         GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
         canvas = new Canvas3D(config);
         add("Center", canvas);       
        
         universe = new SimpleUniverse(canvas);       
         setupView();       
         universe.addBranchGraph(scene);
         

    	 PhysicalEnvironment environment = universe.getViewer().getPhysicalEnvironment();
         AudioDevice device = new JavaSoundMixer(environment);
         device.initialize();
         environment.setAudioDevice(device);
    }       
   
    public static void main(String[] args) {new Test_Class();}
}
```
Die für uns interessante stelle ist mit "//hier!!!" gekennzeichnet


----------



## Spacerat (16. Apr 2009)

Ok... hatte wohl meine Fielmann-Brille nicht auf...
Hast du mal versucht geringere Distanzwerte zu verwenden? Möglicherweise auch alle zwischen 0 und 1 liegend (z.B. 0.1 statt 100)?


----------



## Developer_X (16. Apr 2009)

ja hab ich, geht net


----------



## Developer_X (17. Apr 2009)

irgendjemand muss doch eine idee haben, bitte könnt ihr mir weiterhelfen?


----------

