Audio playback and capture library written in C, in a single source file.
This report summarizes scanner evidence for mackron/miniaudio, a C project with 7,452 GitHub stars. SynthScan examined 49,907 lines of code across 115 source files, recording 102 pattern matches distributed across 4 syntactic categories. The legacy adjusted pattern signal is 2.1 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 102 finding(s).
Are imports declared and package/API names verified? 0 finding(s).
Are wrappers, guards, and repeated structures necessary? 0 finding(s).
Which changes need focused human review? 102 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 102 distinct pattern matches across 4 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | miniaudio.c | 1 | #define MINIAUDIO_IMPLEMENTATION | COMMENT |
| LOW | tools/audioconverter/audioconverter.c | 281 | ma_decoder_uninit(&decoder); | COMMENT |
| LOW | tools/audioconverter/audioconverter.c | 301 | #pragma warning(pop) | COMMENT |
| LOW | …ndroid/MiniaudioTester/app/src/main/cpp/CMakeLists.txt | 1 | # For more information about using CMake with Android Studio, read the | COMMENT |
| LOW | …ndroid/MiniaudioTester/app/src/main/cpp/CMakeLists.txt | 21 | # is preferred for the same purpose. | COMMENT |
| LOW | examples/custom_backend.c | 81 | /* SDL headers are necessary if using compile-time linking. */ | COMMENT |
| LOW | examples/custom_backend.c | 101 | #define MA_AUDIO_S16 0x8010 | COMMENT |
| LOW | examples/engine_steamaudio.c | 21 | /* Need to silence some warnings from the Steam Audio headers. */ | COMMENT |
| LOW | external/fs/fs.c | 1 | #ifndef fs_c | COMMENT |
| LOW | external/fs/fs.c | 21 | #define FS_SUPPRESS_CLANG_ANALYZER | COMMENT |
| LOW | external/fs/fs.c | 61 | } | COMMENT |
| LOW | external/fs/fs.c | 441 | if (error == 0) { | COMMENT |
| LOW | external/fs/fs.c | 461 | #endif | COMMENT |
| LOW | external/fs/fs.c | 481 | else if (error == EFAULT) { return FS_BAD_ADDRESS; } | COMMENT |
| LOW | external/fs/fs.c | 501 | #ifdef EINVAL | COMMENT |
| LOW | external/fs/fs.c | 521 | #endif | COMMENT |
| LOW | external/fs/fs.c | 541 | else if (error == ENAMETOOLONG) { return FS_PATH_TOO_LONG; } | COMMENT |
| LOW | external/fs/fs.c | 561 | #ifdef ENOSR | COMMENT |
| LOW | external/fs/fs.c | 581 | #endif | COMMENT |
| LOW | external/fs/fs.c | 601 | else if (error == ESOCKTNOSUPPORT) { return FS_SOCKET_NOT_SUPPORTED; } | COMMENT |
| LOW | external/fs/fs.c | 621 | #ifdef ENETRESET | COMMENT |
| LOW | external/fs/fs.c | 641 | #endif | COMMENT |
| LOW | external/fs/fs.c | 7741 | #if !defined(FS_USE_MKDTEMP_FALLBACK) | COMMENT |
| LOW | external/fs/fs.c | 8781 | #if defined(__clang__) || defined(__GNUC__) | COMMENT |
| LOW | external/fs/fs.c | 9241 | #pragma GCC diagnostic push | COMMENT |
| LOW | external/fs/fs.c | 9261 | #endif | COMMENT |
| LOW | external/fs/fs.c | 9281 | #if defined(_MSC_VER) && (_MSC_VER < 1900) | COMMENT |
| LOW | external/fs/fs.c | 9321 | #define FS_LEADINGPLUS 2 | COMMENT |
| LOW | external/fs/fs.c | 10401 | #undef FS_LEADING_0X | COMMENT |
| LOW | external/fs/fs.h | 941 | #endif | COMMENT |
| LOW | external/fs/fs.h | 981 | typedef signed int fs_int32; | COMMENT |
| LOW | external/fs/fs.h | 1021 | #endif | COMMENT |
| LOW | external/fs/fs.h | 1041 | #else | COMMENT |
| LOW | external/fs/fs.h | 1441 | COMMENT | |
| LOW | extras/stb_vorbis.c | 1 | // Ogg Vorbis audio decoder - v1.22 - public domain | COMMENT |
| LOW | extras/stb_vorbis.c | 21 | // | COMMENT |
| LOW | extras/stb_vorbis.c | 41 | // 1.20 - 2020-07-11 - several small fixes | COMMENT |
| LOW | extras/stb_vorbis.c | 61 | // 1.02 - 2014-07-09 - declare qsort comparison as explicitly _cdecl in Windows | COMMENT |
| LOW | extras/stb_vorbis.c | 81 | #ifndef STB_VORBIS_NO_STDIO | COMMENT |
| LOW | extras/stb_vorbis.c | 101 | // data in the file and how you set the compile flags for speed | COMMENT |
| LOW | extras/stb_vorbis.c | 161 | // this function returns the offset (in samples) from the beginning of the | COMMENT |
| LOW | extras/stb_vorbis.c | 201 | float ***output, // place to write float ** array of float * buffers | COMMENT |
| LOW | extras/stb_vorbis.c | 221 | // NULL--it is always the same as the number of channels reported by | COMMENT |
| LOW | extras/stb_vorbis.c | 241 | // call stb_vorbis_flush_pushdata(), then start calling decoding, then once | COMMENT |
| LOW | extras/stb_vorbis.c | 281 | // create an ogg vorbis decoder from an open FILE *, looking for a stream at | COMMENT |
| LOW | extras/stb_vorbis.c | 301 | // after calling seek_frame(), the next call to get_frame_*() will include | COMMENT |
| LOW | extras/stb_vorbis.c | 321 | // You generally should not intermix calls to stb_vorbis_get_frame_*() | COMMENT |
| LOW | extras/stb_vorbis.c | 341 | // Let M be the number of channels requested, and N the number of channels present, | COMMENT |
| LOW | extras/stb_vorbis.c | 421 | COMMENT | |
| LOW | extras/stb_vorbis.c | 441 | // STB_VORBIS_NO_INTEGER_CONVERSION | COMMENT |
| LOW | extras/stb_vorbis.c | 461 | #define STB_VORBIS_MAX_CHANNELS 16 // enough for anyone? | COMMENT |
| LOW | extras/stb_vorbis.c | 481 | // sets the log size of the huffman-acceleration table. Maximum | COMMENT |
| LOW | extras/stb_vorbis.c | 501 | #endif | COMMENT |
| LOW | extras/stb_vorbis.c | 521 | // this latter kind out to look like the former kind for ease of decoding, | COMMENT |
| LOW | extras/stb_vorbis.c | 541 | // Normally we only decode the floor without synthesizing the actual | COMMENT |
| LOW | extras/stb_vorbis.c | 561 | #ifndef STB_VORBIS_NO_INTEGER_CONVERSION | COMMENT |
| LOW | extras/stb_vorbis.c | 581 | #ifndef STB_VORBIS_NO_CRT | COMMENT |
| LOW | extras/stb_vorbis.c | 601 | #include <limits.h> | COMMENT |
| LOW | extras/stb_vorbis.c | 621 | #endif | COMMENT |
| LOW | extras/stb_vorbis.c | 661 | #define STBV_NOTUSED(v) (void)sizeof(v) | COMMENT |
| 34 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | examples/custom_backend.c | 639 | We're just using ma_backend_custom in this example for demonstration purposes, but a more realistic use case would p | CODE |
| MEDIUM | examples/resource_manager_advanced.c | 274 | self-managed job threads in this example just for demonstration purposes. | CODE |
| MEDIUM | examples/data_source_chaining.c | 111 | to the first one. For demonstration purposes we're going to use the callback method for the last | CODE |
| MEDIUM | examples/data_source_chaining.c | 119 | For the last data source we'll loop back to the start, but for demonstration purposes we'll use a | CODE |
| LOW | extras/osaudio/osaudio_dos_soundblaster.c | 926 | /* Don't forget to set the global audio object. We need this for the ISR. */ | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/emscripten/emscripten.html | 99 | // application robust, you may want to override this behavior before shipping! | COMMENT |
| MEDIUM | extras/stb_vorbis.c | 51 | // 1.10 - 2017-03-03 - more robust seeking; fix negative ilog(); clear error in open_memory | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | extras/osaudio/osaudio_dos_soundblaster.c | 469 | /* In 16-bit mode, we need to check if the interrupt is for us. Only applies to SB16. */ | COMMENT |