javax.media.j3d.AudioDevice3DL2 Maven / Gradle / Ivy
/*
* Copyright 2001-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*
*/
package javax.media.j3d;
/**
* Extends AudioDevice3D to include reverb and environmental audio parameters
* that are defined in the MIDI Manufactures' Association Interactive Audio
* Special Interest Group (MMA IASIG) Level 2 Specification.
*
* The reverberation methods of AudioDevice3DL2 interface augment the
* reverberation methods defined in AudioDevice3D.
*
* 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.
*
* The non-query methods of this interface should only be called by
* an application if the AudioDevice instance
* is not referenced by any PhysicalEnvironment
* explicitly with .setAudioDevice() or implicitly through Universe
* utility method in which case these are called by Core Java 3D
* Sound classes and Sound Scheduler thread(s).
*
* After the application chooses the AudioDevice3DL2 implementation
* 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 AudioDevice3DL2 methods should not be call by any application if the
* audio device is associated with a Physical Environment and thus used by
* Java3D Core.
*
* Filtering for this extended AudioDevice interface is defined uniformly as
* a simple low-pass filter defined by a cutoff frequency. This will allow the
* same type of high-frequency attenuation that the MMA IASIG Level 2 filtering
* model with its 'reference frequency' and 'attenuation ratio' parameters
* affords. Use of a cutoff frequency is consistent with the filtering type
* for distance and angular attenuation for ConeSound and AuralAttributes.
* The filter methods will likely be overloaded in some future extension of this
* interface.
*
* @see Sound
* @see AuralAttributes
* @see AudioDevice3D
* @since Java 3D 1.3
*/
public interface AudioDevice3DL2 extends AudioDevice3D {
/**
* Pause audio device engine (thread/server) without closing the device.
* Causes all cached sounds to be paused and all streaming sounds to be
* stopped.
*
* This method should NOT be called by any application if the audio device
* is associated with a Physical Environment used by Java3D Core.
* This method will be implicitly called when View (associated with this
* device) is deactivated.
*/
public abstract void pause();
/**
* Resumes audio device engine (if previously paused) without reinitializing
* the device.
* Causes all paused cached sounds to be resumed and all streaming sounds
* restarted.
*
* This method should NOT be called by any application if the audio device
* is associated with a Physical Environment used by Java3D Core.
* This method will be implicitly called when View (associated with this
* device) is actived.
*/
public abstract void resume();
/**
* Set overall gain control of all sounds playing on the audio device.
* Default: 1.0f = no attenuation.
*
* This method should NOT be called by any application if the audio device
* is associated with a Physical Environment used by Java3D Core.
* @param scaleFactor scale factor applied to calculated amplitudes for
* all sounds playing on this device
*/
public abstract void setGain(float scaleFactor);
/**
* Set scale factor applied to sample playback rate for a particular sound
* associated with the audio device.
* Changing the device sample rate affects both the pitch and speed.
* This scale factor is applied to ALL sound types.
* Changes (scales) the playback rate of a sound independent of
* Doppler rate changes.
* Default: 1.0f = original sample rate is unchanged
*
* This method should NOT be called by any application if the audio device
* is associated with a Physical Environment used by Java3D Core.
* @param sampleId device specific reference number to device driver sample
* @param scaleFactor non-negative factor applied to calculated
* amplitudes for all sounds playing on this device
*/
public abstract void setRateScaleFactor(int sampleId, float scaleFactor);
/**
* Set late reflection (referred to as 'reverb') attenuation.
* This scale factor is applied to iterative, indistinguishable
* late reflections that constitute the tail of reverberated sound in
* the aural environment.
* This parameter, along with the early reflection coefficient, defines
* the reflective/absorptive characteristic of the surfaces in the
* current listening region.
* A coefficient value of 0 disables reverberation.
* Valid values of parameters range from 0.0 to 1.0.
* Default: 0.0f.
*
* A full description of this parameter and how it is used is in
* the documentation for the AuralAttributes class.
*
* This method should NOT be called by any application if the audio device
* is associated with a Physical Environment used by Java3D Core.
* @param coefficient late reflection attenuation factor
* @see AuralAttributes#setReverbCoefficient
*/
public abstract void setReverbCoefficient(float coefficient);
/**
* Sets the early reflection delay time.
* In this form, the parameter specifies the delay time between each order
* of reflection (while reverberation is being rendered) explicitly given
* in milliseconds.
* Valid values are non-negative floats.
* There may be limitations imposed by the device on how small or large this
* value can be made.
* A value of 0.0 would result in early reflections being added as soon as
* possible after the sound begins.
* Default = 20.0 milliseconds.
*
* A full description of this parameter and how it is used is in
* the documentation for the AuralAttributes class.
*
* This method should NOT be called by any application if the audio device
* is associated with a Physical Environment used by Java3D Core.
* @param reflectionDelay time between each order of early reflection
* @see AuralAttributes#setReflectionDelay
*/
public abstract void setReflectionDelay(float reflectionDelay);
/**
* Set reverb decay time.
* Defines the reverberation decay curve.
* Default: 1000.0 milliseconds.
*
* A full description of this parameter and how it is used is in
* the documentation for the AuralAttributes class.
*
* This method should NOT be called by any application if the audio device
* is associated with a Physical Environment used by Java3D Core.
* @param time decay time in milliseconds
* @see AuralAttributes#setDecayTime
*/
public abstract void setDecayTime(float time);
/**
* Set reverb decay filter.
* This provides for frequencies above the given cutoff frequency to be
* attenuated during reverb decay at a different rate than frequencies
* below this value. Thus, defining a different reverb decay curve for
* frequencies above the cutoff value.
* Default: 1.0 decay is uniform for all frequencies.
*
* There is no corresponding Core AuralAttributes method at this time.
* Until high frequency attenuation is supported by new Core API,
* this will be set by the Core with the value 1.0.
* It is highly recommended that this method should NOT be
* called by any application if the audio device is associated with
* a Physical Environment used by Java3D Core.
* @param frequencyCutoff value of frequencies in Hertz above which a
* low-pass filter is applied.
* @see AuralAttributes#setDecayFilter
*/
public abstract void setDecayFilter(float frequencyCutoff);
/**
* Set reverb diffusion.
* This defines the echo dispersement (also referred to as 'echo density').
* The value of this reverb parameter is expressed as a percent of the
* audio device's minimum-to-maximum values.
* Default: 1.0f - maximum diffusion on device.
*
* A full description of this parameter and how it is used is in
* the documentation for the AuralAttributes class.
*
* This method should NOT be called by any application if the audio device
* is associated with a Physical Environment used by Java3D Core.
* @param diffusion percentage expressed within the range of 0.0 and 1.0
* @see AuralAttributes#setDiffusion
*/
public abstract void setDiffusion(float diffusion);
/**
* Set reverb density.
* This defines the modal density (also referred to as 'spectral
* coloration').
* The value of this parameter is expressed as a percent of the audio
* device's minimum-to-maximum values for this reverb parameter.
* Default: 1.0f - maximum density on device.
*
* A full description of this parameter and how it is used is in
* the documentation for the AuralAttributes class.
*
* This method should NOT be called by any application if the audio device
* is associated with a Physical Environment used by Java3D Core.
* @param density reverb density expressed as a percentage,
* within the range of 0.0 and 1.0
* @see AuralAttributes#setDensity
*/
public abstract void setDensity(float density);
/**
* Set the obstruction gain control. This method allows for attenuating
* sound waves traveling between the sound source and the listener
* obstructed by objects. Direct sound signals/waves for obstructed sound
* source are attenuated but not indirect (reflected) waves.
* Default: 1.0 - gain is not attenuated; obstruction is not occurring.
*
* There is no corresponding Core AuralAttributes method at this time.
* Even so, this method should NOT be called by any application if the
* audio device is associated with a Physical Environment used by Java3D
* Core.
* @param sampleId device specific reference number to device driver sample
* @param scaleFactor non-negative factor applied to direct sound gain
*/
public abstract void setObstructionGain(int sampleId, float scaleFactor);
/**
* Set the obstruction filter control.
* This provides for frequencies above the given cutoff frequency
* to be attenuated, during while the gain of an obstruction signal
* is being calculated, at a different rate than frequencies
* below this value.
* Default: 1.0 - filtering is uniform for all frequencies.
*
* There is no corresponding Core AuralAttributes method at this time.
* Until high frequency attenuation is supported by new Core API
* this will be set by the Core with the value 1.0.
* It is highly recommended that this method should NOT be
* called by any application if the audio device is associated with
* a Physical Environment used by Java3D Core.
* @param frequencyCutoff value of frequencies in Hertz above which a
* low-pass filter is applied.
*/
public abstract void setObstructionFilter(int sampleId, float frequencyCutoff);
/**
* Set the occlusion gain control. This method allows for attenuating
* sound waves traveling between the sound source and the listener
* occluded by objects. Both direct and indirect sound signals/waves
* for occluded sound sources are attenuated.
* Default: 1.0 - gain is not attenuated; occlusion is not occurring.
*
* There is no corresponding Core AuralAttributes method at this time.
* Even so, this method should NOT be called by any application if the
* audio device is associated with a Physical Environment used by Java3D
* Core.
* @param sampleId device specific reference number to device driver sample
* @param scaleFactor non-negative factor applied to direct sound gain
*/
public abstract void setOcclusionGain(int sampleId, float scaleFactor);
/**
* Set the occlusion filter control.
* This provides for frequencies above the given cutoff frequency
* to be attenuated, during while the gain of an occluded signal
* is being calculated, at a different rate than frequencies below
* this value.
* Default: 1.0 - filtering is uniform for all frequencies.
*
* There is no corresponding Core AuralAttributes method at this time.
* Until high frequency attenuation is supported by new Core API
* this will be set by the Core with the value 1.0.
* It is highly recommended that this method should NOT be
* called by any application if the audio device is associated with
* a Physical Environment used by Java3D Core.
* @param frequencyCutoff value of frequencies in Hertz above which a
* low-pass filter is applied.
*/
public abstract void setOcclusionFilter(int sampleId, float frequencyCutoff);
}