src/audio


Log

Author Commit Date CI Message
Francisco Javier Trujillo Mata 5b4b4fa1 2022-08-14T12:01:56 Decrease audio thread priority when created
Mathieu Eyraud f1390780 2022-08-02T15:25:44 Fix use after free when removing Windows audio device
Ryan C. Gordon 8ff738f2 2022-07-26T12:40:47 audio: Report SDL_AUDIODEVICEREMOVED for unopened devices. Unopened devices, if removed, now send SDL_AUDIODEVICEREMOVED events with a `which` field set to zero. Apps can use this to decide if they need to refresh a list of devices being shown in an options menu, etc. It's safe to call SDL_CloseAudioDevice(0), so even if they try to clean up this bogus id, it should be safe. Fixes #5199.
Ozkan Sezer 8c51cae7 2022-07-23T14:56:04 audio/aaudio, audio/openslES: fix -Wdeclaration-after-statement errors Fixes https://github.com/libsdl-org/SDL/issues/5950
Ethan Lee f3008e4a 2022-07-20T19:08:31 audio: 3- and 5-channel formats are now supported
Ryan C. Gordon 45c3b59d 2022-07-20T17:23:42 audio: Turn off DEBUG_CONFIG logging again.
Ryan C. Gordon bec721f0 2022-07-20T17:22:41 audio: Fixed dst pointer on channel conversions that grow in-place.
Ryan C. Gordon 9f56c7cf 2022-07-20T16:39:19 audio: Remove 5.1->X SIMD converters, add SSE mono->stereo. The 5.1 versions didn't use the new algorithm, and making that new algorithm work took so many permutes that it was significantly slower than just using the scalar versions. However, mono-to-stereo is an extremely common conversion, and it's trivial to accelerate it with plain SSE, so that was added!
Ryan C. Gordon b83ae9f2 2022-07-19T22:40:51 audio: Replaced some debug-printfs with debug-SDL_Logs. :)
Ryan C. Gordon 49ec8db5 2022-07-19T22:04:49 audio: Generate the channel converter code from a program.
Ryan C. Gordon f06cc3e9 2022-07-19T22:03:56 audio: "SL" means "surround left" not "side left", etc.
Ryan C. Gordon 5a0c8198 2022-07-19T22:03:02 audio: Add channel convert filter _after_ choosing an SIMD version.
Ryan C. Gordon fe160840 2022-07-19T16:04:48 audio: LOG_DEBUG_CONVERT should use SDL_Log, not fprintf(stderr).
Ryan C. Gordon 25727790 2022-07-19T02:16:08 audio: first attempt at rewriting the channel converters. This is not ready for production use!
Ozkan Sezer b700a326 2022-07-20T07:01:10 audio, pipewire: fix signatures of pw_get_library_version and pw_init. Reference issue: https://github.com/libsdl-org/SDL/issues/5938
Ozkan Sezer 6e210d37 2022-07-20T07:01:10 audio, pipewire: pipewire_version_xx globals out of dynamic loading Fixes build with --disable-pipewire-shared Reference issue: https://github.com/libsdl-org/SDL/issues/5938
Sam Lantinga b299cb3d 2022-07-17T08:31:16 Added a utility function to calculate the next power of 2 for a value
Ethan Lee 90b86b13 2022-07-17T10:35:09 audio: Handle non-power-of-two spec.samples when unsupported Fixes #3685
Ethan Lee a09d62e4 2022-07-15T23:45:56 directsound: Remove redundant SubFormat copy
Ethan Lee c5e408ae 2022-07-15T11:31:59 directsound: For channel counts > 2, generate a dwChannelMask for CreateSoundBuffer
Ethan Lee fff34f63 2022-07-15T09:46:53 windows: SDL_IMMDevice needed more deinit code from the Win32 path. Fixes #5919
Frank Praznik 37aecda2 2022-07-14T11:38:51 pipewire: Use PW_KEY_TARGET_OBJECT to specify stream connection nodes Pipewire 0.3.44 introduced PW_KEY_TARGET_OBJECT, which is to be used to specify target connection nodes for streams. This parameter takes either a node path (PW_KEY_NODE_NAME) or serial number (PW_KEY_OBJECT_SERIAL) to specify a target node. The former is used in this case since the path is already being retrieved and stored for other purposes. The target_id parameter in pw_stream_connect() is now deprecated and should always be PW_ID_ANY when PW_KEY_TARGET_OBJECT is used.
Frank Praznik 36d8460c 2022-07-11T16:59:23 pipewire: Dynamically allocate the buffer for node strings Calculate and allocate the buffer for the IO node name and path strings dynamically instead of using arbitrary sized static buffers.
Frank Praznik 996cea31 2022-07-11T15:15:48 pipewire: Update default audio devices during runtime Make the default device metadata node persist for the lifetime of the hotplug loop so the default source/sink devices will be updated if they change during runtime.
Frank Praznik 60da11f0 2022-07-11T14:31:20 pipewire: Remove deprecated configuration key With Pipewire now requiring a minimum version 0.3.24, the PW_KEY_CONTEXT_PROFILE_MODULES value is no longer required for legacy compatability and can be safely removed.
Ethan Lee ecfbdce6 2022-07-11T13:09:48 pipewire: Require version 0.3.24 or newer at runtime
Ethan Lee 2f0816ad 2022-07-11T13:08:30 Add SDL_GetDefaultAudioInfo. This API is supported on pipewire, pulseaudio, wasapi, and directsound. Co-authored-by: Frank Praznik <frank.praznik@gmail.com>
Ethan Lee ae105ae1 2022-07-10T12:59:33 windows: Move IMMDevice work to common file, implement DirectSound enumeration support
285424336 4aad594a 2022-07-08T16:17:46 Update SDL_qsa_audio.c Fix qnx platform compile error, change SDL_Bool to SDL_bool.
Pierre Wendling 6c536afd 2022-06-27T15:43:17 Fix C89 declaration for macOS modules. Since Clang 14, `-Wdeclaration-after-statement` is enforced on every standard.
Francisco Javier Trujillo Mata e4a80875 2022-06-24T16:43:20 Initial Audio driver
chalonverse 3b191580 2022-06-27T17:19:39 Windows GDK Support (#5830) * Added GDK * Simplfied checks in SDL_config_wingdk.h * Added testgdk sample * Added GDK readme * Fixed error in merge of SDL_windows.h * Additional GDK fixes * OpenWatcom should not export _SDL_GDKGetTaskQueue * Formatting fixes * Moved initialization code into SDL_GDKRunApp
Sam Lantinga abe38bca 2022-06-18T13:08:58 Support SDL_AUDIODRIVER set to "dsound", which was used by SDL 1.2 Fixes https://github.com/libsdl-org/SDL/issues/5818
Sam Lantinga adc68758 2022-06-17T10:22:28 Added SDL_copyp to avoid size mismatch when copying values (thanks @1bsyl!) Closes https://github.com/libsdl-org/SDL/pull/5811
Ryan C. Gordon dc62fec5 2022-05-20T21:07:25 audio: Fix locking in backends that manage their own callback threads. Otherwise you might get a race where an app pauses the device, but the audio callback still manages to run after the pause is in place.
Pierre Wendling 501a4991 2022-05-05T18:44:32 Add clang-format on/off comments where necessary. Comments were added in places where INDENT-ON/OFF comments are. Places like stdlib's asm don't need it as clang-format doesn't try to indent it.
Cameron Cawley 0cca71a8 2022-05-18T22:12:05 Use SDLCALL for callbacks in public APIs
Ryan C. Gordon 29694869 2022-04-28T15:56:52 audio: Revert one of the resampler optimizations. This is the one that splits the "left wing" into two for loops to bubble out the conditional that decides if it should read from the left padding or the input buffer. I still believe the optimization is good, but the basic logic of it was incorrect, and needs to be reexamined and fixed before going back into revision control.
Ryan C. Gordon 5066910b 2022-04-10T13:44:01 audio: Make pregenerated resampler kaiser filter more precise.
Ryan C. Gordon 111c3add 2022-04-10T13:23:51 audio: Resampler optimizations. - Calculate `j * RESAMPLER_SAMPLES_PER_ZERO_CROSSING` once per loop iteration since we use it multiple times. - Do the left-wing loop in two sections: while `srcframe < 0` and then the remaining calculations when `srcframe >= 0`. This bubbles a conditional out of every iteration of a tight loop, giving us a boost. We could _probably_ do this to the right-wing loop too, but it's less straightforward there. - The real win: Use floats instead of doubles. This almost doubles the speed of the entire function on Intel CPUs, and for embedded things without hardware-level support for doubles, the speedup is enormous. This in theory might reduce audio quality, though, and I had to put a check in place to avoid a division-by-zero that we avoided at higher precision, but this is likely to be worth keeping for at least the Sony PSP and other smaller platforms, if not everyone.
Ryan C. Gordon de019568 2022-04-09T23:43:57 audio: Prebake the resampler's kaiser table instead of doing it at runtime.
Ryan C. Gordon f6eb4b07 2022-04-26T13:14:15 pulseaudio: Feed audio data in response to write callbacks. Instead of waiting until the entire buffer from the SDL callback is ready to be accepted by PulseAudio, we use pa_stream_set_write_callback and feed some portion of the buffer as callbacks come in asking for more. This lets us remove the halving of the buffer size during device open, and also (hopefully) solves several strange hangs that happen in unusual circumstances. Fixes #4387 Fixes #2262
Sam Lantinga 9e264b92 2022-04-18T09:20:47 Certain audio drivers, like the RME "Pro" Audio driver, have resampling quality issues when using WASAPI. We'll use SDL's resampling algorithm so we have consistent quality between platforms and drivers. Fixes https://github.com/libsdl-org/SDL/issues/5538
Ryan C. Gordon c1336b21 2022-04-17T12:43:32 hints: Make SDL_VIDEODRIVER and SDL_AUDIODRIVER formal hints. They were just environment variables before. Fixes #5528.
Ryan C. Gordon 727eef70 2022-04-09T10:12:49 audio: SDL_ConvertStereoToMono_SSE3 missed an unaligned load.
Ivan Epifanov 178ac196 2022-03-29T23:48:08 Vita: add audio capture support
Connor Clark aec86ba8 2022-03-26T15:31:33 emscriptenaudio: proxy calls to main thread
Ryan C. Gordon 4fe7b2cb 2022-03-24T11:00:43 static analysis: Fixed several complaints from codechecker. There are still some pending Objective-C specific issues. Reference issue #4600.
Ivan Epifanov 0af2db6f 2022-03-23T19:04:29 Vita: support audio format fallback
Eddy Jansson 24ffcbd9 2022-03-20T17:23:34 audio: Set error message on dsp init failure. if SDL_EnumUnixAudioDevices() fails to find any devices, set an error message on the exit path. Without this, SDL_Init() could fail without any message available in SDL_GetError().
Sam Lantinga a485ffc3 2022-03-19T09:50:22 Fix "SDL_FALSE is not defined" runtime error for emscripten.
Christian Kündig fbbd0270 2022-03-18T23:10:19 Fix "SDL_TRUE is not defined" runtime error for emscripten.
pionere 01bfde45 2022-03-17T12:22:18 simplify SetDSerror - no need to keep the error in a static variable - always print the error code - reduce the required stack-size - reduce the number of snprintf calls (and code size)
pionere 2c6a9c51 2022-03-16T09:36:43 minor optimization (SDL_audiocvt.c)
Ozkan Sezer 5905696e 2022-03-15T23:10:04 SDL_audiocvt.c: minor cleanup.
Wohlstand 7c421fec 2022-03-14T05:55:41 SDL_audiocvt.c: Don't byteswap 8-bit streams Otherwise, this results an assert on big endian machines when attenpting to use SDL_LoadWAV_RW function to load 8-bit WAV files.
Wohlstand 08d27dfd 2022-02-22T15:27:30 SDL_openslES.c: Detect float support in runtime and use it Allow using of the float output type on newer Android devices, but keep PCM16 output on older Closes #5358
Frank Praznik 228db352 2022-02-08T13:29:40 audio: pipewire: Tidy up formatting
Frank Praznik 9da9e85c 2022-02-08T12:59:01 audio: pipewire: Reset all hotplug values and pointers on shutdown Ensure that all hotplug variables and pointers are reset to NULL or their original value when shutting down.
Frank Praznik 5b36a527 2022-02-08T12:30:28 audio: pipewire: Remove redundant locks The io_list_check_add() and io_list_remove() functions are only ever called from within the Pipewire thread loop, so the locks are redundant. io_list_sort() is called from within a lock in the device detection function, so those additional locks are redundant as well.
Frank Praznik 48b4d1c4 2022-02-08T12:20:52 audio: pipewire: Convert atomic hotplug conditional variables to SDL_bool The hotplug loop condition variables are always guarded by the loop mutex while the loop is running, so they don't need to be atomic.
Frank Praznik 53091e36 2022-02-02T12:30:34 audio: pipewire: Remove the hard upper bound on rates and buffer sizes Remove the hard upper limit of 8192 samples and instead use the buffer sizes provided by Pipewire to determine the size of the intermediate input buffer and whether double buffering is required for output streams. This allows for higher latency streams to potentially avoid double-buffering in the output case, and we can guarantee that the intermediate input buffer will always be large enough to handle whatever Pipewire may deliver. As the buffer size calculations occur in a callback in the Pipewire processing thread itself, the stream readiness check has been modified to wait on two distinct flags set when the buffers have been configured and when the stream is ready and running.
Frank Praznik 66866249 2022-02-02T11:09:02 audio: pipewire: Condition variable doesn't need to be atomic The condition variable is guarded by a mutex, so no need for it to be atomic.
Frank Praznik 0b34f180 2022-01-30T12:00:55 audio: pipewire: Don't double free properties on init failure The context and stream creation functions will destroy the passed properties object on failure, so no need to do it manually. The pw_properties_free() function pointer is no longer needed, so it can be removed.
pionere a5c610b0 2022-01-08T12:28:02 revert 'Changed to use 0xFE instead of 0xFF for better sound quality.'
pionere a70bb259 2022-01-20T13:16:03 drop handle parameter of OpenDevice
pionere 47ddb04e 2022-01-20T12:31:02 cleanup/sync the main loop of *_OpenDevice functions to pick audio format II.
pionere 2eafe434 2022-01-20T12:18:59 cleanup/sync the main loop of *_OpenDevice functions to pick audio format
pionere 3939ef72 2022-01-19T17:23:53 cleanup SDL_GetAudioDeviceSpec - drop unnecessary hascapture check - call SDL_InvalidParamError and return -1 in case the index is out of range - do not zfill SDL_AudioSpec - adjust documentation to reflect the behavior
pionere 113109f8 2022-01-19T17:18:47 cleanup SDL_GetAudioDeviceName - drop unnecessary hascapture check - call SDL_InvalidParamError in case the index is out of range
pionere f91211eb 2022-01-19T14:51:42 cleanup WASAPI_PrepDevice - reorganize the loop which checks for the right wave-format - use the return value of UpdateAudioStream - ensure SetError is called in SDL_NewAudioStream
pionere c9e8d157 2022-01-19T12:59:35 re-use return value of SDL_SetError/WIN_SetErrorFromHRESULT/SDL_OutOfMemory II.
pionere 1043dd8c 2022-01-19T12:58:04 adjust handling of iscapture - drop iscapture parameter of OpenDevice - use SDL_bool for iscapture
pionere 60deadba 2022-01-17T17:22:30 re-use return value of SDL_SetError/WIN_SetErrorFromHRESULT/SDL_OutOfMemory
pionere ebdd5366 2022-01-17T16:26:02 use SDL_InvalidParamError or SDL_assert instead of custom SDL_SetError
pionere 4a17612b 2022-01-17T12:04:32 get rid of BeginLoopIteration
pionere 0770c582 2022-01-17T11:48:26 get rid of PrepareToClose
Ryan C. Gordon e0236c02 2022-01-23T01:28:36 audio: Removed an unnecessary commented-out line.
pionere 0dda8a7f 2022-01-17T11:21:01 cleanup init functions of audio - use SDL_bool if possible - assume NULL/SDL_FALSE filled impl - skip zfill of current_audio at the beginning of SDL_AudioInit (done before the init() calls)
pionere 6fcfcc3d 2022-01-17T11:00:03 get rid of SkipMixerLock
pionere bf66720a 2022-01-08T12:22:28 fix mixing of U16 audio
pionere 905e2e22 2022-01-08T12:15:53 cleanup of SDL_MixAudioFormat
Frank Praznik b3984df1 2022-01-19T13:14:54 audio: pipewire: Use client config files instead of module names Pipewire, as of 0.3.22, uses client config files to load modules instead of explicitly specifying them (PW_KEY_CONTEXT_PROFILE_MODULES is deprecated). Use the new method to load the realtime module to boost the audio thread priority.
Ryan C. Gordon 5d07c036 2022-01-09T08:13:34 psp: Force channels to stereo if user requested anything other than mono. Before it would only clamp to stereo if it also had to resample, which would fail if the app specified 44100Hz and surround sound.
Francisco Javier Trujillo Mata f3255df9 2021-11-17T23:50:41 Improve audio compatibility in PSP. Now it supports more formats and frequencies
Sam Lantinga 120c76c8 2022-01-03T09:40:00 Updated copyright for 2022
e d0de4c62 2021-12-31T14:36:32 Android: fixes build NDK 21d
thfrwn 2b6b69fb 2021-12-12T10:08:11 fix assertion failure in sndio audio caused by the recent hotplugging support
Ozkan Sezer 9409642e 2021-12-07T21:24:24 fix some warnings from vita builds (missing includes) also some tidy-up to whitespace.
Ozkan Sezer 00014dc2 2021-12-07T18:47:10 fix some warnings from psp builds (missing includes.)
ALittleDruid 2f0edc29 2021-12-04T09:23:19 IAudioClient::SetEventHandle Parameter eventHandle Should not be NULL
Ryan C. Gordon d713a680 2021-11-25T22:32:40 pulseaudio: wait until at least 1/8th (!) of the mixbuffer is available. This is to workaround systems where we hang in playback because the buffer does not report the space for whatever reason. The system will instead block in PlayDevice, which always immediately follows WaitDevice in modern times so this works out, and it seems to keep the device moving forward. For a future revision, we are either going to clean this up more properly, or attempt to move to PulseAudio's pa_stream_set_write_callback() API, but this will do for SDL 2.0.18. Reference #4387 for discussion and further information.
Sylvain 2004aaf3 2021-11-22T16:54:17 SDL_wave: use SDL_free
Sylvain 155db97d 2021-11-22T16:48:13 Remove 'malloc' from comment
Sylvain 38cfe25b 2021-11-22T16:39:56 Remove 'malloc' from comment
Sylvain 8fb19d21 2021-11-22T16:29:24 Vita: unneeded include
Sylvain e702a4e5 2021-11-22T16:28:49 PSP: un needed include
Sylvain d31251b0 2021-11-21T22:30:48 use SDL's functions version inplace of libc version
Sylvain a0cb079a 2021-11-21T15:45:08 Fixed bug #4982 - Failed to open audio_device on OpenSLES / Android 5.x with freq 96khz+
Sylvain b6e8651a 2021-11-20T15:31:21 Audio 6.1 should be allowed now (see #4974)