libspeech 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. libspeech-0.1.0/.clang-format +8 -0
  2. libspeech-0.1.0/.github/workflows/cmake.yml +52 -0
  3. libspeech-0.1.0/.github/workflows/orchestrator.yml +91 -0
  4. libspeech-0.1.0/.github/workflows/wheels.yml +136 -0
  5. libspeech-0.1.0/.gitignore +39 -0
  6. libspeech-0.1.0/.gitmodules +10 -0
  7. libspeech-0.1.0/CMakeLists.txt +552 -0
  8. libspeech-0.1.0/CONTRIBUTING.md +144 -0
  9. libspeech-0.1.0/LICENSE +36 -0
  10. libspeech-0.1.0/PKG-INFO +221 -0
  11. libspeech-0.1.0/README.md +195 -0
  12. libspeech-0.1.0/audioflux_issues.md +279 -0
  13. libspeech-0.1.0/benchmarks/CMakeLists.txt +51 -0
  14. libspeech-0.1.0/benchmarks/cpp/CMakeLists.txt +30 -0
  15. libspeech-0.1.0/benchmarks/cpp/bench_stft.cpp +65 -0
  16. libspeech-0.1.0/checklist.md +532 -0
  17. libspeech-0.1.0/cmake/AudioFlux.cmake +51 -0
  18. libspeech-0.1.0/cmake/Conan.cmake +32 -0
  19. libspeech-0.1.0/cmake/DynamicVersion.cmake +119 -0
  20. libspeech-0.1.0/cmake/ONNXRuntime.cmake +199 -0
  21. libspeech-0.1.0/cmake/PyProject.cmake +28 -0
  22. libspeech-0.1.0/conanfile.txt +7 -0
  23. libspeech-0.1.0/conda.recipe/meta.yaml +39 -0
  24. libspeech-0.1.0/docs/logo/README.md +59 -0
  25. libspeech-0.1.0/docs/logo/libspeech-logo-pods.svg +79 -0
  26. libspeech-0.1.0/docs/logo/libspeech-logo.svg +64 -0
  27. libspeech-0.1.0/examples/common.h +62 -0
  28. libspeech-0.1.0/examples/denoiser_app/controler.h +35 -0
  29. libspeech-0.1.0/examples/denoiser_app/main.cpp +174 -0
  30. libspeech-0.1.0/examples/main.cpp +271 -0
  31. libspeech-0.1.0/examples/silero_app/main.cpp +149 -0
  32. libspeech-0.1.0/git-submodule.sh +12 -0
  33. libspeech-0.1.0/include/libspeech/audio.h +46 -0
  34. libspeech-0.1.0/include/libspeech/dsp/dct.h +39 -0
  35. libspeech-0.1.0/include/libspeech/dsp/fft.h +73 -0
  36. libspeech-0.1.0/include/libspeech/dsp/mfcc.h +72 -0
  37. libspeech-0.1.0/include/libspeech/dsp/resample.h +64 -0
  38. libspeech-0.1.0/include/libspeech/dsp/stft.h +81 -0
  39. libspeech-0.1.0/include/libspeech/dsp/window.h +35 -0
  40. libspeech-0.1.0/include/libspeech/export.h +43 -0
  41. libspeech-0.1.0/include/libspeech/models/base_model.h +33 -0
  42. libspeech-0.1.0/include/libspeech/models/denoiser.h +38 -0
  43. libspeech-0.1.0/include/libspeech/models/facebook_denoiser.h +45 -0
  44. libspeech-0.1.0/include/libspeech/models/onnx_model.h +61 -0
  45. libspeech-0.1.0/include/libspeech/models/silero_vad.h +131 -0
  46. libspeech-0.1.0/include/libspeech/models/speechbrain_denoiser.h +45 -0
  47. libspeech-0.1.0/include/libspeech/utils/utils.h +45 -0
  48. libspeech-0.1.0/include/libspeech/version.h +29 -0
  49. libspeech-0.1.0/pyproject.toml +154 -0
  50. libspeech-0.1.0/src/audio.cpp +441 -0
  51. libspeech-0.1.0/src/bindings/python/about.cpp +31 -0
  52. libspeech-0.1.0/src/bindings/python/bind_audio.cpp +59 -0
  53. libspeech-0.1.0/src/bindings/python/bind_dsp.cpp +85 -0
  54. libspeech-0.1.0/src/bindings/python/bind_io.cpp +59 -0
  55. libspeech-0.1.0/src/bindings/python/bind_models.cpp +58 -0
  56. libspeech-0.1.0/src/bindings/python/libspeech/__init__.py +114 -0
  57. libspeech-0.1.0/src/bindings/python/libspeech/__main__.py +33 -0
  58. libspeech-0.1.0/src/bindings/python/libspeech/core.py +15 -0
  59. libspeech-0.1.0/src/dsp/dct.cpp +47 -0
  60. libspeech-0.1.0/src/dsp/fft.cpp +104 -0
  61. libspeech-0.1.0/src/dsp/mfcc.cpp +128 -0
  62. libspeech-0.1.0/src/dsp/resample.cpp +136 -0
  63. libspeech-0.1.0/src/dsp/stft.cpp +124 -0
  64. libspeech-0.1.0/src/dsp/window.cpp +40 -0
  65. libspeech-0.1.0/src/models/base_model.cpp +46 -0
  66. libspeech-0.1.0/src/models/denoiser.cpp +22 -0
  67. libspeech-0.1.0/src/models/facebook_denoiser.cpp +75 -0
  68. libspeech-0.1.0/src/models/onnx_model.cpp +65 -0
  69. libspeech-0.1.0/src/models/silero_vad.cpp +178 -0
  70. libspeech-0.1.0/src/models/speechbrain_denoiser.cpp +85 -0
  71. libspeech-0.1.0/src/speech_umbrella_placeholder.cpp +6 -0
  72. libspeech-0.1.0/src/third_party/README.md +30 -0
  73. libspeech-0.1.0/src/third_party/aixlog/LICENSE +21 -0
  74. libspeech-0.1.0/src/third_party/aixlog/README.md +12 -0
  75. libspeech-0.1.0/src/third_party/aixlog/include/aixlog.hpp +1251 -0
  76. libspeech-0.1.0/src/third_party/audioflux/LICENSE.md +21 -0
  77. libspeech-0.1.0/src/third_party/audioflux/README.md +32 -0
  78. libspeech-0.1.0/src/third_party/audioflux/UPSTREAM_PATCHES.md +6 -0
  79. libspeech-0.1.0/src/third_party/audioflux/include/dsp/resample_algorithm.h +63 -0
  80. libspeech-0.1.0/src/third_party/audioflux/include/flux_base.h +195 -0
  81. libspeech-0.1.0/src/third_party/audioflux/include/stft_algorithm.h +46 -0
  82. libspeech-0.1.0/src/third_party/audioflux/include/util/flux_util.h +93 -0
  83. libspeech-0.1.0/src/third_party/audioflux/include/util/flux_wave.h +35 -0
  84. libspeech-0.1.0/src/third_party/audioflux/include/vector/flux_complex.h +145 -0
  85. libspeech-0.1.0/src/third_party/audioflux/include/vector/flux_vector.h +231 -0
  86. libspeech-0.1.0/src/third_party/audioflux/src/dsp/fft_algorithm.c +911 -0
  87. libspeech-0.1.0/src/third_party/audioflux/src/dsp/fft_algorithm.h +38 -0
  88. libspeech-0.1.0/src/third_party/audioflux/src/dsp/filterDesign_fir.c +265 -0
  89. libspeech-0.1.0/src/third_party/audioflux/src/dsp/filterDesign_fir.h +47 -0
  90. libspeech-0.1.0/src/third_party/audioflux/src/dsp/flux_window.c +962 -0
  91. libspeech-0.1.0/src/third_party/audioflux/src/dsp/flux_window.h +54 -0
  92. libspeech-0.1.0/src/third_party/audioflux/src/dsp/resample_algorithm.c +678 -0
  93. libspeech-0.1.0/src/third_party/audioflux/src/dsp/resample_algorithm.h +63 -0
  94. libspeech-0.1.0/src/third_party/audioflux/src/flux_base.h +195 -0
  95. libspeech-0.1.0/src/third_party/audioflux/src/stft_algorithm.c +875 -0
  96. libspeech-0.1.0/src/third_party/audioflux/src/stft_algorithm.h +46 -0
  97. libspeech-0.1.0/src/third_party/audioflux/src/util/flux_util.c +966 -0
  98. libspeech-0.1.0/src/third_party/audioflux/src/util/flux_util.h +96 -0
  99. libspeech-0.1.0/src/third_party/audioflux/src/util/flux_wave.c +394 -0
  100. libspeech-0.1.0/src/third_party/audioflux/src/util/flux_wave.h +35 -0
  101. libspeech-0.1.0/src/third_party/audioflux/src/vector/flux_complex.c +810 -0
  102. libspeech-0.1.0/src/third_party/audioflux/src/vector/flux_complex.h +145 -0
  103. libspeech-0.1.0/src/third_party/audioflux/src/vector/flux_vector.c +3125 -0
  104. libspeech-0.1.0/src/third_party/audioflux/src/vector/flux_vector.h +231 -0
  105. libspeech-0.1.0/src/third_party/audioflux/src/vector/flux_vectorOp.c +882 -0
  106. libspeech-0.1.0/src/third_party/audioflux/src/vector/flux_vectorOp.h +103 -0
  107. libspeech-0.1.0/src/utils/utils.cpp +117 -0
  108. libspeech-0.1.0/tests/CMakeLists.txt +61 -0
  109. libspeech-0.1.0/tests/dsp/test_dct.cpp +56 -0
  110. libspeech-0.1.0/tests/dsp/test_fft.cpp +124 -0
  111. libspeech-0.1.0/tests/dsp/test_mfcc.cpp +128 -0
  112. libspeech-0.1.0/tests/dsp/test_resample.cpp +82 -0
  113. libspeech-0.1.0/tests/dsp/test_stft.cpp +102 -0
  114. libspeech-0.1.0/tests/dsp/test_window.cpp +67 -0
  115. libspeech-0.1.0/tests/models/CMakeLists.txt +48 -0
  116. libspeech-0.1.0/tests/models/test_default_model_cache_dir.cpp +102 -0
  117. libspeech-0.1.0/tests/models/test_denoiser.cpp +43 -0
  118. libspeech-0.1.0/tests/python/CMakeLists.txt +50 -0
  119. libspeech-0.1.0/tests/python/test_audio.py +155 -0
  120. libspeech-0.1.0/tests/python/test_dsp.py +91 -0
  121. libspeech-0.1.0/tests/python/test_models.py +39 -0
  122. libspeech-0.1.0/tests/utest/utest.h +1305 -0
  123. libspeech-0.1.0/tests/utest/utest_main.cxx +3 -0
  124. libspeech-0.1.0/version.py +252 -0
@@ -0,0 +1,8 @@
1
+ BasedOnStyle: Chromium
2
+ IndentWidth: 4
3
+ ---
4
+ Language: Cpp
5
+ # Force pointers to the type for C++.
6
+ DerivePointerAlignment: false
7
+ PointerAlignment: Left
8
+
@@ -0,0 +1,52 @@
1
+ name: cmake stuff
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ workflow_call:
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ jobs:
10
+ build-and-test:
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ os: [ubuntu-latest, macos-latest, windows-latest]
15
+
16
+ runs-on: ${{ matrix.os }}
17
+
18
+ steps:
19
+ - name: Checkout repository
20
+ uses: actions/checkout@v6
21
+ with:
22
+ submodules: true
23
+
24
+ - name: Set up Python
25
+ uses: actions/setup-python@v6
26
+ with:
27
+ python-version: "3.11"
28
+ cache: "pip"
29
+
30
+ # speech::models (BUILD_MODELS=ON, the default) needs httpp on the
31
+ # CMAKE_PREFIX_PATH via find_package(httpp) -- see the "Model
32
+ # downloading" comment block in the top-level CMakeLists.txt. This has
33
+ # to happen before the configure step below, since CMake shells out to
34
+ # `python -c "import httpp; ..."` at configure time to locate it.
35
+ - name: Install httpp
36
+ run: pip install httpp
37
+
38
+ - name: Build Project
39
+ uses: threeal/cmake-action@v2.1.0
40
+ with:
41
+ build-dir: build
42
+ options: |
43
+ CMAKE_BUILD_TYPE=Release
44
+ BUILD_MODELS=ON
45
+ BUILD_TESTS=ON
46
+ BUILD_PYTHON=OFF
47
+
48
+ - name: Build
49
+ run: cmake --build build --config Release
50
+
51
+ - name: Run tests
52
+ run: ctest --test-dir build --output-on-failure --build-config Release
@@ -0,0 +1,91 @@
1
+ name: Orchestration & Release
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ push:
6
+ branches: [ master ]
7
+ tags: [ "v*" ]
8
+
9
+ jobs:
10
+ init:
11
+ runs-on: ubuntu-latest
12
+ outputs:
13
+ release_name: ${{ steps.init.outputs.release_name }}
14
+ is_tag: ${{ steps.init.outputs.is_tag }}
15
+ version_string: ${{ steps.init.outputs.version_string }}
16
+ steps:
17
+ - name: Checkout repository
18
+ uses: actions/checkout@v6
19
+
20
+ - name: Initalize
21
+ id: init
22
+ env:
23
+ GH_TOKEN: ${{ github.token }}
24
+ run: |
25
+ export version_string="$(python version.py | tr -d '\n')"
26
+ echo "version_string=${version_string}" | tee -a "$GITHUB_OUTPUT"
27
+ if [[ "${{ github.ref }}" =~ ^refs/tags/v.*$ ]]; then
28
+ TAG_NAME="${GITHUB_REF#refs/tags/}"
29
+ [[ "${version_string}" == "${GITHUB_REF#refs/tags/v}" ]] || (echo "❌ Version mismatch! include/libspeech/version.h says ${version_string}, tag says ${GITHUB_REF#refs/tags/v}" && exit 1)
30
+ export release_name="$TAG_NAME"
31
+ export is_tag="true"
32
+ else
33
+ gh api repos/${{ github.repository }}/releases/tags/__beta__ --jq '.assets[].id' 2>/dev/null | xargs -r -I {} gh api repos/${{ github.repository }}/releases/assets/{} -X DELETE 2>/dev/null || true
34
+ export release_name="__beta__"
35
+ export is_tag="false"
36
+ fi
37
+ echo "release_name=${release_name}" | tee -a "$GITHUB_OUTPUT"
38
+ echo "is_tag=${is_tag}" | tee -a "$GITHUB_OUTPUT"
39
+
40
+ - name: Initialize release body
41
+ uses: softprops/action-gh-release@v3
42
+ with:
43
+ tag_name: ${{ steps.init.outputs.release_name }}
44
+ name: ${{ steps.init.outputs.release_name }}
45
+ draft: false
46
+ prerelease: ${{ steps.init.outputs.is_tag == 'false' }}
47
+ token: ${{ secrets.GITHUB_TOKEN }}
48
+ generate_release_notes: true
49
+ body: |
50
+ libspeech ${{ steps.init.outputs.version_string }}
51
+
52
+ Built from ${{ github.sha }}.
53
+
54
+ cmake:
55
+ uses: ./.github/workflows/cmake.yml
56
+ needs: [ init ]
57
+
58
+ wheel:
59
+ uses: ./.github/workflows/wheels.yml
60
+ needs: [ init ]
61
+
62
+ release-wheels:
63
+ needs: [ wheel, cmake, init ]
64
+ runs-on: ubuntu-latest
65
+ steps:
66
+ - name: Download all artifacts
67
+ uses: actions/download-artifact@v8
68
+ with:
69
+ pattern: wheelhouse-*
70
+ path: dist
71
+ merge-multiple: true
72
+
73
+ - name: List dist directory
74
+ run: ls -la dist
75
+
76
+ - name: create release body
77
+ uses: softprops/action-gh-release@v3
78
+ with:
79
+ tag_name: ${{ needs.init.outputs.release_name }}
80
+ name: ${{ needs.init.outputs.release_name }}
81
+ draft: false
82
+ prerelease: ${{ needs.init.outputs.is_tag == 'false' }}
83
+ token: ${{ secrets.GITHUB_TOKEN }}
84
+ files: dist/*
85
+
86
+ - name: Publishing to PyPI
87
+ uses: pypa/gh-action-pypi-publish@release/v1
88
+ if: startsWith(github.ref, 'refs/tags/')
89
+ with:
90
+ password: ${{ secrets.PYPI_PASSWORD }}
91
+ user: ${{ secrets.PYPI_USERNAME }}
@@ -0,0 +1,136 @@
1
+ name: python build wheels
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ workflow_call:
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ env:
10
+ FORCE_COLOR: 3
11
+
12
+ concurrency:
13
+ group: wheels-${{ github.ref }}
14
+ cancel-in-progress: true
15
+
16
+ jobs:
17
+ build_sdist:
18
+ name: Build SDist
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - uses: actions/checkout@v6
22
+ with:
23
+ submodules: false
24
+
25
+ - uses: actions/setup-python@v6
26
+ with:
27
+ python-version: "3.11"
28
+ cache: "pip"
29
+
30
+ - name: Ruff Check
31
+ run: pipx run ruff check .
32
+
33
+ - name: Build SDist
34
+ run: pipx run build --sdist
35
+
36
+ - name: Check metadata
37
+ run: pipx run twine check dist/*
38
+
39
+ - uses: actions/upload-artifact@v7
40
+ with:
41
+ name: wheelhouse-sdist
42
+ path: dist/*.tar.gz
43
+ overwrite: true
44
+
45
+
46
+ build_wheels:
47
+ name: Wheels on ${{ matrix.os }}
48
+ runs-on: ${{ matrix.os }}
49
+ strategy:
50
+ fail-fast: false
51
+ matrix:
52
+ os: [ubuntu-latest, macos-latest, windows-latest]
53
+
54
+ steps:
55
+ - uses: actions/checkout@v6
56
+ with:
57
+ submodules: true
58
+
59
+ - name: Build wheels
60
+ uses: pypa/cibuildwheel@v3.4.1
61
+ env:
62
+ # ONNX Runtime's own v1.21.0 release notes state outright: "All
63
+ # macOS packages now require macOS version >= 13.3." Without this,
64
+ # delocate-wheel's final compatibility check correctly refuses to
65
+ # ship the wheel: it would claim 10.15 compatibility while
66
+ # bundling a dylib (libonnxruntime.1.21.0.dylib) whose own
67
+ # embedded LC_VERSION_MIN load command says 13.3 -- a real,
68
+ # unavoidable constraint from upstream, not something buildable
69
+ # around. (This must be set here, not in pyproject.toml's
70
+ # [tool.cibuildwheel.macos] environment table -- cibuildwheel env
71
+ # vars set directly in the workflow always take precedence over
72
+ # the pyproject.toml equivalent, they don't merge, so setting it
73
+ # in both places just leaves this one silently winning anyway.)
74
+ MACOSX_DEPLOYMENT_TARGET: "13.3"
75
+ CIBW_ARCHS_MACOS: universal2
76
+ # httpp needs to be importable by the *build-time* Python that
77
+ # scikit-build-core invokes CMake's configure step with (see the
78
+ # httpp.get_cmake_dir() call in CMakeLists.txt). CIBW_BEFORE_BUILD
79
+ # runs inside the per-interpreter build venv cibuildwheel creates
80
+ # for each wheel, so `pip install` here lands in the exact Python
81
+ # CMake will later shell out to -- CIBW_BEFORE_ALL would instead
82
+ # run once against the container's default interpreter, which
83
+ # isn't necessarily the one used for any given wheel.
84
+ CIBW_BEFORE_BUILD: pip install httpp
85
+ # cp38 is excluded: httpp (a build-time dependency, see above) only
86
+ # ships wheels from cp39-abi3 up on PyPI, not cp38 -- building a
87
+ # cp38 wheel here would require httpp built from source instead.
88
+ CIBW_BUILD: "cp39-* cp310-* cp311-* cp312-*"
89
+ CIBW_ENVIRONMENT_CP312: "SKBUILD_WHEEL_PY_API=cp312"
90
+ # Disable building PyPy wheels on all platforms. Also skip
91
+ # musllinux (Alpine/musl has no official ONNX Runtime build --
92
+ # only glibc-linked releases exist, which fail to link against
93
+ # musl with pages of "undefined reference to ...@GLIBC_x.y"
94
+ # errors) and 32-bit Windows (win32 -- Microsoft stopped
95
+ # publishing 32-bit Windows ONNX Runtime binaries around v1.17.3,
96
+ # so the version this project downloads has no win-x86 asset,
97
+ # only win-x64/win-arm64).
98
+ CIBW_SKIP: "pp* *-musllinux_* cp*-win32"
99
+ # httpp is a genuine runtime dependency (pip install httpp, see
100
+ # `dependencies` in pyproject.toml) that libspeech intentionally
101
+ # does NOT bundle a copy of -- __init__.py loads libhttpp_core.so
102
+ # straight from wherever the separately-installed httpp package
103
+ # puts it (via httpp.get_lib_dir()). auditwheel's default repair
104
+ # doesn't know that: it walks every .so's DT_NEEDED entries and
105
+ # tries to vendor each one it can locate, which would re-bundle a
106
+ # copy of libhttpp_core.so right back into the wheel, defeating
107
+ # the whole point. --exclude tells it this one's intentionally
108
+ # external and to leave it alone (the standard auditwheel escape
109
+ # hatch for a dependency that's expected to be provided at
110
+ # runtime, same as how projects exclude e.g. system CUDA libs).
111
+ CIBW_REPAIR_WHEEL_COMMAND_LINUX: >-
112
+ auditwheel repair --exclude libhttpp_core.so -w {dest_dir} {wheel}
113
+ # Same reasoning as CIBW_REPAIR_WHEEL_COMMAND_LINUX above, but
114
+ # delocate-wheel's own -e/--exclude flag turned out not to be the
115
+ # right tool here: it only skips copying a library that WAS found,
116
+ # it doesn't stop delocate from erroring out while just building
117
+ # its dependency tree, which is what actually happens here --
118
+ # httpp isn't a file delocate can find anywhere on this machine at
119
+ # all (it's meant to be resolved separately, at the *end user's*
120
+ # install time, not here), so tree-building itself fails before
121
+ # --exclude ever gets a chance to apply. --ignore-missing-
122
+ # dependencies is delocate's actual flag for "some of these are
123
+ # expected to be unresolvable here, skip them and delocate the
124
+ # rest" (its own help text: "Skip dependencies which couldn't be
125
+ # found and delocate as much as possible") -- the real macOS
126
+ # equivalent of auditwheel's --exclude. This replicates
127
+ # cibuildwheel's own default macOS repair command (--require-archs
128
+ # {delocate_archs} -w {dest_dir} -v {wheel}) with only this added.
129
+ CIBW_REPAIR_WHEEL_COMMAND_MACOS: >-
130
+ delocate-wheel --require-archs {delocate_archs} --ignore-missing-dependencies -w {dest_dir} -v {wheel}
131
+
132
+ - uses: actions/upload-artifact@v7
133
+ with:
134
+ name: wheelhouse-${{ matrix.os }}
135
+ path: wheelhouse/*.whl
136
+ overwrite: false
@@ -0,0 +1,39 @@
1
+ #ke-build-debug Ignore compiled files
2
+ *.class
3
+ *.jar
4
+ *.war
5
+ *.ear
6
+
7
+ # Ignore IDE files
8
+ .idea/
9
+ .vscode/
10
+ *env/
11
+ venv*/
12
+
13
+ # Ignore build output
14
+ build_*/
15
+ build/
16
+ dist/
17
+ target/
18
+ cmake-build-debug/
19
+ wheelhouse/
20
+
21
+ # Ignore logs
22
+ logs/
23
+ *.log
24
+
25
+ # Ignore temporary files
26
+ *.tmp
27
+ *.bak
28
+
29
+ # Ignore database files
30
+ *.db
31
+ *.sqlite
32
+
33
+ # Ignore node_modules directory
34
+ node_modules/
35
+
36
+ tests-old
37
+ __pycache__
38
+ Testing
39
+ .qodo
@@ -0,0 +1,10 @@
1
+ [submodule "src/third_party/miniaudio"]
2
+ path = src/third_party/miniaudio
3
+ url = https://github.com/mackron/miniaudio.git
4
+ shallow = true
5
+
6
+ [submodule "src/third_party/dr_libs"]
7
+ path = src/third_party/dr_libs
8
+ url = https://github.com/mackron/dr_libs.git
9
+ shallow = true
10
+