# BackgroundSound wird nicht abgespielt



## Caesar (27. Dez 2005)

Ave zusammen!

Ich hab hier ein Problem mit dem BackgroundSound. Es wird keine Exception geworfen, aber der Sound wird einfach nicht abgespielt - zumindest nicht hörbar. Hier mal der Code:


```
package java3d;

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;

import javax.media.j3d.*;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;

import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
import com.sun.j3d.utils.behaviors.mouse.MouseZoom;
import com.sun.j3d.utils.geometry.Sphere;
import com.sun.j3d.utils.universe.SimpleUniverse;

public class SoundTest extends Applet {
	
	SimpleUniverse u;
	
	public void init() {
		setLayout(new BorderLayout());
		GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
		Canvas3D canvas = new Canvas3D(config);
		u = new SimpleUniverse(canvas);
		add("Center", canvas);
		
		u.addBranchGraph(createScene());
		u.getViewingPlatform().setNominalViewingTransform();
	}
	
	BranchGroup createScene() {
		BranchGroup bg = new BranchGroup();
		BoundingSphere bounds = new BoundingSphere(new Point3d(), 10000f);
		
		//Erstellen einer roten Kugel
		Appearance app = new Appearance();
		app.setMaterial(new Material(new Color3f(1f,0.2f,0.2f), new Color3f(1f,0f,0f), 
				new Color3f(1f,1f,1), new Color3f(1f,1f,0.9f), 60));
		Sphere sphere = new Sphere(0.3f, Sphere.GENERATE_NORMALS, 80, app);
		bg.addChild(sphere);
		
		//Licht hinzufügen
		AmbientLight ambient = new AmbientLight(true, new Color3f(0.5f,0.5f,0.4f));
		ambient.setInfluencingBounds(bounds);
		bg.addChild(ambient);
		
		DirectionalLight direct = new DirectionalLight(true, new Color3f(0.8f,0.8f,0.8f), 
				new Vector3f(-1.5f,-1,-0.5f));
		direct.setInfluencingBounds(bounds);
		bg.addChild(direct);
		
		//Maussteuerung einbauen
		MouseRotate rotor = new MouseRotate(u.getViewingPlatform().getViewPlatformTransform());
		rotor.setSchedulingBounds(bounds);
		bg.addChild(rotor);
		
		MouseZoom zoom = new MouseZoom(u.getViewingPlatform().getViewPlatformTransform());
		zoom.setSchedulingBounds(bounds);
		bg.addChild(zoom);
		
		//Das hier dürfte der relevante Teil sein:
		MediaContainer mc = new MediaContainer("file:./rain.wav");
		BackgroundSound sound = new BackgroundSound(mc, 1.0f, -1, false, true, true, bounds, 0);
		sound.setSchedulingBounds(bounds);
		bg.addChild(sound);
		
		bg.compile();
		return bg;
	}
	
	public static void main(String[] args) {
		new MainFrame(new SoundTest(), 800, 600);
	}
}
```



€DIT: 





			
				sun hat gesagt.:
			
		

> Sound Bugs
> 
> * 4187092 Filtering causes loud, sweeping resonance to be added to most sounds
> * 4187093 Cross-talk cancellation for sound playback in not implemented
> ...



Könnte es daran liegen?


----------



## Caesar (27. Dez 2005)

Juhu, ich habs  


```
AudioDevice audioDev = u.getViewer().createAudioDevice();  //  (u ist das SimpleUniverse)
```
Nachdem ich die Zeile in Z. 63 eingefügt habe, hat's geklappt. Ich hab mir mal den Code vom J3D-Beispielapplet zum Sound angeschaut; da fand sich die Zeile. Ich hab das mal testweise auskommentiert, weil Eclipse gemeckert hat ("The local variable audioDev is never read"), dann hat auch das Beispiel nicht mehr funktioniert. 
Das Problem wär also gelöst. Wär aber trotzdem nett, wenn mir jemand erklärte, was genau die Zeile bewirkt ???:L .


----------



## Illuvatar (28. Dez 2005)

Ave Caesar, morituri te salutant!

Äh tja was es jetzt genau bewirkt weiß ich nicht, ich weiß nur noch, dass ich genau das auch schonmal länger gesucht hab  is mir bloß net mehr eingefallen als ich das von dir da oben gesehen hatte.
Das wichtige daran ist halt das "create audio device". J3D scheint halt keinen Sound spielen zu können, wenn es das Device noch net gemacht hat.
Schonmal was mit DirectX gemacht? Da brauchst du auch für alles verschiedene Devices, zum Beispiel machst du dir wenn du Sound haben willst da auch erstmal nen Device.


----------



## Caesar (28. Dez 2005)

Salve!
Mit DirectX hab ich noch nix gemacht, aber eigentlich isses ja logisch. Dann müsste ja eigentlich auch das:

```
u.getViewer().createAudioDevice();
```
reichen, oder? Mal ausprobieren.... Joa, geht auch. Und Eclipse ist auch zufrieden.

Multa cum gratia
Caesar


----------

