Sven Gothel (61): Fix Bug 1280: WAVData.loadFromStream(..) *API Change*: Only take expected byteCount (2nd arg) using IOUtil.copyStreamChunk2ByteBuffer(..) Windows: Drop using soft_oal.dll blobs, use own bundled openal-soft instead. Windows: Add commandline unit test scripts Add check-junit.sh test result script Eclipse: Fix JRE Container and add src, add jdt settings Bump openal-soft to v1.23.1 plus platform patches (building only) Bump openal-soft 1.23.1 customconfig -> toolchain cmake usage, add MacOS arm64 openal-soft build! Windows build script: Drop c.compiler.debug Add ALVersion, i.e. retrieve vendor, renderer, version and vendor-version. Test against OpenAL-Soft data >= 1.23.0 README: Linux: Add libsndio-dev for SndIO (linked) README.txt: Linux: Add libpipewire-0.3-dev for PipeWire Bump openal-soft JOAL File Layout: Have *-java-src.zip inside jar folder Promote ALAudioSink from JOGL to JOAL (Common av classes reside in GlueGen, see gluegen commit 270172bcbd91f96d4a38a3d73e23d744f57a25b8) JoalVersion: Accept null ALC instance OpenALTest: Drop nonsense LOOPING test on buffer (only applies to a source) Manual Demos: Add two simple sine wave synthesizer, Synth02AL may be enhanced to a general synth solution ALAudioSink: Add exclusive locking allowing less context management overhead ALAudioSink.dequeueBuffer(): wait == true: Fix sleep cycle and use sleep(1) if slept long enough but giving better threading perf for openal-soft ALAudioSink.toString(): Show hasALC_thread_local_context value ('tlc') make/scripts/tests.sh: Adjust D_ARGS and add X_ARGS for optional FlightRecorder ALAudioSink: Enhance using AL_EXT_MCFORMATS (max channels == 8), AL_EXT_FLOAT32, AL_EXT_DOUBLE README/index.html: Update Web resources & URLs, add details about audio-backens per platform and contained openal-soft library Synth02AL: Fix API doc re reduces latency ALAudioSink: Promote to public, be fully functional regarding AudioFormat and OpenAL paremeter. Can be 'plugged' into existing OpenAL logic. Doc, scripsts/tests.sh: Mentione OpenAL-Soft environment variables ALAudioSink: Don'e check errors before context; Track method of context-locking and release same way; Destroy shall also release context. Sound3D: Make all OO wrapper fully transparent and stand-alone, allow mix-and-match; Align Context makeCurrent/release w/ ALAudioSink ... Sound3D/Context: Use same base ctor to initialize `hasALC_thread_local_context`, benefitting from thread-local-context ALAudioSink.lockContext(): Only check error state if AL makeContextCurrent()/alcSetThreadContext() fails (returns false) JoalVersion: List all devices, output devices w/ latency and source count (mono, stereo) using undocumented queries ALAudioSink: Query latency and re-create context @ init w/ latency (refresh-rate) if frameDuration < defaultLatency Demos OpenALTest/Synth02AL: Show JoalVersion JoalVersion: Cleanup dead branches ALAudioSink: Add getSourceCount() and cleanup error handling and initImpl() locking and exit. Synth02ALL Use float32 (native openal-soft format) if available README.{txt -> md) and update text incl. license ALAudioSink.toString(): Allow null==chosenFormat (pre init string representation) Synth02AL: Use ALAudioSink's default latency instead of fixed frameDuration, using actual OpenAL frame processing refresh value build.xml: Fix 7z archive: README.{txt -> md} ALHelpers.getALFormat(..): Drop alGetEnumValue("type") and use 'type' via ALExtConstants directly: Fixes failing al.alGetEnumValue("AL_FORMAT_STEREO_DOUBLE") Fix ALAudioSink.dequeueBuffer(): AL_BUFFERS_PROCESSED result is total not accumulative while waiting (not yet dequeueing), ... ALAudioSink: Enhance description re 'AudioFrame' and 'frameDuration'; Drop unused field 'avgFrameDuration'. ALAudioSink: Use float in seconds for duration (AudioFormat and 'avgFrameDuration') to avoid losing precision when dealing with stats, averages etc ALException: Suppress serial warning Sound3D: Further OO wrapper to be used in ALAudioSink: Context locking, ALCcontext recreation, .. ALAudioSink: Use and expose Sound3D object, allow user app to deal w/ JOAL/OpenAL easier and reuse Context context locking Promote SimpleSineSynth to API (util) from Synth02AL, allowing user to have a simple sound source to test Adopt to GlueGen commit 952e0c1f83c9e0583a97d39988a6ba1428911c8c Fix file mods in make/config Use GlueGen's SecurityUtil.doPrivileged(..) instead of AccessController, remove dead code ALExtImpl: Remove unused imports Sound3d.Context: destroy() shall only 'null' thread-local context if this is current; Expose hasALC_thread_local_context to avoid double checks Add OpenAL extension AL_SOFT_events using userParam ALCcontext as key for GlueGen JavaCallback ALAudioSink: Utilize AL_SOFT_events if available, i.e. use callback for released buffer count instead of polling GlueGen cfg files: Remove now unused import java.security.AccessController ALContextKey.equals(): Use cached nativeAddress of other item as well. ALAudioSink.destroy(): Shutdown alEventCallbackSOFT properly (only if hasAL_SOFT_events, 1st disable all events); growBuffers(): No pre-condition exception for hasAL_SOFT_events AL_SOFT_events: Define 'ALCcontext` as `UserParam` type for more clarity AudioSystem3D.checkAL*Error(): Close single quote in error message ALAudioSink.dequeueBuffer(..): AL_SOFT_events cumulated released buffers is 'sometimes wrong'. Workaround: Query released buffers after receiving event and use minimum.