Commit Graph

1399 Commits

Author SHA1 Message Date
Ryan C. Gordon
9c6876ac18 pipewire: Don't mark a device disconnected if pw_stream_dequeue_buffer fails.
Apparently this _can_ happen under load, or maybe some other weird condition.

Hopefully this will encourage PipeWire to fire output_callback again, and
we'll just try again later.

Reference Issue #14916.

(cherry picked from commit 32ef82caaf)
2026-04-02 13:59:43 -04:00
Ryan C. Gordon
2503d34724 aaudio: Respect SDL_HINT_AUDIO_DEVICE_STREAM_ROLE hint.
Fixes #15299.

(cherry picked from commit 4d17b99d0a)
2026-04-02 11:25:22 -04:00
Regan Green
764d7633ea Use DSBFREQUENCY_MAX instead of hardcoded constant for DirectSound driver max frequency.
(cherry picked from commit 1d2f9f0e0e)
2026-03-25 17:42:58 -07:00
Clownacy
fda7c0b461 Fix DirectSound buffer creation failure with >200kHz
Caps the sample rate at 200kHz so that SDL's mixer will downsample any streams which are higher than that.

My Mega Drive emulator outputs at 223721Hz (the sample rate of the PSG chip), and `SDL_OpenAudioDeviceStream` fails due to DirectSound's `CreateSoundBuffer` returning an 'invalid parameter' error code. Lowering the sample rate makes the error go away.

Reported to me by @B3HKO in this issue:
https://github.com/Clownacy/clownmdemu-frontend/issues/60

The 200kHz limit is documented here:
https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ee419022(v=vs.85)

DirectSound's Wikipedia article mentions that problems may occur with sample rates above 192kHz, but no source is provided, so I am unsure whether to take it seriously.

(cherry picked from commit 6efe0e19a7)
2026-03-25 13:24:03 -07:00
Sam Lantinga
2f4919c6ff Use 20 ms as the default audio buffer size on Android
It turns out that Android will not pick a low latency buffer size by default.

(cherry picked from commit c381b2bdfa)
2026-02-13 14:35:25 -08:00
Ryan C. Gordon
723b77ede8 wasapi: Patched to compile.
(cherry picked from commit 31404a9dcb)
2026-02-10 11:35:33 -05:00
Ryan C. Gordon
a806a9092b wasapi: stop infinite loop in audio thread when recording device is unplugged. 2026-02-10 09:24:34 -05:00
Max Seidenstücker
576c2d2f2c Merge all occurances of __func__ and __FUNCTION__ to SDL_FUNCTION
(cherry picked from commit 8f8880a8eb)
2026-02-08 11:56:12 -08:00
William Horvath
054bea938a dummyaudio: Remove bitrotted support for __EMSCRIPTEN_PTHREADS__ code path.
In SDL_audio.c:OpenPhysicalAudioDevice, an attempt is made to SDL_CreateThread
if ProvidesOwnCallbackThread is false, but SDL_CreateThreadWithPropertiesRuntime
is not implemented for Emscripten, so this always fails. I'm not sure if/when
this ever worked, but it simply cannot work in its current state.

(cherry picked from commit 8ee7dc2f9f)
2026-02-08 09:32:18 -08:00
Ryan C. Gordon
d9bc9dda7a emscripten: Cleanup some wasm32/wasm64 ifdefs.
Fixes #14066.

(cherry picked from commit bb6ced6fc0)
2026-02-02 19:23:33 -05:00
Ryan C. Gordon
f9bb023eeb emscripten: Unify creation of Module['SDL3'] in at SDL_Init time.
(cherry picked from commit 7d093940a7)
2026-02-02 19:23:28 -05:00
Eddy Jansson
ff2a43bfbf Fix typos in comments.
(cherry picked from commit 23fec649c2)
2026-01-30 07:25:35 -08:00
Sam Lantinga
80c6a5f8d9 Updated copyright for 2026 2026-01-01 09:48:19 -08:00
Ryan C. Gordon
7d66d3271b emscriptenaudio: Don't force reset SDL3.audio_recording/audio_playback.
Otherwise, opening devices for recording and playback at the same time will
cause problems.
2025-12-30 15:40:25 -05:00
Ryan C. Gordon
b681862f14 emscripten: Don't pass an argument to MAIN_THREAD_EM_ASM_INT we don't use.
This upsets things, because you end up calling a javascript function with
more arguments than it expects, and if asserts are enabled, Emscripten notices
this and aborts the program when you hit this code.

Reference Issue #14670.
2025-12-30 15:40:25 -05:00
Anonymous Maarten
9dd3e2305e dlnote: embed trailing semicolon in SDL_ELF_NOTE_DLOPEN macro 2025-12-24 23:45:50 +03:00
Ryan C. Gordon
6f774908fe audio: SDL_GetAudioDeviceName() now works with the default device IDs.
Fixes #14615.
2025-12-08 11:25:15 -05:00
Ryan C. Gordon
c1db2b4bb0 Revert "hints: Added SDL_HINT_AUDIO_ENFORCE_MINIMUM_SPEC."
Revert "Sync SDL3 wiki -> header"

This reverts commits b7c8b2f29a and
29213efa65.
2025-12-01 14:39:48 -05:00
unknown
b7c8b2f29a hints: Added SDL_HINT_AUDIO_ENFORCE_MINIMUM_SPEC.
Fixes #14426.
2025-11-30 23:26:02 -05:00
Ryan C. Gordon
7db0e48454 wasapi: Minor style tweaks. 2025-11-13 20:58:21 -05:00
unknown
b9c790949e wasapi: Don't ignore device disconnect events on unopened devices.
Reference Issue #13317.
2025-11-09 01:15:45 -05:00
Joshua T. Fisher
641deb9c0e Initial port to SDL3 audio subsystem 2025-11-03 10:08:50 -05:00
Sam Lantinga
97e2951875 Removed redundant wait at shutdown in the ALSA audio driver 2025-11-02 18:30:12 -08:00
Sam Lantinga
0882623092 Clamp the audio drain delay to 100 ms
Fixes https://github.com/libsdl-org/SDL/issues/9829
2025-11-02 11:15:25 -08:00
Arkadiusz Hiler
0d2f081d41 pulseaudio: Match channel map to SDL's chosen order
pa_channel_map_init_auto() with PA_CHANNEL_MAP_WAVEEX does the wrong
thing as it just takes the lest significant bits of
WAVEFORMATEXTENSIBLE's dwChannelMask in order. This doesn't match SDL's
chosen channel ordering.

The implementation here mirrors what we do for PipeWire.
2025-10-30 13:32:43 -07:00
Sam Lantinga
a7147f327f Temporarily disable WASAPI device roles
Setting AudioCategory_GameChat breaks audio on several devices, including Behringer U-PHORIA UM2 and RODE NT-USB Mini. We'll disable this for now until we understand more about what's happening.
2025-10-30 07:27:23 -07:00
Eddy Jansson
aaee09d6ed Don't do NULL-checks before SDL_free()
Replaces the pattern

  if (ptr) {
    SDL_free(ptr);
  }

with

  SDL_free(ptr);
2025-10-20 00:13:09 -07:00
Sam Lantinga
a58ae3a94f Added WASAPI support for SDL_HINT_AUDIO_DEVICE_STREAM_ROLE
Also added SDL_HINT_AUDIO_DEVICE_RAW_STREAM

Fixes https://github.com/libsdl-org/SDL/issues/14091
2025-10-13 14:20:19 -07:00
Ryan C. Gordon
0467c531fa wasapi: Check for a NULL device during disconnect handling.
This is probably something we already cleaned up that has something running
in an unexpected order now that we've moved disconnect work to the main thread.
2025-10-03 09:36:31 -04:00
mccakit
d42bf59c66 wasm64 lto fix 2025-09-28 19:33:48 -04:00
Ryan C. Gordon
2676f23910 audio: fix crash in SDL_GetAudioStreamOutputChannelMap.
Fixes #14058.
2025-09-27 13:31:29 -04:00
Ryan C. Gordon
e528d5bd9f wasapi: Don't proxy device disconnect to the WASAPI management thread.
It gets proxied to the main thread, now.

Fixes deadlocks when unplugging a playing USB audio device.
2025-09-26 14:11:08 -04:00
Ryan C. Gordon
65e462a6f2 audio: Handle device disconnects on the main thread.
This avoids situations like:

- PulseAudio holds its own lock in the hotplug thread.
- The hotplug thread notices a device went away.
- The hotplug thread calls SDL_AudioDeviceDisconnected().
- SDL_AudioDeviceDisconnected() tries to grab the device lock.
- The device thread is holding the device lock...
- ...but is currently waiting on PulseAudio's lock to release.

In short: deadlock. It's better to queue this work to run on the main thread,
where we can guarantee a start with _none_ of the audio subsystem locks held.
2025-09-25 16:02:19 -04:00
Ryan C. Gordon
09ee8876b3 wav: Patched to compile on Visual Studio. 2025-09-22 10:37:52 -04:00
Ryan C. Gordon
44e4deab7c wav: Clamp DATA chunk to size of file if possible.
Prevents a malicious file from malloc'ing multiple gigabytes.

Fixes #10052.
2025-09-22 09:50:56 -04:00
Sam Lantinga
25b2d2c821 Use new parameter validation macro 2025-09-18 20:58:32 -07:00
nightmareci
2f5bc17ea6 Fix support for Windows XP and up (#13904) 2025-09-08 13:00:26 -07:00
Ryan C. Gordon
937bf4d789 alsa: Restart PCM devices after recovery from an overrun/underrun.
snd_pcm_recover() puts the device back in SND_PCM_STATE_PREPARED state; you
have to explicitly restart the device afterwards with snd_pcm_start().

Fixes #13761.
2025-09-05 13:50:06 -04:00
Sam Lantinga
9abeeebad5 Fixed warning: no previous prototype for function 2025-09-03 11:23:55 -07:00
Ryan C. Gordon
7323104f97 openslES: Patched to compile.
(whoops.)
2025-09-01 11:10:02 -04:00
Ryan C. Gordon
0b2a003a35 openslES: OpenSL ES on Android only supports two formats, limit to that.
(Three with the floating point extension, which we use.)

This is according to:

https://developer.android.com/ndk/guides/audio/opensl/opensl-for-android

Previously, this would accept a request for Sint8 or Sint32 and disaster
would ensue.

Fixes #13779.
2025-09-01 10:30:29 -04:00
Anonymous Maarten
0a6b80717c Record dynamic dependencies in .note.dlopen elf section 2025-08-27 16:11:39 +00:00
Ryan C. Gordon
8f04e4af00 audio: Clean out all the bitshifting.
Hide the implementation details in something human-readable.
2025-08-25 13:10:51 -04:00
Ryan C. Gordon
01d94ca9de audio: Renamed device_hash_lock to subsystem_rwlock.
It protects more than the device hashes!
2025-08-25 13:10:51 -04:00
Ryan C. Gordon
226fecff78 audio: Split current_audio.device_hash into two separate hashtables.
One for physical devices, one for logical devices.

Fixes #13032.
2025-08-25 13:10:51 -04:00
ChaseKnowlden
a743fb578c Use PulseAudio fragsize buffer correctly
Fixes broken microphone input in Sober
2025-08-13 17:36:44 -04:00
Sam Lantinga
4725213eef Support the "ambient" value for SDL_HINT_AUDIO_CATEGORY
Fixes https://github.com/libsdl-org/SDL/issues/13732
2025-08-12 09:54:20 -07:00
Petar Popovic
23e08f7807 SDL_LoadWAV_IO(): On error, set *audio_buf to NULL and *audio_len to 0 2025-08-03 13:44:10 -04:00
Petar Popovic
1749aba641 Fixed a few "-Wredundant-decls" warnings 2025-08-01 18:35:02 +03:00
Wouter Wijsman
3d1a28ccf2 psp: fix audio not playing 2025-07-30 13:11:05 -07:00