📄 sound3d.java
字号:
package sound3d;import java.awt.*;import java.awt.event.*;import java.applet.*;import java.net.URL;import com.sun.j3d.utils.applet.MainFrame;import com.sun.j3d.utils.geometry.ColorCube;import com.sun.j3d.utils.universe.*;import java.io.File;import java.security.*;import javax.media.j3d.*;import javax.vecmath.*;public class Sound3D extends Applet { boolean isStandalone = false; private static int filenamesGiven = 0; private static URL[] url = new URL[3]; private static String[] filename = new String[3]; private static String path = null; private static boolean filenamesSet = false; private SimpleUniverse u = null; public BranchGroup createSceneGraph() { BranchGroup objRoot = new BranchGroup(); TransformGroup objTrans = new TransformGroup(); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objRoot.addChild(objTrans); objTrans.addChild(new ColorCube(0.4)); Transform3D yAxis = new Transform3D(); Alpha rotation = new Alpha(-1, Alpha.INCREASING_ENABLE, 0, 0, 20000, 0, 0, 0, 0, 0); RotationInterpolator rotator = new RotationInterpolator(rotation, objTrans, yAxis, 0.0f, (float) Math.PI*2.0f); BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0); rotator.setSchedulingBounds(bounds); objTrans.addChild(rotator); BackgroundSound sound1 = new BackgroundSound(); PointSound sound2 = new PointSound(); PointSound sound3 = new PointSound(); sound1.setCapability(PointSound.ALLOW_ENABLE_WRITE); sound1.setCapability(PointSound.ALLOW_INITIAL_GAIN_WRITE); sound1.setCapability(PointSound.ALLOW_SOUND_DATA_WRITE); sound1.setCapability(PointSound.ALLOW_SCHEDULING_BOUNDS_WRITE); sound1.setCapability(PointSound.ALLOW_CONT_PLAY_WRITE); sound1.setCapability(PointSound.ALLOW_RELEASE_WRITE); sound1.setCapability(PointSound.ALLOW_DURATION_READ); sound1.setCapability(PointSound.ALLOW_IS_PLAYING_READ); sound1.setCapability(PointSound.ALLOW_LOOP_WRITE); sound2.setCapability(PointSound.ALLOW_ENABLE_WRITE); sound2.setCapability(PointSound.ALLOW_INITIAL_GAIN_WRITE); sound2.setCapability(PointSound.ALLOW_SOUND_DATA_WRITE); sound2.setCapability(PointSound.ALLOW_SCHEDULING_BOUNDS_WRITE); sound2.setCapability(PointSound.ALLOW_CONT_PLAY_WRITE); sound2.setCapability(PointSound.ALLOW_RELEASE_WRITE); sound2.setCapability(PointSound.ALLOW_DURATION_READ); sound2.setCapability(PointSound.ALLOW_IS_PLAYING_READ); sound2.setCapability(PointSound.ALLOW_POSITION_WRITE); sound2.setCapability(PointSound.ALLOW_LOOP_WRITE); sound3.setCapability(PointSound.ALLOW_ENABLE_WRITE); sound3.setCapability(PointSound.ALLOW_INITIAL_GAIN_WRITE); sound3.setCapability(PointSound.ALLOW_SOUND_DATA_WRITE); sound3.setCapability(PointSound.ALLOW_SCHEDULING_BOUNDS_WRITE); sound3.setCapability(PointSound.ALLOW_CONT_PLAY_WRITE); sound3.setCapability(PointSound.ALLOW_RELEASE_WRITE); sound3.setCapability(PointSound.ALLOW_DURATION_READ); sound3.setCapability(PointSound.ALLOW_IS_PLAYING_READ); sound3.setCapability(PointSound.ALLOW_POSITION_WRITE); BoundingSphere soundBounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0); sound1.setSchedulingBounds(soundBounds); sound2.setSchedulingBounds(soundBounds); sound3.setSchedulingBounds(soundBounds); objTrans.addChild(sound1); objTrans.addChild(sound2); objTrans.addChild(sound3); SimpleSoundsBehavior player = new SimpleSoundsBehavior( sound1, sound2, sound3, url[0], url[1], url[2], soundBounds); player.setSchedulingBounds(soundBounds); objTrans.addChild(player); objRoot.compile(); return objRoot; } public Sound3D() { } public void init() { if (!filenamesSet) { if (path == null) { path = getCodeBase().toString(); } int j; for (j=0; j<filenamesGiven; j++) filename[j] = new String(path + "/" + filename[j]); for (int i=j; i<3; i++) { if (i == 0) filename[0] = new String(path + "/techno_machine.au"); if (i == 1) filename[1] = new String(path + "/hello_universe.au"); if (i == 2) filename[2] = new String(path + "/roar.au"); } filenamesSet = true; } setLayout(new BorderLayout()); GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); Canvas3D c = new Canvas3D(config); add("Center", c); for (int i=0; i<3; i++) { try { url[i] = new URL(filename[i]); } catch (Exception e) { System.out.println(e.getMessage()); return; } } u = new SimpleUniverse(c); AudioDevice audioDev = u.getViewer().createAudioDevice(); BranchGroup scene = createSceneGraph(); u.getViewingPlatform().setNominalViewingTransform(); u.addBranchGraph(scene); } public void destroy() { u.cleanup(); } //Main method public static void main(String[] args) { Sound3D applet = new Sound3D(); applet.isStandalone = true; if (args.length > 0) { if ( (args[0].startsWith("file"+File.pathSeparator)) || (args[0].startsWith("http"+File.pathSeparator)) ) { path = args[0]; } else { path = "file:" + args[0]; } } else { path = "file:."; } for (int i=0; i<3; i++) { if (args.length > (i+1)) { filename[i] = args[i+1]; if (filename[i] != null) { filenamesGiven++ ; } } else break; } Frame frame; frame = new Frame() { protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } public synchronized void setTitle(String title) { super.setTitle(title); enableEvents(AWTEvent.WINDOW_EVENT_MASK); } }; frame.setTitle("Sound3D Frame"); frame.add(applet, BorderLayout.CENTER); applet.init(); applet.start(); frame.setSize(400,320); Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); frame.setLocation((d.width - frame.getSize().width) / 2, (d.height - frame.getSize().height) / 2); frame.setVisible(true); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -