aboutsummaryrefslogtreecommitdiffstats
path: root/src/Sound/README.release
blob: bbbc20be05962c241cf422f3b1f600365a572fd8 (plain)
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
/*
 * $RCSfile$
 *
 * Copyright (c) 2006 Sun Microsystems, Inc. All rights reserved.
 *
 * $Revision$
 * $Date$
 * $State$
 */

==========================================================================
Java 3D(TM) Sound 1.3 Beta 1
==========================================================================

Java 3D sound is rendered via the use of a specific implementation
of the AudioDevice3D interface.   This release includes two AudioDevice3DL2
implementations.

= = = = = = = = = = = = = = = = = = = = = = = 
HeadspaceMixer AudioDevice3DL2 Implememtation
= = = = = = = = = = = = = = = = = = = = = = = 

   The HeadspaceMixer implementation is part of the Sun Java 3D 
   com.sun.j3d.audioengines.headspace package.  This implementation
   uses a version of the Headspace Audio Engine licensed from Beatnik
   which does all rendering in software and pipes the stereo audio image 
   to the platform's audio device.

   The implemention that was called JavaSoundMixer in previous Sun 
   releases of Java 3D has been renamed to HeadspaceMixer.
   It was renamed in enticipation of the release of a new AudioDevice
   implementation that uses JavaSound API which will be called JavaSoundMixer
   (described below).

   The HeadspaceMixer audio device will be created and initialized when the
   utility SimpleUniverse.Viewer.createAudioDevice() method is called.
   If your application uses this utility, no change will be required to
   use the recommended HeadspaceMixer implementation.

   If your application explicitly used the older JavaSoundMixer audio device 
   implemention from the package com.sun.j3d.audioengines.javasound, you should
   change the reference to JavaSoundMixer, at least for this Beta 1 release,
   to HeadspaceMixer:

          import com.sun.j3d.audioengines.headspace.HeadspaceMixer;
             :
          HeadspaceMixer mixer = new HeadspaceMixer(physicalEnvironment);

   Most of the Java 3D Audio features have been implemented but there are
   a few exceptions.  Additionally, some Java 3D Audio features are only
   only partially implemented.

   Hang under JDK 1.3 on Windows platforms
   ---------------------------------------
   Occationally, some applications when run under JDK 1.3 on Windows 
   experienced window manager hangs.  This problem could not be produced
   under JDK 1.4.  It is recommended that if this problem arrises with
   your application that JDK 1.4 be used.

   Audio Features Not Supported with this release:
   -----------------------------------------------
      - Cross-talk cancellation is not performed when rendered audio output
        on speakers.
      - Spatialization of positional and directional sound is very rudimentary.
        Point and Cone sound will simply be panned (approximating interaural
        intensity difference)  and left-right output signals delayed
        (approximating interaural delay difference) applying gain attenuation.
      - The filtering of sound source (that would aid in Elevation or Front/
        Back differentiation cues) is not implemented with this AudioDevice.
      - For this release, distance and angular low-pass filtering of sound
        sources is implemented with a very simple algorithm (that choose speed
        over accuracy).
      - For this release, Sound.POSITIVE_INFINITY is mapped to 2^15.

   Supported MediaContainers data
   ------------------------------
      This engine supports 8- and 16- bit linear, and u-law and A-law formatted
      files in mono and stereo AU, AIFF, WAV, and PCM file formats.
      Compressed formats such as DVI, GSM, and MOD are not supported at this
      time.  Encoded format such as MP3 are not supported.

      MIDI and RMF files are supported but not fully spatialized.
      MIDI file playback as BackgroundSound and attenuated Point/ConeSounds
      is at least partially supported with the following limitations:
      - For this release MIDI data is automatically cached.
      - Point/ConeSound nodes that use MIDI MediaContainers can not be 
        panned or delayed to simulate Interaural Intensity or Time 
        Differences due to the limitiation of the underlying technology
        used in this implementation.

      InputStreams as MediaContainers are not supported for Point or
        ConeSounds in this implementation.

   Reverberation
   -------------
      The Headspace engine supports these 5 reverberation environments:
          "Closet"         very small area, very absorptive surfaces
          "Acoustic Lab"   med. small area,  equally absorptive/reflective
          "Garage"         med. large area, somewhat reflective surfaces
          "Dungeon"        medium area, reflective surfaces
          "Cavern"         large area, highly reflective surfaces

      The AuralAttributes parameters dealing with reverb -
      early and late reflection coefficient and delay time, reverb decay
      time - are compared to choose one of these five software aural
      environments offered as part of the Headspace engine. 
      Decay speed, paired with the explicit or implicit size of the space,
      determine the Headspace Reverb type that is set:

                               |  Short:               Long:
            Size    Delay Time |    Decay <= 1500ms      Decay > 1500ms
           ---------------------------------------------------------------
            small   (< 100ms)  |    2 "Closet"           4 "Acoustic Lab"
            medium  (<=500ms)  |    3 "Garage"           6 "Dungeon"
            large   (> 500ms)  |    6 "Dungeon"          5 "Cavern"

      A "feature" of this engines 'Dungeon' reverb type is that the
      reverberation is added to the opposite pan position from the
      sound's position.  This creates an aural effect that sounds
      like the reverberation is bouncing off the opposite wall of
      the 'Dungeon'.

= = = = = = = = = = = = = = = = = = = = = = = 
JavaSoundMixer AudioDevice3DL2 Implememtation
= = = = = = = = = = = = = = = = = = = = = = = 

   The JavaSoundMixer implementation is part of the Sun Java 3D 
   com.sun.j3d.audioengines.javasound package.  This implementation uses
   the Java Sound API.  All low-level access to the platforms audio device
   are dependent on the Java Sound mixer implementation(s) installed on
   the machine you're running on.

   The JavaSoundMixer Java 3D audio device implementation uses Java Sound
   SourceDataLine streams for non-cached data and Java Sound Clips for
   cached data.  Support for specific sound cards, the exact input formats
   that can be passed as data to Java 3D MediaContainers, and which feature
   are rendered in software verses accelleration hardware is dependent on
   the Java Sound implementation installed on your machine.
   There is guarenteed to be at least one Java Sound mixer implementation
   available with all J2SE releases (such as Sun's JDK 1.3 and above).

   Audio Features Not Supported with this release:
   -----------------------------------------------
      The JavaSoundMixer is a brand new implementation as of 1.3 Beta 1
      release.  While much of the Java 3D Audio API has been implemented
      but there are known problems and limitations. Additionally, some Java
      3D Audio features are only partially implemented.

      - Non-linear file formats (A-law and u-law) are not converted.
      - MIDI files for all sound types are not implemented.
      - There are several timing and channel synchronization problems
        encountered when Point and Cone Sounds are rendered.
      - Distance and angular low-pass filtering of sound source is not 
        implemented.
      - Spatialization of positional and directional sound is very rudimentary.
        See notes above under HeadspaceMixer.
      - Cross-talk cancellation for speaker playback is not performed.

      Until these isues are fixed in next Beta 2 release it is recommended
      that you use the the HeadspaceMixer implementation.

   Supported MediaContainers data
   ------------------------------
      The intent is that all MediaContainer input data types supported by 
      Java Sound will also be supported by the JavaSoundMixer implementation.
      This implementation will not have the restrictions on InputStreams as
      the HeadspaceMixer implementation has.

   Reverberation
   -------------
      Java 3D reverberation parameters map to a corresponding set
      reverb control parameters available thru JavaSound API for Clips
      (cached MediaContainers).  The exact auralization rendering based
      on these parameters is dependent on the Java Sound mixer implementation
      choosen.

= = = = = = = = = = = = = = = = = = = = = = = 
Use
= = = = = = = = = = = = = = = = = = = = = = = 
Any Java 3D program that wants to render sounds must create and initialize
an instance of either HeadspaceMixer or JavaSoundMixer directly or indirectly
(using SimpleUniverse utilities).

All of the sound example programs included in this release use the 
com.sun.j3d.utils.universe.SimpleUniverse class to create and initialize
an instance of the HeadspaceMixer with the following code:

        Canvas3D c = new Canvas3D(null);
        SimpleUniverse u = new SimpleUniverse(c);
        AudioDevice audioDev = u.getViewer().createAudioDevice();

As application can initialize the HeadspaceMixer implementation directly
with code like following:
     
    import com.sun.j3d.audioengines.headspace.HeadspaceMixer;
           :
    Canvas3D canvas = new Canvas3D(null);
    SimpleUniverse univ = new SimpleUniverse(canvas);
    univ.getViewingPlatform().setNominalViewingTransform();
    PhysicalEnvironment physicalEnv = 
           univ.getViewer().getPhysicalEnvironment();
    if (physicalEnv != null) {
        HeadspaceMixer mixer = new HeadspaceMixer(physicalEnv);
        if (mixer == null) 
            System.out.println("creation of audio device failed");
        mixer.initialize();
    }

NOTE: Sun JDK has an implementation of the javax.sound.sampled.Mixer
interface named 'HeadspaceMixer'.  If your application also imports the
javax.sound.sampled package you'll need to explicitly differentiate by
specifying the full Java 3D package when referencing HeadspaceMixer:
             :
        com.sun.j3d.audioengines.headspace.HeadspaceMixer mixer = 
             new com.sun.j3d.audioengines.headspace.HeadspaceMixer(physicalEnv);
             :


==========================================================================
General Installation Notes:
==========================================================================
      If your Java 3D application has trouble acquiring the AudioDevice
      ("Audio Device unavailable" exception occurs) you may need to exit
      other applications that use sound.  NOTE: If this occurs we would
      appreciate being informed as to which sound application Java 3D had
      problems running simultaneously with.

      Combining calls to JMF 1.0 methods in your Java 3D sound application
      is still dangerous.  The engines used by both APIs may not yet be
      robust enough to handle supporting both of these concurrently.