Java3D Point Sound

Status
Nicht offen für weitere Antworten.
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 ^^
 
Okay, aber dann verrate uns doch auch, was MiDniGG bedeuten soll. :bahnhof:

😛
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
 
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.
 
die Lösung ist folgende, wenns dich interessiert:
Java:
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?
 
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?
 
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.
 
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
 
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.
 
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 🙂
 
auch wenns sies überall hinsenden würde, müsste man es ab ner bestimmten Entfernung leiser oder gar nicht mehr hören können.!
 
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
 
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.
 
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.
 
Zuletzt bearbeitet von einem Moderator:
@Spacerat, hab ich doch hier:
Java:
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
 
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)?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben