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 final int
    Specifies the sound type as background sound.
    static final int
    Sound data specified as Buffered is copied by the AudioDevice driver implementation.
    static final int
    Specifies the sound type as cone sound.
    static final int
    Specifies the sound type as point sound.
    static final int
    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

    Modifier and Type
    Method
    Description
    void
    clearSound(int index)
    Requests that the AudioDevice free all resources associated with sample with index id.
    int
    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.
  • Field Details

    • BACKGROUND_SOUND

      static final int BACKGROUND_SOUND
      Specifies the sound type as background sound.
      See Also:
    • POINT_SOUND

      static final int POINT_SOUND
      Specifies the sound type as point sound.
      See Also:
    • CONE_SOUND

      static final int CONE_SOUND
      Specifies the sound type as cone sound.
      See Also:
    • 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:
    • BUFFERED_AUDIO_DATA

      static final int BUFFERED_AUDIO_DATA
      Sound data specified as Buffered is copied by the AudioDevice driver implementation.
      See Also:
  • Method Details

    • 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 Cone
      soundData - 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 sample
      muted - 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 sample
      scaleFactor - 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 sample
      count - number of times sound is looped during play
      See Also:
    • 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 sample
      trans - 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 sample
      position - location of Point or Cone Sound in Virtual World coordinates
      See Also:
    • 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 sample
      frontDistance - defines an array of distance along positive axis through which ellipses pass
      frontAttenuationScaleFactor - gain scale factors
      backDistance - defines an array of distance along the negative axis through which ellipses pass
      backAttenuationScaleFactor - gain scale factors
      See Also:
    • 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 sample
      direction - the new direction vector in local coordinates
      See Also:
    • 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 sample
      filterType - describes type (if any) of filtering defined by attenuation
      angle - array containing angular distances from sound axis
      attenuationScaleFactor - array containing gain scale factor
      filterCutoff - array containing filter cutoff frequencies. The filter values for each tuples can be set to Sound.NO_FILTER.
      See Also:
    • 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:
    • 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:
    • 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:
    • 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:
    • 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 applied
      distance - array of offset distances from sound origin
      filterCutoff - array of frequency cutoff
      See Also:
    • 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:
    • 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:
    • 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