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
|
/*
* Copyright (c) 2007 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.
*
*/
package com.sun.j3d.audioengines;
import javax.media.j3d.AudioDevice3DL2;
import javax.media.j3d.AuralAttributes;
import javax.media.j3d.PhysicalEnvironment;
import javax.media.j3d.Sound;
/**
* The AudioEngine3DL2 Class defines an audio output device that generates
* sound 'image' from high-level sound parameters passed to it during
* scene graph.
*
* <P>
* The methods in this class are meant to be optionally overridden by an
* extended class. This extended class would provice device specific code.
*
* <P>
* Error checking on all parameters passed to these methods is already
* explicitly being done by the Java 3D core code that calls these methods.
*
* <P>
* These methods should NOT be called by any application if the audio engine
* is associated with a Physical Environment used by Java3D Core.
*
* @since Java 3D 1.3
*/
public abstract class AudioEngine3DL2 extends AudioEngine3D implements AudioDevice3DL2 {
/**
* Construct a new AudioEngine3DL2 with the specified PhysicalEnvironment.
* @param physicalEnvironment the physical environment object where we
* want access to this device.
*/
public AudioEngine3DL2(PhysicalEnvironment physicalEnvironment ) {
super(physicalEnvironment);
}
/*
*
* Methods that affect AudioEngine3DLD fields that are NOT associated
* with a specific sound sample
*
*/
/**
* Pauses audio device engine without closing the device and associated
* threads.
* Causes all cached sounds to be paused and all streaming sounds to be
* stopped.
*/
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.
*/
public abstract void resume();
/**
* Set overall gain control of all sounds playing on the audio device.
* @param scaleFactor scale factor applied to calculated amplitudes for
* all sounds playing on this device
*/
public abstract void setGain(float scaleFactor);
/*
*
* Methods explicitly affect a particular sound rendering and that
* require audio device specific methods that override this class.
*
*/
/**
* 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.
* @param index device specific reference to device driver sample
* @param scaleFactor non-negative factor applied to calculated
* amplitudes for all sounds playing on this device
* @see Sound#setRateScaleFactor
*/
public void setRateScaleFactor(int index, float scaleFactor) {
Sample sample = getSample(index);
if (sample != null)
sample.setRateScaleFactor(scaleFactor);
return;
}
/*
*
* Methods explicitly affect aural attributes of the listening space
* used to calculated reverberation during sound rendering.
* These require audio device specific methods that override this class.
*
*/
/**
* 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.
* @param coefficient late reflection attenuation factor
* @see AuralAttributes#setReverbCoefficient
*/
public void setReverbCoefficient(float coefficient) {
attribs.reverbCoefficient = coefficient;
return;
}
/**
* 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.
* @param reflectionDelay time between each order of early reflection
* @see AuralAttributes#setReflectionDelay
*/
public void setReflectionDelay(float reflectionDelay) {
attribs.reflectionDelay = reflectionDelay;
return;
}
/**
* Set reverb decay time.
* Defines the reverberation decay curve.
* @param time decay time in milliseconds
* @see AuralAttributes#setDecayTime
*/
public void setDecayTime(float time) {
attribs.decayTime = time;
return;
}
/**
* 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.
* @param frequencyCutoff value of frequencies in Hertz above which a
* low-pass filter is applied.
* @see AuralAttributes#setDecayFilter
*/
public void setDecayFilter(float frequencyCutoff) {
attribs.decayFrequencyCutoff = frequencyCutoff;
return;
}
/**
* 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.
* @param diffusion percentage expressed within the range of 0.0 and 1.0
* @see AuralAttributes#setDiffusion
*/
public void setDiffusion(float diffusion) {
attribs.diffusion = diffusion;
return;
}
/**
* 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.
* @param density reverb density expressed as a percentage,
* within the range of 0.0 and 1.0
* @see AuralAttributes#setDensity
*/
public void setDensity(float density) {
attribs.density = density;
return;
}
/**
* 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.
* There is no corresponding Core AuralAttributes method at this time.
* @param index device specific reference to device driver sample
* @param scaleFactor non-negative factor applied to direct sound gain
*/
public void setObstructionGain(int index, float scaleFactor) {
Sample sample = getSample(index);
if (sample != null)
sample.setObstructionGain(scaleFactor);
return;
}
/**
* 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.
* There is no corresponding Core AuralAttributes method at this time.
* @param index device specific reference to device driver sample
* @param frequencyCutoff value of frequencies in Hertz above which a
* low-pass filter is applied.
*/
public void setObstructionFilter(int index, float frequencyCutoff) {
Sample sample = getSample(index);
if (sample != null)
sample.setObstructionFilter(frequencyCutoff);
return;
}
/**
* 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.
* There is no corresponding Core AuralAttributes method at this time.
* @param index device specific reference to device driver sample
* @param scaleFactor non-negative factor applied to direct sound gain
*/
public void setOcclusionGain(int index, float scaleFactor) {
Sample sample = getSample(index);
if (sample != null)
sample.setObstructionGain(scaleFactor);
return;
}
/**
* 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.
* There is no corresponding Core AuralAttributes method at this time.
* @param index device specific reference to device driver sample
* @param frequencyCutoff value of frequencies in Hertz above which a
* low-pass filter is applied.
*/
public void setOcclusionFilter(int index, float frequencyCutoff) {
Sample sample = getSample(index);
if (sample != null)
sample.setObstructionFilter(frequencyCutoff);
return;
}
}
|