diff options
Diffstat (limited to 'src/classes/share/com/sun/j3d/audioengines/AudioEngine.java')
-rw-r--r-- | src/classes/share/com/sun/j3d/audioengines/AudioEngine.java | 208 |
1 files changed, 208 insertions, 0 deletions
diff --git a/src/classes/share/com/sun/j3d/audioengines/AudioEngine.java b/src/classes/share/com/sun/j3d/audioengines/AudioEngine.java new file mode 100644 index 0000000..8d4d36f --- /dev/null +++ b/src/classes/share/com/sun/j3d/audioengines/AudioEngine.java @@ -0,0 +1,208 @@ +/* + * $RCSfile$ + * + * Copyright (c) 2004 Sun Microsystems, Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistribution of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistribution in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Sun Microsystems, Inc. or the names of + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * This software is provided "AS IS," without a warranty of any + * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND + * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY + * EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL + * NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF + * USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS + * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR + * ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, + * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND + * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR + * INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + * You acknowledge that this software is not designed, licensed or + * intended for use in the design, construction, operation or + * maintenance of any nuclear facility. + * + * $Revision$ + * $Date$ + * $State$ + */ + +package com.sun.j3d.audioengines; + +import javax.media.j3d.*; + +/** + * The AudioEngine Class defines an audio output device that generates + * sound 'image' from scene graph. + * An AudioEngine object encapsulates the AudioDevice's basic information. + * + * <p> + * NOTE: AudioEngine developers should not subclass this class directly. + * Subclass AudioEngine3DL2 instead. + */ +public class AudioEngine implements AudioDevice { + + /* + * This device's UNIX file descriptor + */ + int fileDescriptor; + + /* + * Type of audio output device J3D sound is played over: + * HEADPHONE, MONO_SPEAKER, STEREO_SPEAKERS + */ + int audioPlaybackType = HEADPHONES; + + /* + * Distance from center ear (midpoint between ears) to physical speaker. + * Default reflects distance for headphones. + * For two speakers it is assumed that the speakers are the same + * distance from the listener and that + */ + float distanceToSpeaker = 0.0f; + + /* + * Angle between the vector from center ear parallel to head coordiate + * Z axis and the vector from the center ear to the speaker. + * For two speakers it is assumed that the speakers are placed at the + * same angular offset from the listener. + */ + float angleOffsetToSpeaker = 0.0f; + + /* + * Channels currently available + */ + int channelsAvailable = 8; + + /* + * Total number of Channels ever available + */ + int totalChannels = 8; + + /** + * Construct a new AudioEngine with the specified P.E. + * @param physicalEnvironment the physical environment object where we + * want access to this device. + */ + public AudioEngine(PhysicalEnvironment physicalEnvironment ) { + physicalEnvironment.setAudioDevice(this); + } + + /** + * Code to initialize the device + * @return flag: true is initialized sucessfully, false if error + */ + public boolean initialize() { + // Expected to be over-ridden by extending class + return true; + } + + /** + * Code to close the device + * @return flag: true is closed sucessfully, false if error + */ + public boolean close() { + // Expected to be over-ridden by extending class + return true; + } + + /* + * Audio Playback Methods + */ + /** + * Set Type of Audio Playback physical transducer(s) sound is output to. + * Valid types are HEADPHONE, MONO_SPEAKER, STEREO_SPEAKERS + * @param type of audio output device + */ + public void setAudioPlaybackType(int type) { + audioPlaybackType = type; + } + + /** + * Get Type of Audio Playback Output Device + * returns audio playback type to which sound is currently output + */ + public int getAudioPlaybackType() { + return audioPlaybackType; + } + + /** + * Set Distance from the Center Ear to a Speaker + * @param distance from the center ear and to the speaker + */ + public void setCenterEarToSpeaker(float distance) { + distanceToSpeaker = distance; + } + + /** + * Get Distance from Ear to Speaker + * returns value set as distance from listener's ear to speaker + */ + public float getCenterEarToSpeaker() { + return distanceToSpeaker; + } + + /** + * Set Angle Offset To Speaker + * @param angle in radian between head coordinate Z axis and vector to speaker */ + public void setAngleOffsetToSpeaker(float angle) { + angleOffsetToSpeaker = angle; + } + + /** + * Get Angle Offset To Speaker + * returns value set as angle between vector to speaker and Z head axis + */ + public float getAngleOffsetToSpeaker() { + return angleOffsetToSpeaker; + } + + /** + * Query total number of channels available for sound rendering + * for this audio device. + * returns number of maximum sound channels you can run with this + * library/device-driver. + */ + public int getTotalChannels() { + // this method should be overridden by a device specific implementation + return (totalChannels); + } + + /** + * Query number of channels currently available for use by the + * returns number of sound channels currently available (number + * not being used by active sounds. + */ + public int getChannelsAvailable() { + return (channelsAvailable); + } + + /** + * Query number of channels that would be used to render a particular + * sound node. + * @param sound refenence to sound node that query to be performed on + * returns number of sound channels used by a specific Sound node + * @deprecated This method is now part of the Sound class + */ + public int getChannelsUsedForSound(Sound sound) { + if (sound != null) + return sound.getNumberOfChannelsUsed(); + else + return -1; + } +} |