From c13504629ee9a2a82bbfbfb03582ef7fc2b4e400 Mon Sep 17 00:00:00 2001 From: David Reid Date: Sat, 22 Feb 2025 09:35:16 +1000 Subject: [PATCH 1/4] Minor update to custom_backend example. --- examples/custom_backend.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/examples/custom_backend.c b/examples/custom_backend.c index 7c347077..a5e835d7 100644 --- a/examples/custom_backend.c +++ b/examples/custom_backend.c @@ -2,7 +2,7 @@ This example show how a custom backend can be implemented. This implements a full-featured SDL2 backend. It's intentionally built using the same paradigms as the built-in backends in order to make -it suitable as a solid basis for a custom implementation. The SDL2 backend can be disabled with MA_NO_SDL, exactly like the build-in +it suitable as a solid basis for a custom implementation. The SDL2 backend can be disabled with MA_NO_SDL, exactly like the built-in backends. It supports both runtime and compile-time linking and respects the MA_NO_RUNTIME_LINKING option. It also works on Emscripten which requires the `-s USE_SDL=2` option. @@ -23,8 +23,7 @@ Custom backends are identified with the `ma_backend_custom` backend type. For th `ma_backend_custom` backend type because otherwise the built-in backends would always get chosen first and none of the code for the custom backends would actually get hit. By default, the `ma_backend_custom` backend is the lowest priority backend, except for `ma_backend_null`. */ -#define MINIAUDIO_IMPLEMENTATION -#include "../miniaudio.h" +#include "../miniaudio.c" #ifdef __EMSCRIPTEN__ #include From 2e054f801185919490810618894935bb54855fe2 Mon Sep 17 00:00:00 2001 From: David Reid Date: Sat, 22 Feb 2025 09:42:39 +1000 Subject: [PATCH 2/4] Update gitignore. --- .gitignore | 91 +++++++++++++++++++++++++++--------------------------- 1 file changed, 46 insertions(+), 45 deletions(-) diff --git a/.gitignore b/.gitignore index fac0b7ed..9247450b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,52 +1,53 @@ \#docs/ -_private/ -build/ -debugging/ -evaluations/ -examples/build/bin/ -examples/build/codelite/ -examples/build/vc6/ -examples/build/vc15/ -examples/build/vc17/ -examples/simple_playback_sine.cpp -external/ogg/ -external/vorbis/ -external/opus/ -external/opusfile/ -extras/osaudio/tests/build/bin/ -extras/osaudio/tests/build/vc17/ -extras/osaudio/tests/build/watcom-dos/ -extras/backends/pipewire/a.out -extras/decoders/litewav/ -research/_build/ -tests/_build/bin/ -tests/_build/res/output/ -tests/_build/tcc/ -tests/_build/vc6/ -tests/_build/vc15/ -tests/_build/vc17/ -tests/_build/watcom/ -tests/_build/capture.wav -tests/_build/a.out -tests/_build/a.exe -tests/test_stress/ -tests/*.c -tests/*.cpp -tools/_build/ -website/docs/ +/_private/ +/build/ +/debugging/ +/evaluations/ +/examples/build/bin/ +/examples/build/codelite/ +/examples/build/vc6/ +/examples/build/vc15/ +/examples/build/vc17/ +/examples/simple_playback_sine.cpp +/external/ogg/ +/external/vorbis/ +/external/opus/ +/external/opusfile/ +/extras/osaudio/tests/build/bin/ +/extras/osaudio/tests/build/vc17/ +/extras/osaudio/tests/build/watcom-dos/ +/extras/backends/pipewire/a.out +/extras/decoders/litewav/ +/research/_build/ +/tests/_build/bin/ +/tests/_build/res/output/ +/tests/_build/tcc/ +/tests/_build/vc6/ +/tests/_build/vc15/ +/tests/_build/vc17/ +/tests/_build/watcom/ +/tests/_build/capture.wav +/tests/_build/a.out +/tests/_build/a.exe +/tests/debugging/archive/ +/tests/test_stress/ +/tests/*.c +/tests/*.cpp +/tools/_build/ +/website/docs/ *.vcxproj.user .vs/ .idea/ .vscode/ # Below are individual files that I may start version controlling later or delete outright. -examples/build/COSMO.txt -research/ma_fft.c -research/ma_hrtf.c -research/ma_atomic.c -research/miniaudio_engine.c -tools/codegen/miniaudio_amalgamator.c -tools/codegen/miniaudio_codegen_utils.c -tools/codegen/miniaudio_docgen.c -tools/codegen/miniaudio_hrtfgen.c -tools/codegen/miniaudio_splitter.c \ No newline at end of file +/examples/build/COSMO.txt +/research/ma_fft.c +/research/ma_hrtf.c +/research/ma_atomic.c +/research/miniaudio_engine.c +/tools/codegen/miniaudio_amalgamator.c +/tools/codegen/miniaudio_codegen_utils.c +/tools/codegen/miniaudio_docgen.c +/tools/codegen/miniaudio_hrtfgen.c +/tools/codegen/miniaudio_splitter.c \ No newline at end of file From deafb7e96f09a60bda8a98a5777304c18cf74c8e Mon Sep 17 00:00:00 2001 From: David Reid Date: Sat, 22 Feb 2025 09:44:03 +1000 Subject: [PATCH 3/4] Add debugging sandbox for the purpose of debugging miniaudio. --- CMakeLists.txt | 11 +++++++---- tests/debugging/debugging.cpp | 10 ++++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 tests/debugging/debugging.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index cf803778..4d41cbd4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ option(MINIAUDIO_NO_OPENSL "Disable the OpenSL|ES backend" option(MINIAUDIO_NO_WEBAUDIO "Disable the Web Audio backend" OFF) option(MINIAUDIO_NO_CUSTOM "Disable support for custom backends" OFF) option(MINIAUDIO_NO_NULL "Disable the null backend" OFF) -option(MINIAUDIO_ENABLE_ONLY_SPECIFIC_BACKENDS "Only enable specific backends. Backends can be enabled with MINIAUDIO_ENABLE_[BACKEND]" OFF) +option(MINIAUDIO_ENABLE_ONLY_SPECIFIC_BACKENDS "Only enable specific backends. Backends can be enabled with MINIAUDIO_ENABLE_[BACKEND]." OFF) option(MINIAUDIO_ENABLE_WASAPI "Enable the WASAPI backend" OFF) option(MINIAUDIO_ENABLE_DSOUND "Enable the DirectSound backend" OFF) option(MINIAUDIO_ENABLE_WINMM "Enable the WinMM backend" OFF) @@ -51,8 +51,8 @@ option(MINIAUDIO_NO_DEVICEIO "Disable audio playback and captu option(MINIAUDIO_NO_RESOURCE_MANAGER "Disable the resource manager API" OFF) option(MINIAUDIO_NO_NODE_GRAPH "Disable the node graph API" OFF) option(MINIAUDIO_NO_ENGINE "Disable the high-level engine API" OFF) -option(MINIAUDIO_NO_THREADING "Disable threading. Must be used with MINIAUDIO_NO_DEVICEIO" OFF) -option(MINIAUDIO_NO_GENERATION "Disable generation APIs such as ma_waveform" OFF) +option(MINIAUDIO_NO_THREADING "Disable threading. Must be used with MINIAUDIO_NO_DEVICEIO." OFF) +option(MINIAUDIO_NO_GENERATION "Disable generation APIs such as ma_waveform and ma_noise" OFF) option(MINIAUDIO_NO_SSE2 "Disable SSE2 optimizations" OFF) option(MINIAUDIO_NO_AVX2 "Disable AVX2 optimizations" OFF) option(MINIAUDIO_NO_NEON "Disable NEON optimizations" OFF) @@ -525,11 +525,14 @@ if(MINIAUDIO_BUILD_TESTS) target_link_libraries(${name} PRIVATE miniaudio_common_options) endfunction() + # The debugging test is only used for debugging miniaudio itself. Don't do add_test() for this, and do not include it in in any automated testing. + add_miniaudio_test(miniaudio_debugging debugging/debugging.cpp) + add_miniaudio_test(miniaudio_test_deviceio test_deviceio/ma_test_deviceio.c) add_test(NAME miniaudio_test_deviceio COMMAND miniaudio_test_deviceio --auto) - # This is just to test the C++ build. Don't do add_test() for this. add_miniaudio_test(miniaudio_test_cpp test_cpp/ma_test_cpp.cpp) + add_test(NAME miniaudio_test_cpp COMMAND miniaudio_test_cpp --auto) # This is just the deviceio test. add_miniaudio_test(miniaudio_test_automated test_automated/ma_test_automated.c) add_test(NAME miniaudio_test_automated COMMAND miniaudio_test_automated) diff --git a/tests/debugging/debugging.cpp b/tests/debugging/debugging.cpp new file mode 100644 index 00000000..ba7b300e --- /dev/null +++ b/tests/debugging/debugging.cpp @@ -0,0 +1,10 @@ +/* This is just a sandbox for debugging miniaudio. Do not run this as part of some automated testing process. */ +#include "../../miniaudio.c" + +int main(int argc, char** argv) +{ + (void)argc; + (void)argv; + + return 0; +} From 3fd7c9f1994c02c04be1c76f604e76502f5d7dd0 Mon Sep 17 00:00:00 2001 From: David Reid Date: Sat, 22 Feb 2025 10:14:04 +1000 Subject: [PATCH 4/4] Fix a bug when no data callback is specified in the device config. Public issue https://github.com/mackron/miniaudio/issues/893 --- miniaudio.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/miniaudio.h b/miniaudio.h index eb5df6bd..e1d2a13c 100644 --- a/miniaudio.h +++ b/miniaudio.h @@ -18949,6 +18949,11 @@ static void ma_device__handle_data_callback(ma_device* pDevice, void* pFramesOut } } ma_device_restore_denormals(pDevice, prevDenormalState); + } else { + /* No data callback. Just silence the output. */ + if (pFramesOut != NULL) { + ma_silence_pcm_frames(pFramesOut, frameCount, pDevice->playback.format, pDevice->playback.channels); + } } }