Commit Graph

2401 Commits

Author SHA1 Message Date
David Reid 9b66a480c7 Fix a bug with channel map retrieval with the channel converter.
This had the input and output channel maps the wrong way around.
2026-02-04 12:45:20 +10:00
David Reid cb26c7ec52 Remove an unnecessary function.
This removes the horrendously named `ma_device__post_init_setup()` which
I've been meaning to remove for years.
2026-02-04 12:44:35 +10:00
David Reid 02f8a6b952 Set up some infrastructure for some future optimizations.
This changes the way backends update the internal data format in
response to a device reroute. With this change we'll be able to remove
the `channelMap` and `internalChannel` map members from the `ma_device`
struct which should reduce its size by ~1KB.
2026-02-04 11:46:05 +10:00
David Reid dc72a5683b Add some getters:
ma_device_get_format()
  ma_device_get_channels()
  ma_device_get_sample_rate()
  ma_device_get_internal_format()
  ma_device_get_internal_channels()
  ma_device_get_internal_sample_rate()
  ma_device_get_internal_channel_map()
2026-02-04 10:52:08 +10:00
David Reid 5c4cb49ad8 Add ma_device_get_channel_map(). 2026-02-01 16:59:13 +10:00
David Reid d929fafb34 Add a specialized path for deinterleaving u8 samples.
This is not yet optimized.
2026-02-01 11:04:07 +10:00
David Reid 53fce8453c Rename a variable. 2026-02-01 11:03:46 +10:00
David Reid ac12fa70e0 Fix Dreamcast/KallistiOS build. 2026-01-29 16:29:14 +10:00
David Reid 3ab152afb3 audio(4): Failed context initialization if /dev/audioctl does not exist.
This allows initialization to abort at an earlier stage which gives the
fallback logic a chance to try a different backend.
2026-01-28 16:33:30 +10:00
David Reid 38e35935d7 Get the audio(4) backend compiling with Solaris.
I have not been able to figure out how to get audio working with my VM
so this is currently untested.
2026-01-28 16:20:09 +10:00
David Reid bbc7ad1921 audio(4): Make format encoding stuff more robust. 2026-01-28 14:47:24 +10:00
David Reid c134a1c870 Add Sun/Solaris compile-time detection. 2026-01-28 14:16:57 +10:00
David Reid 3b5b433e0c Fix some warnings with the release build. 2026-01-28 10:24:47 +10:00
David Reid 847711e291 Fix some warnings. 2026-01-28 09:48:25 +10:00
David Reid d1f34cd5db Update the audio ring buffer to use the standard config/init pattern.
This makes it consistent with everything else in the library.
2026-01-27 17:44:52 +10:00
David Reid 75b3f7dddc Update to the audio ring buffer.
This changes `write_pcm_frames()` so that when `pFramesWritten` is null,
the write is treated as all or nothing. If the entire write cannot be
performed, nothing at all will be written and `MA_NO_SPACE` will be
returned. The same applies with `read_pcm_frames()` and `pFramesRead` in
which case `MA_NO_DATA_AVAILABLE` will be returned.

The reason for this change is that if the called passes in null for
these values, they'll have no way to know how many frames were actually
written or read. Therefore the most practical way to treat it is as all
or nothing.
2026-01-27 17:04:22 +10:00
David Reid fcd386dd87 Remove ma_audio_queue. 2026-01-27 06:17:14 +10:00
David Reid 2302e58045 API CHANGE: Rename vtable to pVTable.
This applies to `ma_data_source_config` and `ma_node_config` and makes
the naming consistent with other parts of the library.
2026-01-26 15:46:58 +10:00
David Reid 28de8d8947 PipeWire: Try improving mono streams. 2026-01-26 14:04:12 +10:00
David Reid 18df387a84 Updates to ring buffers. 2026-01-26 12:18:41 +10:00
David Reid d30d1cfd89 Update ring buffer. 2026-01-26 06:26:29 +10:00
David Reid 8c2cbf6343 Fix some language in the documentation. 2026-01-25 20:45:15 +10:00
David Reid f99ff4cec0 Remove the old ring buffer.
Public issue https://github.com/mackron/miniaudio/issues/671
2026-01-25 20:30:27 +10:00
David Reid ca6afd1f49 Fix a bug with the audio ring buffer data source. 2026-01-25 18:45:05 +10:00
David Reid 7d1c994414 PipeWire: Use the new ring buffer. 2026-01-25 17:47:57 +10:00
David Reid af2cf5d161 Add a new ma_audio_ring_buffer data source.
This is a wrapper around `ma_ring_buffer` and is more specialized
towards audio. It is a data source and replaces `ma_pcm_rb` which will
be removed in a future commit.

Public issue https://github.com/mackron/miniaudio/issues/671
2026-01-25 16:50:28 +10:00
David Reid edb64e6017 Add a new SPSC ring buffer.
This improves on the old ring buffer by having a much simpler
implementation and a much simpler API that does not require the caller
to do reading and writing in a loop.

Future commits will be removing the old ring buffer.

Public issue https://github.com/mackron/miniaudio/issues/671
2026-01-25 14:05:30 +10:00
David Reid bef32b4419 Fix a null pointer dereference in the audio queue. 2026-01-22 11:34:35 +10:00
David Reid 8a43271555 Initial work on the audio queue data source.
Public issue https://github.com/mackron/miniaudio/issues/744
2026-01-22 11:29:53 +10:00
David Reid ba963e46b5 Web Audio: Experimental loopback support.
This uses `getDisplayMedia()`. Support for this is extremely browser and
system specific so I'm not advertising support for this documentation.

Public issue https://github.com/mackron/miniaudio/issues/967
2026-01-21 12:19:25 +10:00
David Reid f6b973d384 Allow backends to work without stepping when threading is disabled.
This is per-backend.
2026-01-21 12:14:34 +10:00
David Reid f37ffed283 Merge PipeWire backend into the main library. 2026-01-20 17:15:32 +10:00
David Reid f794044d0a WinMM: Optimize some memory allocations. 2026-01-17 18:50:21 +10:00
David Reid 251e0e59e4 OpenSL: Optimize some memory allocations. 2026-01-17 18:00:32 +10:00
David Reid 70ff2591bc PulseAudio: Optimize some memory allocations. 2026-01-17 17:23:56 +10:00
David Reid 1b7cc965df Prioritize JACK over ALSA.
With ALSA having a higher priority JACK will never actually get picked.
2026-01-17 15:57:57 +10:00
David Reid cb0e6afe70 Update to the decoding backend system.
The `onGetEncodingFormat` callback has been removed and replaced with an
`onInfo`. This new callback fills out a struct with the supported
encoding format (is recognized by miniaudio), in addition to the name of
the decoding backend, and the decoding library and vendor.
2026-01-17 14:49:26 +10:00
David Reid 3ab17977ea Have the engine apply clipping to samples at the end of processing.
This can be disabled with the `noClip` config option.
2026-01-17 12:55:09 +10:00
David Reid 89663fa647 Merge branch 'dev' into dev-0.12 2026-01-17 12:19:20 +10:00
David Reid 347321b27c Version 0.11.24 2026-01-17 09:37:44 +10:00
David Reid 8e6283aa31 Fix a warning. 2026-01-17 09:34:34 +10:00
Richard Keller a551f0e70b Free pa_context if connecting to PulseAudio fails. 2026-01-17 08:50:10 +10:00
David Reid 7dae981ad5 Add some helpers for resetting a sound after a fade and stop.
Public issue https://github.com/mackron/miniaudio/issues/714
2026-01-17 07:32:18 +10:00
David Reid 1d6fe3efc9 JACK: Refactoring.
* Devices are now enumerated properly. It will enumerate input or output
  ports depending on the device type, and then group by the client name.
  The client name will be considered a "device" from the perspective of
  miniaudio. The number of local ports will be the channel count.

* The port auto-connection process is now done in init() rather than
  start(). I do not know why this was ever in start() in the first
  place.

* Port auto-connection will now be restricted to the client ports. The
  old system would connect across multiple clients which is just a
  nonsensical way of doing. If more ports are requested than are
  available on the client, the excess ports will just not be connected.
2026-01-16 18:26:34 +10:00
David Reid 7ac50d477e Clean up some old code relating to the new device info system. 2026-01-16 06:26:01 +10:00
David Reid a0b24f6d3d audio(4): Fix a compilation error on OpenBSD. 2026-01-16 06:20:49 +10:00
David Reid ab06cb340f WASAPI: Update to new device info system. 2026-01-15 19:41:27 +10:00
David Reid b5213e0265 DirectSound: Update to new device info system. 2026-01-15 19:41:10 +10:00
David Reid 48cc2d3cf1 WinMM: Update to new device info system. 2026-01-15 19:40:32 +10:00
David Reid 01b69f7323 Core Audio: Update to the new device info system. 2026-01-15 19:06:41 +10:00