commit b87238ac343643e0077522ac3a983a8025bb1d88 Author: Sven Gothel Date: Tue Aug 1 19:55:51 2023 +0200 ALAudioSink.dequeueBuffer(..): AL_SOFT_events cumulated released buffers is 'sometimes wrong'. Workaround: Query released buffers after receiving event and use minimum. commit 8ccdfe89171e33b58d3f4324be6ca85f5b11b7aa Author: Sven Gothel Date: Tue Aug 1 19:51:56 2023 +0200 AudioSystem3D.checkAL*Error(): Close single quote in error message commit 2d3237ef72a0ce908f1ca61e4f151e01dc8e27f3 Author: Sven Gothel Date: Mon Jul 10 16:42:36 2023 +0200 AL_SOFT_events: Define 'ALCcontext` as `UserParam` type for more clarity commit 9eb33b0016e8f0781140a3b03509562cb6d95bc1 Author: Sven Gothel Date: Sun Jul 9 21:16:28 2023 +0200 ALAudioSink.destroy(): Shutdown alEventCallbackSOFT properly (only if hasAL_SOFT_events, 1st disable all events); growBuffers(): No pre-condition exception for hasAL_SOFT_events commit 2319ef1079dae17d4d23df804632c16bb768a132 Author: Sven Gothel Date: Sun Jul 9 21:04:16 2023 +0200 ALContextKey.equals(): Use cached nativeAddress of other item as well. commit 6f93f6408e336049774d417e59b418d1a9578cdc Author: Sven Gothel Date: Sun Jul 9 21:03:19 2023 +0200 GlueGen cfg files: Remove now unused import java.security.AccessController commit 224d417f502f5f93f617c5b387620fdabdc91f2d Author: Sven Gothel Date: Sun Jul 9 16:37:04 2023 +0200 ALAudioSink: Utilize AL_SOFT_events if available, i.e. use callback for released buffer count instead of polling With wait == true, we simply wait until enough buffers have arrived, otherwise take what we got - both w/o polling and querying the alSource. commit 84be97857a080194de8de147552c2adb295bb402 Author: Sven Gothel Date: Sun Jul 9 16:05:04 2023 +0200 Add OpenAL extension AL_SOFT_events using userParam ALCcontext as key for GlueGen JavaCallback https://openal-soft.org/openal-extensions/SOFT_events.txt commit 38d03bf5056f7938afcac584bc4321eca49076a1 Author: Sven Gothel Date: Sun Jul 9 14:56:00 2023 +0200 Sound3d.Context: destroy() shall only 'null' thread-local context if this is current; Expose hasALC_thread_local_context to avoid double checks commit a1312ed74545eff208ed560a0989523a89dde3e9 Author: Sven Gothel Date: Sun Jul 9 14:51:44 2023 +0200 ALExtImpl: Remove unused imports commit f0ac928d212f74a2a422af2e89ec930c7b42e224 Author: Sven Gothel Date: Sun Jul 9 14:50:30 2023 +0200 Use GlueGen's SecurityUtil.doPrivileged(..) instead of AccessController, remove dead code commit 4d82343dd856cb880b8d8ed9a6616eb1832d49dc Author: Sven Gothel Date: Sun Jul 9 14:49:09 2023 +0200 Fix file mods in make/config commit 56ef8e63a185250bb910e63043f0d882babfac3d Author: Sven Gothel Date: Fri Jun 9 20:26:42 2023 +0200 Adopt to GlueGen commit 952e0c1f83c9e0583a97d39988a6ba1428911c8c commit 1a4305bbfd4f091fe8d57aa35a76de14ee83383c Author: Sven Gothel Date: Tue May 23 02:10:00 2023 +0200 Promote SimpleSineSynth to API (util) from Synth02AL, allowing user to have a simple sound source to test commit 44ed86045ee1fc8a91fa2902196e9ddaf53242ca Author: Sven Gothel Date: Tue May 23 02:08:25 2023 +0200 ALAudioSink: Use and expose Sound3D object, allow user app to deal w/ JOAL/OpenAL easier and reuse Context context locking Context locking logic has been fixed and moved to Sound3D Context class (beside many other transparency changes), see commit afb386e13fd00fde1401d4551ee4790b1f6d5e09. This also aligns w/ AudioSink API change of Gluegen commits - c04726720a57f8db42f2621ad58ff3bd42006c63 - 6a74d16a805a4204093972bb91361b2aa633065c commit afb386e13fd00fde1401d4551ee4790b1f6d5e09 Author: Sven Gothel Date: Tue May 23 02:05:11 2023 +0200 Sound3D: Further OO wrapper to be used in ALAudioSink: Context locking, ALCcontext recreation, .. Context - Recursive context locking (only 1st shall do native makeCurrent, only last shall do native release) - Access to the current Context instance (thread local storage) - Obey "One context can only be current on one thread, and one thread can only have one context current!" - ALCcontext recreation within lock, allowing to change native OpenAL specifics via attr list - ALCcontext creation (initial) w/ attr list Device - Retrieve name if default name null has been given - Expose device name - Allow to open() again Source - Allow lazy creation w/ invalid ID - Allow create() post instantiation (for a single source) - Throw ALException in all queued buffer methods as they are crucial in multithreading streaming. - Add queue buffer with OpenAL buffer-id int[] arrays variant to be used w/o Buffer Listener - Fix (get|set)Orientation() API doc: It's 'at' vector, then 'up' vector. General: - Have toString() - Added versatile AudioSystem3D.check*Error(..) Earlier Sound3D changes - 7f73d50c90d05cf7388f23977ca956a4933019ad - 64b40bd4359cad46ebf62751ea342d80205bd98b commit 66e79a41f38f5694f953816f1a85a02cee71eb16 Author: Sven Gothel Date: Tue May 23 01:37:31 2023 +0200 ALException: Suppress serial warning commit 39a32fd56de313c31bd197ee6022288e97f9729a Author: Sven Gothel Date: Sun May 21 16:50:16 2023 +0200 ALAudioSink: Use float in seconds for duration (AudioFormat and 'avgFrameDuration') to avoid losing precision when dealing with stats, averages etc commit 57f94e84a9ebfc04f8f04593acc12f3fdc56eddc Author: Sven Gothel Date: Sun May 21 09:20:31 2023 +0200 ALAudioSink: Enhance description re 'AudioFrame' and 'frameDuration'; Drop unused field 'avgFrameDuration'. commit 32563a63b9c10820ffd1509fa12268ba40430d00 Author: Sven Gothel Date: Sat May 20 21:15:52 2023 +0200 Fix ALAudioSink.dequeueBuffer(): AL_BUFFERS_PROCESSED result is total not accumulative while waiting (not yet dequeueing), ... Further: - brackets were missed in 'sleep =', i.e. 'releaseBufferLimes-releasedBuffers * avgBufferDura' -> '(releaseBufferLimes-releasedBuffers) * avgBufferDura)' - The minimum sleep of avgFrameDuration 'sleep = Math.max(avgFrameDuration, ..' lead to cut-off smaller sleep cycles and the else branch would only sleep for less (1ms) multiple times. Hence use the minimum of 2ms, where we subtract 1ms for busy polling. Notable, this is an extreme situation of small buffer sizes (duration), but may happen on like synthesizer applications (jsyn). We actually could use latency (refresh cycle) as used in OpenAL-Soft, but this is an undocumented feature .. sort of. commit 772cde0c3cc97a0c2a932f9398539500363f60c0 Author: Sven Gothel Date: Sat May 20 20:38:12 2023 +0200 ALHelpers.getALFormat(..): Drop alGetEnumValue("type") and use 'type' via ALExtConstants directly: Fixes failing al.alGetEnumValue("AL_FORMAT_STEREO_DOUBLE") al.alGetEnumValue("AL_FORMAT_STEREO_DOUBLE") failed w/ OpenAL-Soft, despite having AL_EXT_MCFORMATS, AL_EXT_FLOAT32 and AL_EXT_DOUBLE supported. Notable, al.alGetEnumValue("AL_FORMAT_MONO_FLOAT32") did work. commit 72b08cf8fbf51c1467975b9e1213e38a2c7a9516 Author: Sven Gothel Date: Sat May 20 08:10:24 2023 +0200 build.xml: Fix 7z archive: README.{txt -> md} commit 4fffef2ca42494526254029279b56016efe176f6 Author: Sven Gothel Date: Sat May 20 07:53:29 2023 +0200 Synth02AL: Use ALAudioSink's default latency instead of fixed frameDuration, using actual OpenAL frame processing refresh value Also pre-allocate sampleBuffer to 30ms actual format, using AudioFormat.getDurationsByteSize(..) commit cac165073439beac80088a8b1aacbb53cf7c321d Author: Sven Gothel Date: Sat May 20 06:20:49 2023 +0200 ALAudioSink.toString(): Allow null==chosenFormat (pre init string representation) commit 4610f9a65a0527d5a03614a052a72373d2315a7d Author: Sven Gothel Date: Sat May 20 04:21:25 2023 +0200 README.{txt -> md) and update text incl. license commit 5df104b34e3d299bdcfe3827121b4f9e9cc64229 Author: Sven Gothel Date: Sat May 20 04:20:53 2023 +0200 Synth02ALL Use float32 (native openal-soft format) if available commit 4d9f6bd4a65d2ab60c32502e90d43cb3bcb10d45 Author: Sven Gothel Date: Sat May 20 04:20:25 2023 +0200 ALAudioSink: Add getSourceCount() and cleanup error handling and initImpl() locking and exit. initImpl() shall just return false, not throwing an exception. commit dc6c3901e345c72ec028cc06952e3e243067f949 Author: Sven Gothel Date: Sat May 20 04:16:26 2023 +0200 JoalVersion: Cleanup dead branches commit 55caa3fb79352f85d52804bcf354c66e85a05071 Author: Sven Gothel Date: Fri May 19 08:16:24 2023 +0200 Demos OpenALTest/Synth02AL: Show JoalVersion commit 25b56116accbe68f4de2fb26213cc16df80abad1 Author: Sven Gothel Date: Fri May 19 08:15:44 2023 +0200 ALAudioSink: Query latency and re-create context @ init w/ latency (refresh-rate) if frameDuration < defaultLatency commit 6bfeb7c338f2ffbcc0b4b82c2a3e84f32c783fe3 Author: Sven Gothel Date: Fri May 19 08:13:39 2023 +0200 JoalVersion: List all devices, output devices w/ latency and source count (mono, stereo) using undocumented queries commit b9d73b0d8d8384c19b3827cb2fc270d6d5ed6578 Author: Sven Gothel Date: Thu May 18 07:13:12 2023 +0200 ALAudioSink.lockContext(): Only check error state if AL makeContextCurrent()/alcSetThreadContext() fails (returns false) commit 64b40bd4359cad46ebf62751ea342d80205bd98b Author: Sven Gothel Date: Thu May 18 06:22:41 2023 +0200 Sound3D/Context: Use same base ctor to initialize `hasALC_thread_local_context`, benefitting from thread-local-context commit 7f73d50c90d05cf7388f23977ca956a4933019ad Author: Sven Gothel Date: Thu May 18 06:15:32 2023 +0200 Sound3D: Make all OO wrapper fully transparent and stand-alone, allow mix-and-match; Align Context makeCurrent/release w/ ALAudioSink ... Align Context makeCurrent/release w/ ALAudioSink - use ALC_EXT_thread_local_context if available - use a recursive lock - same release method as makeCurrent - ALC_EXT_thread_local_context or traditional - destroy also releases the context and fully unwinds lock commit 2e800ac4277d6234cb9dba2afe01a4d8c75fc989 Author: Sven Gothel Date: Thu May 18 06:11:42 2023 +0200 ALAudioSink: Don'e check errors before context; Track method of context-locking and release same way; Destroy shall also release context. Result is 'ALSOFT(WW)' free. commit 869d2eb0ff78bd2bdfafbc8778c9fd38dd991b34 Author: Sven Gothel Date: Thu May 18 06:10:04 2023 +0200 Doc, scripsts/tests.sh: Mentione OpenAL-Soft environment variables commit d5daaaab3544d9af49056f57a1fcf53abef17deb Author: Sven Gothel Date: Thu May 18 04:13:57 2023 +0200 ALAudioSink: Promote to public, be fully functional regarding AudioFormat and OpenAL paremeter. Can be 'plugged' into existing OpenAL logic. commit 5320233de825b5e3c2131c9303ef94990a40fcb4 Author: Sven Gothel Date: Wed May 17 19:56:40 2023 +0200 Synth02AL: Fix API doc re reduces latency commit c572424330af380b4b087ae9318be6db5f0252d7 Author: Sven Gothel Date: Wed May 17 19:03:49 2023 +0200 README/index.html: Update Web resources & URLs, add details about audio-backens per platform and contained openal-soft library commit 518ae3b1432f43ea6659f0622536fb2135eec9fa Author: Sven Gothel Date: Wed May 17 18:07:44 2023 +0200 ALAudioSink: Enhance using AL_EXT_MCFORMATS (max channels == 8), AL_EXT_FLOAT32, AL_EXT_DOUBLE Note: AL_SOFT_buffer_samples is n/a since openal-soft 1.18.0 ALHelpers.getALFormat(..) uses cached booleans for optionally used available extensions. Add DEBUG output for ALAudioSink.init() and ALAudioSink.isSupported(), allowing to track supported and used formats. commit b2b90538c2727709da4ed4efde84268700e2b7f8 Author: Sven Gothel Date: Wed May 17 16:50:26 2023 +0200 make/scripts/tests.sh: Adjust D_ARGS and add X_ARGS for optional FlightRecorder commit fa18fe0eac1e454f7543fb5934aa9dc630df6573 Author: Sven Gothel Date: Wed May 17 16:49:43 2023 +0200 ALAudioSink.toString(): Show hasALC_thread_local_context value ('tlc') commit f1f21406540f74a2d002b11ed039eb8dcf4ff64f Author: Sven Gothel Date: Wed May 17 16:48:10 2023 +0200 ALAudioSink.dequeueBuffer(): wait == true: Fix sleep cycle and use sleep(1) if slept long enough but giving better threading perf for openal-soft This with exclusive context gives us no distortion at 3x 12ms frames, reduced from 3x 16ms. See Synth02AL. commit e7f6807d42d9821e42ee4f8ae3ce9fd8ef2d4e31 Author: Sven Gothel Date: Wed May 17 16:40:50 2023 +0200 ALAudioSink: Add exclusive locking allowing less context management overhead commit 1e9e8d108467902b7753c6910f5d1390dbf32edb Author: Sven Gothel Date: Wed May 17 08:10:33 2023 +0200 Manual Demos: Add two simple sine wave synthesizer, Synth02AL may be enhanced to a general synth solution commit 2edee76a2c175719e37548d8627dd4b141c39919 Author: Sven Gothel Date: Wed May 17 08:08:36 2023 +0200 OpenALTest: Drop nonsense LOOPING test on buffer (only applies to a source) commit 00fded51c28a97a463598ca1dc49f042a05bd3f9 Author: Sven Gothel Date: Wed May 17 08:08:04 2023 +0200 JoalVersion: Accept null ALC instance commit 03f4bb63ce8a358b1c2ef303480e1887d72ecb2e Author: Sven Gothel Date: Wed May 17 08:07:39 2023 +0200 Promote ALAudioSink from JOGL to JOAL (Common av classes reside in GlueGen, see gluegen commit 270172bcbd91f96d4a38a3d73e23d744f57a25b8) commit a6fe729b61eb28c9197e573eac5fae3c5b045df8 Author: Sven Gothel Date: Sun May 7 19:53:49 2023 +0200 JOAL File Layout: Have *-java-src.zip inside jar folder commit c5c2e2a211c62598981fe8c41b37fcc3adcbc999 Author: Sven Gothel Date: Sat May 6 16:39:56 2023 +0200 Bump openal-soft commit 9bd7a5f625b6971b8fa888bbe09b62cfad28919c Author: Sven Gothel Date: Fri May 5 00:09:04 2023 +0200 README.txt: Linux: Add libpipewire-0.3-dev for PipeWire On Debian 11 Bullseye: Use bullseye-backports `apt -t bullseye-backports install libpipewire-0.3-dev` to have libpipewire-0.3>=0.3.23, i.e. version 0.3.65. commit 87efed733520fe3d3da2d120b6c68139d2d3d703 Author: Sven Gothel Date: Thu May 4 23:44:11 2023 +0200 README: Linux: Add libsndio-dev for SndIO (linked) commit b83ed843310f74655493ceefb2ee0e5420d1fe28 Author: Sven Gothel Date: Thu May 4 17:25:25 2023 +0200 Add ALVersion, i.e. retrieve vendor, renderer, version and vendor-version. Test against OpenAL-Soft data >= 1.23.0 commit e481757000902582e80353f9b76f77793950d47a Author: Sven Gothel Date: Thu May 4 17:24:09 2023 +0200 Windows build script: Drop c.compiler.debug commit 96e98f0a141fc8b5f68925a6442d220591ba1de2 Author: Sven Gothel Date: Thu May 4 17:23:46 2023 +0200 Bump openal-soft 1.23.1 customconfig -> toolchain cmake usage, add MacOS arm64 openal-soft build! commit 7481c9e6a6921136ff51d4398f1e9abd77df557a Author: Sven Gothel Date: Thu May 4 03:02:21 2023 +0200 Bump openal-soft to v1.23.1 plus platform patches (building only) commit 36491605d9b223e4ae5bda0c7ae1e8c933bf9dab Author: Sven Gothel Date: Thu May 4 03:01:44 2023 +0200 Eclipse: Fix JRE Container and add src, add jdt settings commit d9dd218df3439528c447ec9b16f5492e32e6dcbd Author: Sven Gothel Date: Thu May 4 01:39:16 2023 +0200 Add check-junit.sh test result script commit 96d44e51aa1fa2ed4c5b9af40e327d42c80387df Author: Sven Gothel Date: Thu May 4 01:38:52 2023 +0200 Windows: Add commandline unit test scripts commit 8c9c768e697dfbab8ec92ec9c496a46a617ad8c4 Author: Sven Gothel Date: Thu May 4 01:37:57 2023 +0200 Windows: Drop using soft_oal.dll blobs, use own bundled openal-soft instead. Note: This requires mingw-w64 w/ posix-threads to allow using C++ std::mutex etc. commit 159cd98994f199c014c14c048fe4d18270057e49 Author: Sven Gothel Date: Thu May 4 01:17:02 2023 +0200 Fix Bug 1280: WAVData.loadFromStream(..) *API Change*: Only take expected byteCount (2nd arg) using IOUtil.copyStreamChunk2ByteBuffer(..) This fix is inspired by Bug 1280, , 'copy only needed bytes' for JOAL's com.jogamp.openal.util.WAVData.loadFromStream(..). This GlueGen IOUtil.copyStreamChunk2ByteBuffer() method is a revised version of the proposed IOHelpers.copyFromStream2ByteBuffer(..), see