1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
|
/*
* 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.
*<P>
* The reverberation methods of AudioDevice3DL2 interface augment the
* reverberation methods defined in AudioDevice3D.
*<P>
* The intent is for this interface to be implemented by AudioDevice Driver
* developers using a software or hardware sound engine of their choice.
*<P>
* 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.
*<P>
* 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).
*<P>
* 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.
*<P>
* 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.
*<P>
* 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.
* <P>
* 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.
* <P>
* 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.
* <P>
* 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
* <P>
* 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.
* <P>
* A full description of this parameter and how it is used is in
* the documentation for the AuralAttributes class.
* <P>
* 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.
* <P>
* A full description of this parameter and how it is used is in
* the documentation for the AuralAttributes class.
* <P>
* 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.
* <P>
* A full description of this parameter and how it is used is in
* the documentation for the AuralAttributes class.
* <P>
* 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.
* <P>
* 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.
* <P>
* A full description of this parameter and how it is used is in
* the documentation for the AuralAttributes class.
* <P>
* 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.
* <P>
* A full description of this parameter and how it is used is in
* the documentation for the AuralAttributes class.
* <P>
* 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.
* <P>
* 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.
* <P>
* 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.
* <P>
* 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.
* <P>
* 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);
}
|