Interface AudioDevice3D
-
- All Superinterfaces:
AudioDevice
- All Known Subinterfaces:
AudioDevice3DL2
- All Known Implementing Classes:
AudioEngine3D
,AudioEngine3DL2
,JavaSoundMixer
public interface AudioDevice3D extends AudioDevice
The AudioDevice3D class defines a 3D audio device that is used to set sound and aural attributes.After the application chooses the AudioDevice3D that Java3D sound is to be rendered on, the Java 3D Sound Scheduler will call these methods for all active sounds to render them on the audio device.
The intent is for this interface to be implemented by AudioDevice Driver developers using a software or hardware sound engine of their choice.
Methods in this interface provide the Java3D Core a generic way to set and query the audio device the application has chosen audio rendering to be performed on. Methods in this interface include:
-
Set up and clear the sound as a sample on the device.
Start, stop, pause, unpause, mute, and unmute of sample on the device.
Set parameters for each sample corresponding to the fields in the Sound node.
Set the current active aural parameters that affect all positional samples.
Sound Types
Sound types match the Sound node classes defined for Java 3D core for BackgroundSound, PointSound, and ConeSound. The type of sound a sample is loaded as determines which methods affect it.
Sound Data Types
Samples can be processed as streaming or buffered data. Fully spatializing sound sources may require data to be buffered.
-
-
Field Summary
Fields Modifier and Type Field Description static int
BACKGROUND_SOUND
Specifies the sound type as background sound.static int
BUFFERED_AUDIO_DATA
Sound data specified as Buffered is copied by the AudioDevice driver implementation.static int
CONE_SOUND
Specifies the sound type as cone sound.static int
POINT_SOUND
Specifies the sound type as point sound.static int
STREAMING_AUDIO_DATA
Sound data specified as Streaming is not copied by the AudioDevice driver implementation.-
Fields inherited from interface javax.media.j3d.AudioDevice
HEADPHONES, MONO_SPEAKER, STEREO_SPEAKERS
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description void
clearSound(int index)
Requests that the AudioDevice free all resources associated with sample with index id.int
getNumberOfChannelsUsed(int index)
Retrieves the number of channels (on executing audio device) that this sound is using, if it is playing, or is expected to use if it were begun to be played.int
getNumberOfChannelsUsed(int index, boolean muted)
Retrieves the number of channels (on executing audio device) that this sound is using, if it is playing, or is projected to use if it were to be started playing.long
getSampleDuration(int index)
Returns the duration in milliseconds of the sound sample, if this information can be determined.long
getStartTime(int index)
Returns the system time of when the sound was last "started".void
muteSample(int index)
Makes the sample 'play silently'.void
pauseSample(int index)
Temporarily stops a cached sample from playing without resetting the sample's current pointer back to the beginning of the sound data so that it can be unpaused at a later time from the same location in the sample when the pause was initiated.int
prepareSound(int soundType, MediaContainer soundData)
Accepts a reference to the MediaContainer which contains a reference to sound data and information about the type of data it is.void
setAngularAttenuation(int index, int filterType, double[] angle, float[] attenuationScaleFactor, float[] filterCutoff)
Sets this sound's angular gain attenuation (including filter) by defining corresponding arrays containing angular offsets from the sound's axis, gain scale factors, and frequency cutoff applied to all active directional sounds.void
setDirection(int index, javax.vecmath.Vector3d direction)
Sets this sound's direction from the local coordinate vector provided.void
setDistanceFilter(int filterType, double[] distance, float[] filterCutoff)
Sets Distance Filter corresponding arrays containing distances and frequency cutoff applied to all active positional sounds.void
setDistanceGain(int index, double[] frontDistance, float[] frontAttenuationScaleFactor, double[] backDistance, float[] backAttenuationScaleFactor)
Sets this sound's distance gain elliptical attenuation (not including filter cutoff frequency) by defining corresponding arrays containing distances from the sound's origin and gain scale factors applied to all active positional sounds.void
setFrequencyScaleFactor(float frequencyScaleFactor)
Specifies a scale factor applied to the frequency (or wavelength).void
setLoop(int index, int count)
Sets a sound's loop count.void
setPosition(int index, javax.vecmath.Point3d position)
Sets this sound's location (in Local coordinates) from specified Point.void
setReflectionCoefficient(float coefficient)
Sets the Reflective Coefficient scale factor applied to distinct low-order early reflections of sound off the surfaces in the region defined by the current listening region.void
setReverbDelay(float reverbDelay)
Sets the reverberation delay time.void
setReverbOrder(int reverbOrder)
Sets the reverberation order of reflections.void
setRolloff(float rolloff)
Changes the speed of sound factor.void
setSampleGain(int index, float scaleFactor)
Sets the overall gain scale factor applied to data associated with this source to increase or decrease its overall amplitude.void
setVelocityScaleFactor(float velocityScaleFactor)
Sets the Velocity scale factor applied during Doppler Effect calculation.void
setView(View reference)
Accepts a reference to the current View.void
setVworldXfrm(int index, Transform3D trans)
Passes a reference to the concatenated transformation to be applied to local sound position and direction parameters.int
startSample(int index)
Begins a sound playing on the AudioDevice.int
stopSample(int index)
Stops the sound on the AudioDevice.void
unmuteSample(int index)
Makes a silently playing sample audible.void
unpauseSample(int index)
Restarts the paused sample from the location in the sample where paused.void
updateSample(int index)
Explicitly updates a Sample.-
Methods inherited from interface javax.media.j3d.AudioDevice
close, getAngleOffsetToSpeaker, getAudioPlaybackType, getCenterEarToSpeaker, getChannelsAvailable, getChannelsUsedForSound, getTotalChannels, initialize, setAngleOffsetToSpeaker, setAudioPlaybackType, setCenterEarToSpeaker
-
-
-
-
Field Detail
-
BACKGROUND_SOUND
static final int BACKGROUND_SOUND
Specifies the sound type as background sound.- See Also:
- Constant Field Values
-
POINT_SOUND
static final int POINT_SOUND
Specifies the sound type as point sound.- See Also:
- Constant Field Values
-
CONE_SOUND
static final int CONE_SOUND
Specifies the sound type as cone sound.- See Also:
- Constant Field Values
-
STREAMING_AUDIO_DATA
static final int STREAMING_AUDIO_DATA
Sound data specified as Streaming is not copied by the AudioDevice driver implementation. It is up to the application to ensure that this data is continuously accessible during sound rendering. Furthermore, full sound spatialization may not be possible, for all AudioDevice3D implementations on unbuffered sound data.- See Also:
- Constant Field Values
-
BUFFERED_AUDIO_DATA
static final int BUFFERED_AUDIO_DATA
Sound data specified as Buffered is copied by the AudioDevice driver implementation.- See Also:
- Constant Field Values
-
-
Method Detail
-
setView
void setView(View reference)
Accepts a reference to the current View. Passes reference to current View Object. The PhysicalEnvironment parameters (with playback type and speaker placement), and the PhysicalBody parameters (position/orientation of ears) can be obtained from this object, and the transformations to/from ViewPlatform coordinate (space the listener's head is in) and Virtual World coordinates (space sounds are in).This method should only be called by Java3D Core and NOT by any application.
- Parameters:
reference
- the current View
-
prepareSound
int prepareSound(int soundType, MediaContainer soundData)
Accepts a reference to the MediaContainer which contains a reference to sound data and information about the type of data it is. A "sound type" input parameter denotes if the Java 3D sound associated with this sample is a Background, Point, or Cone Sound node. Depending on the type of MediaContainer the sound data is and on the implementation of the AudioDevice used, sound data preparation could consist of opening, attaching, or loading sound data into the device. Unless the cached flag is true, this sound data should NOT be copied, if possible, into host or device memory.Once this preparation is complete for the sound sample, an AudioDevice specific index, used to reference the sample in future method calls, is returned. All the rest of the methods described below require this index as a parameter.
This method should only be called by Java3D Core and NOT by any application.
- Parameters:
soundType
- defines the type of Sound Node: Background, Point, and ConesoundData
- reference to MediaContainer sound data and cached flag- Returns:
- device specific sample index used for referencing this sound
-
clearSound
void clearSound(int index)
Requests that the AudioDevice free all resources associated with sample with index id.This method should only be called by Java3D Core and NOT by any application.
- Parameters:
index
- device specific reference number to device driver sample
-
getSampleDuration
long getSampleDuration(int index)
Returns the duration in milliseconds of the sound sample, if this information can be determined. For non-cached streams, this method returns Sound.DURATION_UNKNOWN.This method should only be called by Java3D Core and NOT by any application.
- Parameters:
index
- device specific reference number to device driver sample- Returns:
- sound duration in milliseconds if this can be determined, otherwise (for non-cached streams) Sound.DURATION_UNKNOWN is returned
-
getNumberOfChannelsUsed
int getNumberOfChannelsUsed(int index)
Retrieves the number of channels (on executing audio device) that this sound is using, if it is playing, or is expected to use if it were begun to be played. This form of this method takes the sound's current state (including whether it is muted or unmuted) into account.For some AudioDevice3D implementations:
-
Muted sound take channels up on the systems mixer (because they're
rendered as samples playing with gain zero.
A single sound could be rendered using multiple samples, each taking up mixer channels.
This method should only be called by Java3D Core and NOT by any application.
- Parameters:
index
- device specific reference number to device driver sample- Returns:
- number of channels used by sound if it were playing
-
getNumberOfChannelsUsed
int getNumberOfChannelsUsed(int index, boolean muted)
Retrieves the number of channels (on executing audio device) that this sound is using, if it is playing, or is projected to use if it were to be started playing. Rather than using the actual current muted/unmuted state of the sound, the muted parameter is used in making the determination.This method should only be called by Java3D Core and NOT by any application.
- Parameters:
index
- device specific reference number to device driver samplemuted
- flag to use as the current muted state ignoring current mute state- Returns:
- number of channels used by sound if it were playing
-
startSample
int startSample(int index)
Begins a sound playing on the AudioDevice.This method should only be called by Java3D Core and NOT by any application.
- Parameters:
index
- device specific reference number to device driver sample- Returns:
- flag denoting if sample was started; 1 if true, 0 if false
-
getStartTime
long getStartTime(int index)
Returns the system time of when the sound was last "started". Note that this start time will be as accurate as the AudioDevice implementation can make it - but that it is not guaranteed to be exact.This method should only be called by Java3D Core and NOT by any application.
- Parameters:
index
- device specific reference number to device driver sample- Returns:
- system time in milliseconds of the last time sound was started
-
stopSample
int stopSample(int index)
Stops the sound on the AudioDevice.This method should only be called by Java3D Core and NOT by any application.
- Parameters:
index
- device specific reference number to device driver sample associated with sound data to be played- Returns:
- flag denoting if sample was stopped; 1 if true, 0 if false
-
setSampleGain
void setSampleGain(int index, float scaleFactor)
Sets the overall gain scale factor applied to data associated with this source to increase or decrease its overall amplitude. The gain scale factor value passed into this method is the combined value of the Sound node's Initial Gain and the current AuralAttribute Gain scale factors.This method should only be called by Java3D Core and NOT by any application.
- Parameters:
index
- device specific reference number to device driver samplescaleFactor
- amplitude (gain) scale factor
-
setLoop
void setLoop(int index, int count)
Sets a sound's loop count. A full description of this parameter and how it is used is in the documentation for Sound.setLoop.This method should only be called by Java3D Core and NOT by any application.
- Parameters:
index
- device specific reference number to device driver samplecount
- number of times sound is looped during play- See Also:
Sound.setLoop(int)
-
setVworldXfrm
void setVworldXfrm(int index, Transform3D trans)
Passes a reference to the concatenated transformation to be applied to local sound position and direction parameters.This method should only be called by Java3D Core and NOT by any application.
- Parameters:
index
- device specific reference number to device driver sampletrans
- transformation matrix applied to local coordinate parameters
-
setPosition
void setPosition(int index, javax.vecmath.Point3d position)
Sets this sound's location (in Local coordinates) from specified Point. The form of the position parameter matches those of the PointSound method of the same name. A full description of this parameter and how it is used is in the documentation for PointSound class.This method should only be called by Java3D Core and NOT by any application.
- Parameters:
index
- device specific reference number to device driver sampleposition
- location of Point or Cone Sound in Virtual World coordinates- See Also:
PointSound.setPosition(float x, float y, float z)
,PointSound.setPosition(Point3f position)
-
setDistanceGain
void setDistanceGain(int index, double[] frontDistance, float[] frontAttenuationScaleFactor, double[] backDistance, float[] backAttenuationScaleFactor)
Sets this sound's distance gain elliptical attenuation (not including filter cutoff frequency) by defining corresponding arrays containing distances from the sound's origin and gain scale factors applied to all active positional sounds. Gain scale factor is applied to sound based on the distance the listener is from sound source. These attenuation parameters are ignored for BackgroundSound nodes. The back attenuation parameter is ignored for PointSound nodes.The form of the attenuation parameters match that of the ConeSound method of the same name. A full description of this parameter and how it is used is in the documentation for ConeSound class.
This method should only be called by Java3D Core and NOT by any application.
- Parameters:
index
- device specific reference number to device driver samplefrontDistance
- defines an array of distance along positive axis through which ellipses passfrontAttenuationScaleFactor
- gain scale factorsbackDistance
- defines an array of distance along the negative axis through which ellipses passbackAttenuationScaleFactor
- gain scale factors- See Also:
ConeSound.setDistanceGain(float[] frontDistance, float[] frontGain, float[] backDistance, float[] backGain)
,ConeSound.setDistanceGain(Point2f[] frontAttenuation, Point2f[] backAttenuation)
-
setDirection
void setDirection(int index, javax.vecmath.Vector3d direction)
Sets this sound's direction from the local coordinate vector provided. The form of the direction parameter matches that of the ConeSound method of the same name. A full description of this parameter and how it is used is in the documentation for the ConeSound class.This method should only be called by Java3D Core and NOT by any application.
- Parameters:
index
- device specific reference number to device driver sampledirection
- the new direction vector in local coordinates- See Also:
ConeSound.setDirection(float x, float y, float z)
,ConeSound.setDirection(Vector3f direction)
-
setAngularAttenuation
void setAngularAttenuation(int index, int filterType, double[] angle, float[] attenuationScaleFactor, float[] filterCutoff)
Sets this sound's angular gain attenuation (including filter) by defining corresponding arrays containing angular offsets from the sound's axis, gain scale factors, and frequency cutoff applied to all active directional sounds. Gain scale factor is applied to sound based on the angle between the sound's axis and the ray from the sound source origin to the listener. The form of the attenuation parameter matches that of the ConeSound method of the same name. A full description of this parameter and how it is used is in the documentation for the ConeSound class.This method should only be called by Java3D Core and NOT by any application.
- Parameters:
index
- device specific reference number to device driver samplefilterType
- describes type (if any) of filtering defined by attenuationangle
- array containing angular distances from sound axisattenuationScaleFactor
- array containing gain scale factorfilterCutoff
- array containing filter cutoff frequencies. The filter values for each tuples can be set to Sound.NO_FILTER.- See Also:
ConeSound.setAngularAttenuation(float[] distance, float[] gain, float[] filter)
,ConeSound.setAngularAttenuation(Point3f[] attenuation)
,ConeSound.setAngularAttenuation(Point2f[] attenuation)
-
setRolloff
void setRolloff(float rolloff)
Changes the speed of sound factor. A full description of this parameter and how it is used is in the documentation for the AuralAttributes class.This method should only be called by Java3D Core and NOT by any application.
- Parameters:
rolloff
- atmospheric gain scale factor (changing speed of sound)- See Also:
AuralAttributes.setRolloff(float)
-
setReflectionCoefficient
void setReflectionCoefficient(float coefficient)
Sets the Reflective Coefficient scale factor applied to distinct low-order early reflections of sound off the surfaces in the region defined by the current listening region.A full description of this parameter and how it is used is in the documentation for the AuralAttributes class.
This method should only be called by Java3D Core and NOT by any application.
- Parameters:
coefficient
- reflection/absorption factor applied to reverb- See Also:
AuralAttributes.setReflectionCoefficient(float)
-
setReverbDelay
void setReverbDelay(float reverbDelay)
Sets the reverberation delay time. In this form, while reverberation is being rendered, the parameter specifies the delay time between each order of late reflections explicitly given in milliseconds. A value for delay time of 0.0 disables reverberation.A full description of this parameter and how it is used is in the documentation for the AuralAttributes class.
This method should only be called by Java3D Core and NOT by any application.
- Parameters:
reverbDelay
- time between each order of late reflection- See Also:
AuralAttributes.setReverbDelay(float reverbDelay)
-
setReverbOrder
void setReverbOrder(int reverbOrder)
Sets the reverberation order of reflections. The reverbOrder parameter specifies the number of times reflections are added to reverberation being calculated. A value of -1 specifies an unbounded number of reverberations. A full description of this parameter and how it is used is in the documentation for the AuralAttributes class.This method should only be called by Java3D Core and NOT by any application.
- Parameters:
reverbOrder
- number of times reflections added to reverb signal- See Also:
AuralAttributes.setReverbOrder(int)
-
setDistanceFilter
void setDistanceFilter(int filterType, double[] distance, float[] filterCutoff)
Sets Distance Filter corresponding arrays containing distances and frequency cutoff applied to all active positional sounds. Gain scale factor is applied to sound based on the distance the listener is from the sound source. A full description of this parameter and how it is used is in the documentation for the AuralAttributes class.This method should only be called by Java3D Core and NOT by any application.
- Parameters:
filterType
- denotes the type of filtering to be applieddistance
- array of offset distances from sound originfilterCutoff
- array of frequency cutoff- See Also:
AuralAttributes.setDistanceFilter(float[] distance, float[] frequencyCutoff)
,AuralAttributes.setDistanceFilter(Point2f[] attenuation)
-
setFrequencyScaleFactor
void setFrequencyScaleFactor(float frequencyScaleFactor)
Specifies a scale factor applied to the frequency (or wavelength). A value less than 1.0 will result of slowing the playback rate of the sample. A value greater than 1.0 will increase the playback rate. This parameter is also used to expand or contract the usual frequency shift applied to the sound source due to Doppler effect calculations. Valid values are >= 0.0. A full description of this parameter and how it is used is in the documentation for the AuralAttributes class.This method should only be called by Java3D Core and NOT by any application.
- Parameters:
frequencyScaleFactor
- factor applied to change of frequency- See Also:
AuralAttributes.setFrequencyScaleFactor(float)
-
setVelocityScaleFactor
void setVelocityScaleFactor(float velocityScaleFactor)
Sets the Velocity scale factor applied during Doppler Effect calculation. This parameter specifies a scale factor applied to the velocity of sound relative to the listener's position and movement in relation to the sound's position and movement. This scale factor is multipled by the calculated velocity portion of the Doppler effect equation used during sound rendering. A full description of this parameter and how it is used is in the documentation for the AuralAttributes class.This method should only be called by Java3D Core and NOT by any application.
- Parameters:
velocityScaleFactor
- applied to velocity of sound in relation to listener- See Also:
AuralAttributes.setVelocityScaleFactor(float)
-
muteSample
void muteSample(int index)
Makes the sample 'play silently'. This method implements (as efficiently as possible) the muting of a playing sound sample. Ideally this is implemented by stopping a sample and freeing channel resources (rather than just setting the gain of the sample to zero).This method should only be called by Java3D Core and NOT by any application.
- Parameters:
index
- device specific reference number to device driver sample
-
unmuteSample
void unmuteSample(int index)
Makes a silently playing sample audible. In the ideal, this restarts a muted sample by offset from the beginning by the number of milliseconds since the time the sample began playing (rather than setting gain to current non-zero gain).This method should only be called by Java3D Core and NOT by any application.
- Parameters:
index
- device specific reference number to device driver sample
-
pauseSample
void pauseSample(int index)
Temporarily stops a cached sample from playing without resetting the sample's current pointer back to the beginning of the sound data so that it can be unpaused at a later time from the same location in the sample when the pause was initiated. Pausing a streaming, non-cached sound sample will be treated as a mute.This method should only be called by Java3D Core and NOT by any application.
- Parameters:
index
- device specific reference number to device driver sample
-
unpauseSample
void unpauseSample(int index)
Restarts the paused sample from the location in the sample where paused.This method should only be called by Java3D Core and NOT by any application.
- Parameters:
index
- device specific reference number to device driver sample
-
updateSample
void updateSample(int index)
Explicitly updates a Sample. This method is called when a Sound is to be explicitly updated. It is only called when all a sounds parameters are known to have been passed to the audio device. In this way, an implementation can choose to perform lazy-evaluation of a sample, rather than updating the rendering state of the sample after every individual parameter changed. This method can be left as a null method if the implementor so chooses.This method should only be called by Java3D Core and NOT by any application.
- Parameters:
index
- device specific reference number to device driver sample
-
-