audioseyX 0.5.0a15__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 (180) hide show
  1. audioseyx-0.5.0a15/.github/ISSUE_TEMPLATE/bug.yml +28 -0
  2. audioseyx-0.5.0a15/.github/ISSUE_TEMPLATE/feature.yml +13 -0
  3. audioseyx-0.5.0a15/.github/ISSUE_TEMPLATE/hardware.yml +26 -0
  4. audioseyx-0.5.0a15/.github/dependabot.yml +12 -0
  5. audioseyx-0.5.0a15/.github/pull_request_template.md +11 -0
  6. audioseyx-0.5.0a15/.github/workflows/ci.yml +71 -0
  7. audioseyx-0.5.0a15/.github/workflows/docs.yml +65 -0
  8. audioseyx-0.5.0a15/.github/workflows/publish.yml +68 -0
  9. audioseyx-0.5.0a15/.github/workflows/windows.yml +50 -0
  10. audioseyx-0.5.0a15/.readthedocs.yaml +11 -0
  11. audioseyx-0.5.0a15/CHANGELOG.md +143 -0
  12. audioseyx-0.5.0a15/CONTRIBUTING.md +39 -0
  13. audioseyx-0.5.0a15/LICENSE +21 -0
  14. audioseyx-0.5.0a15/MANIFEST.in +22 -0
  15. audioseyx-0.5.0a15/PKG-INFO +133 -0
  16. audioseyx-0.5.0a15/README.md +92 -0
  17. audioseyx-0.5.0a15/SECURITY.md +9 -0
  18. audioseyx-0.5.0a15/THIRD_PARTY_NOTICES.md +27 -0
  19. audioseyx-0.5.0a15/docs/_static/custom.css +4 -0
  20. audioseyx-0.5.0a15/docs/_static/workbench-demo.jpg +0 -0
  21. audioseyx-0.5.0a15/docs/analysis.md +50 -0
  22. audioseyx-0.5.0a15/docs/api.md +92 -0
  23. audioseyx-0.5.0a15/docs/calibration-curves.md +51 -0
  24. audioseyx-0.5.0a15/docs/changelog.md +2 -0
  25. audioseyx-0.5.0a15/docs/conf.py +33 -0
  26. audioseyx-0.5.0a15/docs/contributing.md +2 -0
  27. audioseyx-0.5.0a15/docs/coupled-native.md +68 -0
  28. audioseyx-0.5.0a15/docs/design.md +39 -0
  29. audioseyx-0.5.0a15/docs/dirac-coverage.md +40 -0
  30. audioseyx-0.5.0a15/docs/index.md +59 -0
  31. audioseyx-0.5.0a15/docs/integrated-calibration.md +65 -0
  32. audioseyx-0.5.0a15/docs/joint-design.md +103 -0
  33. audioseyx-0.5.0a15/docs/layouts.md +50 -0
  34. audioseyx-0.5.0a15/docs/licensing.md +2 -0
  35. audioseyx-0.5.0a15/docs/measurements.md +39 -0
  36. audioseyx-0.5.0a15/docs/native-integration.md +39 -0
  37. audioseyx-0.5.0a15/docs/oca-comparison.md +40 -0
  38. audioseyx-0.5.0a15/docs/polarity.md +21 -0
  39. audioseyx-0.5.0a15/docs/quickstart.md +49 -0
  40. audioseyx-0.5.0a15/docs/receiver-audit.md +73 -0
  41. audioseyx-0.5.0a15/docs/releasing.md +98 -0
  42. audioseyx-0.5.0a15/docs/requirements.txt +3 -0
  43. audioseyx-0.5.0a15/docs/robust-refinement.md +125 -0
  44. audioseyx-0.5.0a15/docs/spatial-plans.md +105 -0
  45. audioseyx-0.5.0a15/docs/temporal-verification.md +41 -0
  46. audioseyx-0.5.0a15/docs/troubleshooting.md +35 -0
  47. audioseyx-0.5.0a15/docs/validation.md +57 -0
  48. audioseyx-0.5.0a15/examples/Mqx 5.1.mqx +659 -0
  49. audioseyx-0.5.0a15/examples/README.md +1 -0
  50. audioseyx-0.5.0a15/examples/Room Left.mqx +178 -0
  51. audioseyx-0.5.0a15/examples/Room.mdat +0 -0
  52. audioseyx-0.5.0a15/examples/benchmarks/joint-0.5.0a1.json +2240 -0
  53. audioseyx-0.5.0a15/examples/benchmarks/joint-0.5.0a3.json +3529 -0
  54. audioseyx-0.5.0a15/examples/benchmarks/native-workflow-0.5.0a5.json +657 -0
  55. audioseyx-0.5.0a15/examples/benchmarks/native-workflow-0.5.0a7.json +673 -0
  56. audioseyx-0.5.0a15/examples/benchmarks/native-workflow-0.5.0a8.json +810 -0
  57. audioseyx-0.5.0a15/examples/benchmarks/native-workflow-0.5.0a9.json +1776 -0
  58. audioseyx-0.5.0a15/examples/benchmarks/three-seat-0.5.0a2.json +2174 -0
  59. audioseyx-0.5.0a15/examples/benchmarks/three-seat-0.5.0a3.json +3786 -0
  60. audioseyx-0.5.0a15/examples/manifest.json +44 -0
  61. audioseyx-0.5.0a15/pyproject.toml +57 -0
  62. audioseyx-0.5.0a15/setup.cfg +4 -0
  63. audioseyx-0.5.0a15/src/audioseyX.egg-info/PKG-INFO +133 -0
  64. audioseyx-0.5.0a15/src/audioseyX.egg-info/SOURCES.txt +178 -0
  65. audioseyx-0.5.0a15/src/audioseyX.egg-info/dependency_links.txt +1 -0
  66. audioseyx-0.5.0a15/src/audioseyX.egg-info/entry_points.txt +2 -0
  67. audioseyx-0.5.0a15/src/audioseyX.egg-info/requires.txt +20 -0
  68. audioseyx-0.5.0a15/src/audioseyX.egg-info/top_level.txt +1 -0
  69. audioseyx-0.5.0a15/src/audioseyx/__init__.py +1 -0
  70. audioseyx-0.5.0a15/src/audioseyx/__main__.py +4 -0
  71. audioseyx-0.5.0a15/src/audioseyx/_java_stream.py +345 -0
  72. audioseyx-0.5.0a15/src/audioseyx/analysis.py +201 -0
  73. audioseyx-0.5.0a15/src/audioseyx/app.py +737 -0
  74. audioseyx-0.5.0a15/src/audioseyx/archive.py +114 -0
  75. audioseyx-0.5.0a15/src/audioseyx/area_benchmarks.py +31 -0
  76. audioseyx-0.5.0a15/src/audioseyx/audio_input.py +94 -0
  77. audioseyx-0.5.0a15/src/audioseyx/auditory_balance.py +177 -0
  78. audioseyx-0.5.0a15/src/audioseyx/benchmarks.py +58 -0
  79. audioseyx-0.5.0a15/src/audioseyx/calibration_curves.py +171 -0
  80. audioseyx-0.5.0a15/src/audioseyx/capabilities.py +42 -0
  81. audioseyx-0.5.0a15/src/audioseyx/clock_sync.py +158 -0
  82. audioseyx-0.5.0a15/src/audioseyx/coefficient_transport.py +183 -0
  83. audioseyx-0.5.0a15/src/audioseyx/comparison.py +51 -0
  84. audioseyx-0.5.0a15/src/audioseyx/compat.py +73 -0
  85. audioseyx-0.5.0a15/src/audioseyx/coupled_benchmarks.py +54 -0
  86. audioseyx-0.5.0a15/src/audioseyx/coupled_native_search.py +115 -0
  87. audioseyx-0.5.0a15/src/audioseyx/curves.py +33 -0
  88. audioseyx-0.5.0a15/src/audioseyx/design_history.py +140 -0
  89. audioseyx-0.5.0a15/src/audioseyx/diagnostics.py +59 -0
  90. audioseyx-0.5.0a15/src/audioseyx/dsp.py +372 -0
  91. audioseyx-0.5.0a15/src/audioseyx/exporter.py +99 -0
  92. audioseyx-0.5.0a15/src/audioseyx/feature_coverage.py +57 -0
  93. audioseyx-0.5.0a15/src/audioseyx/headroom.py +30 -0
  94. audioseyx-0.5.0a15/src/audioseyx/http_server.py +347 -0
  95. audioseyx-0.5.0a15/src/audioseyx/importers.py +120 -0
  96. audioseyx-0.5.0a15/src/audioseyx/joint_benchmarks.py +63 -0
  97. audioseyx-0.5.0a15/src/audioseyx/joint_curve_controls.py +255 -0
  98. audioseyx-0.5.0a15/src/audioseyx/joint_fir.py +922 -0
  99. audioseyx-0.5.0a15/src/audioseyx/layouts.py +72 -0
  100. audioseyx-0.5.0a15/src/audioseyx/listening_area.py +67 -0
  101. audioseyx-0.5.0a15/src/audioseyx/mdat_import.py +37 -0
  102. audioseyx-0.5.0a15/src/audioseyx/measurement_quality.py +80 -0
  103. audioseyx-0.5.0a15/src/audioseyx/measurement_robustness.py +80 -0
  104. audioseyx-0.5.0a15/src/audioseyx/model.py +131 -0
  105. audioseyx-0.5.0a15/src/audioseyx/native.py +72 -0
  106. audioseyx-0.5.0a15/src/audioseyx/native_joint.py +562 -0
  107. audioseyx-0.5.0a15/src/audioseyx/native_measure.py +211 -0
  108. audioseyx-0.5.0a15/src/audioseyx/native_power_model.py +262 -0
  109. audioseyx-0.5.0a15/src/audioseyx/native_protocol.py +65 -0
  110. audioseyx-0.5.0a15/src/audioseyx/native_refinement.py +231 -0
  111. audioseyx-0.5.0a15/src/audioseyx/native_workflow_benchmarks.py +105 -0
  112. audioseyx-0.5.0a15/src/audioseyx/polarity.py +115 -0
  113. audioseyx-0.5.0a15/src/audioseyx/reachability.py +244 -0
  114. audioseyx-0.5.0a15/src/audioseyx/realization.py +114 -0
  115. audioseyx-0.5.0a15/src/audioseyx/receiver.py +170 -0
  116. audioseyx-0.5.0a15/src/audioseyx/receiver_audit.py +137 -0
  117. audioseyx-0.5.0a15/src/audioseyx/receiver_calibration.py +623 -0
  118. audioseyx-0.5.0a15/src/audioseyx/receiver_constraints.py +117 -0
  119. audioseyx-0.5.0a15/src/audioseyx/receiver_web.py +147 -0
  120. audioseyx-0.5.0a15/src/audioseyx/recording_workflow.py +99 -0
  121. audioseyx-0.5.0a15/src/audioseyx/rew.py +173 -0
  122. audioseyx-0.5.0a15/src/audioseyx/risk_derivatives.py +51 -0
  123. audioseyx-0.5.0a15/src/audioseyx/robust_benchmarks.py +39 -0
  124. audioseyx-0.5.0a15/src/audioseyx/routing.py +15 -0
  125. audioseyx-0.5.0a15/src/audioseyx/saved_controls.py +80 -0
  126. audioseyx-0.5.0a15/src/audioseyx/spatial_plan.py +199 -0
  127. audioseyx-0.5.0a15/src/audioseyx/spectral_grid.py +88 -0
  128. audioseyx-0.5.0a15/src/audioseyx/synthetic_hashes.json +1 -0
  129. audioseyx-0.5.0a15/src/audioseyx/temporal.py +211 -0
  130. audioseyx-0.5.0a15/src/audioseyx/transfer.py +402 -0
  131. audioseyx-0.5.0a15/src/audioseyx/web/analysis.js +113 -0
  132. audioseyx-0.5.0a15/src/audioseyx/web/app.js +91 -0
  133. audioseyx-0.5.0a15/src/audioseyx/web/clock.js +27 -0
  134. audioseyx-0.5.0a15/src/audioseyx/web/curve-profiles.js +71 -0
  135. audioseyx-0.5.0a15/src/audioseyx/web/downloads.js +38 -0
  136. audioseyx-0.5.0a15/src/audioseyx/web/index.html +113 -0
  137. audioseyx-0.5.0a15/src/audioseyx/web/joint.js +59 -0
  138. audioseyx-0.5.0a15/src/audioseyx/web/layouts.js +52 -0
  139. audioseyx-0.5.0a15/src/audioseyx/web/native-refinement.js +67 -0
  140. audioseyx-0.5.0a15/src/audioseyx/web/polarity.js +18 -0
  141. audioseyx-0.5.0a15/src/audioseyx/web/processing-controls.js +41 -0
  142. audioseyx-0.5.0a15/src/audioseyx/web/receiver-audit.js +41 -0
  143. audioseyx-0.5.0a15/src/audioseyx/web/receiver-calibration.js +69 -0
  144. audioseyx-0.5.0a15/src/audioseyx/web/spatial-plan.js +130 -0
  145. audioseyx-0.5.0a15/src/audioseyx/web/style.css +6 -0
  146. audioseyx-0.5.0a15/src/audioseyx/web/transfer.js +60 -0
  147. audioseyx-0.5.0a15/src/audioseyx/web/verification.js +46 -0
  148. audioseyx-0.5.0a15/tests/test_analysis.py +177 -0
  149. audioseyx-0.5.0a15/tests/test_calibration_curves.py +248 -0
  150. audioseyx-0.5.0a15/tests/test_clock_sync.py +69 -0
  151. audioseyx-0.5.0a15/tests/test_coefficient_transport.py +131 -0
  152. audioseyx-0.5.0a15/tests/test_core.py +209 -0
  153. audioseyx-0.5.0a15/tests/test_coupled_controls.py +212 -0
  154. audioseyx-0.5.0a15/tests/test_curves.py +37 -0
  155. audioseyx-0.5.0a15/tests/test_design_history.py +98 -0
  156. audioseyx-0.5.0a15/tests/test_http.py +424 -0
  157. audioseyx-0.5.0a15/tests/test_joint_fir.py +465 -0
  158. audioseyx-0.5.0a15/tests/test_layouts_receiver.py +158 -0
  159. audioseyx-0.5.0a15/tests/test_listening_area.py +64 -0
  160. audioseyx-0.5.0a15/tests/test_native_measure.py +102 -0
  161. audioseyx-0.5.0a15/tests/test_polarity.py +54 -0
  162. audioseyx-0.5.0a15/tests/test_public_package.py +58 -0
  163. audioseyx-0.5.0a15/tests/test_reachability.py +180 -0
  164. audioseyx-0.5.0a15/tests/test_receiver_audit.py +140 -0
  165. audioseyx-0.5.0a15/tests/test_receiver_calibration.py +217 -0
  166. audioseyx-0.5.0a15/tests/test_release_tools.py +40 -0
  167. audioseyx-0.5.0a15/tests/test_robust_refinement.py +157 -0
  168. audioseyx-0.5.0a15/tests/test_saved_controls.py +92 -0
  169. audioseyx-0.5.0a15/tests/test_spatial_plan.py +269 -0
  170. audioseyx-0.5.0a15/tests/test_temporal.py +158 -0
  171. audioseyx-0.5.0a15/tests/test_transfer.py +233 -0
  172. audioseyx-0.5.0a15/third_party/eqx-LICENSE.txt +26 -0
  173. audioseyx-0.5.0a15/third_party/waitress-LICENSE.txt +44 -0
  174. audioseyx-0.5.0a15/tools/audit_distribution.py +69 -0
  175. audioseyx-0.5.0a15/tools/build_windows.py +44 -0
  176. audioseyx-0.5.0a15/tools/check_docs_site.py +111 -0
  177. audioseyx-0.5.0a15/tools/check_release_tag.py +13 -0
  178. audioseyx-0.5.0a15/tools/readthedocs.py +84 -0
  179. audioseyx-0.5.0a15/tools/smoke_installed.py +35 -0
  180. audioseyx-0.5.0a15/tools/windows_entry.py +19 -0
@@ -0,0 +1,28 @@
1
+ name: Bug report
2
+ description: Report a reproducible application or file-format problem
3
+ body:
4
+ - type: markdown
5
+ attributes:
6
+ value: Use synthetic examples where possible. Do not attach credentials or private calibration files.
7
+ - type: input
8
+ id: version
9
+ attributes:
10
+ label: audioseyX version and operating system
11
+ validations:
12
+ required: true
13
+ - type: textarea
14
+ id: steps
15
+ attributes:
16
+ label: Steps to reproduce
17
+ validations:
18
+ required: true
19
+ - type: textarea
20
+ id: result
21
+ attributes:
22
+ label: Expected and actual behavior
23
+ validations:
24
+ required: true
25
+ - type: textarea
26
+ id: evidence
27
+ attributes:
28
+ label: Minimal example and relevant log excerpt
@@ -0,0 +1,13 @@
1
+ name: Feature request
2
+ description: Describe a useful new workflow or capability
3
+ body:
4
+ - type: textarea
5
+ id: problem
6
+ attributes:
7
+ label: What are you trying to achieve?
8
+ validations:
9
+ required: true
10
+ - type: textarea
11
+ id: proposal
12
+ attributes:
13
+ label: Proposed behavior and constraints
@@ -0,0 +1,26 @@
1
+ name: Hardware evidence
2
+ description: Report receiver-specific observations and verification
3
+ body:
4
+ - type: input
5
+ id: hardware
6
+ attributes:
7
+ label: Receiver model, firmware, tier and channel layout
8
+ validations:
9
+ required: true
10
+ - type: dropdown
11
+ id: stage
12
+ attributes:
13
+ label: What was actually tested?
14
+ options:
15
+ - Read-only discovery and information
16
+ - Stock microphone capture
17
+ - Transfer acknowledgement
18
+ - Normal-playback acoustic verification
19
+ validations:
20
+ required: true
21
+ - type: textarea
22
+ id: setup
23
+ attributes:
24
+ label: Microphone, timing reference, method and results
25
+ validations:
26
+ required: true
@@ -0,0 +1,12 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: pip
4
+ directory: /
5
+ schedule:
6
+ interval: weekly
7
+ open-pull-requests-limit: 5
8
+ - package-ecosystem: github-actions
9
+ directory: /
10
+ schedule:
11
+ interval: weekly
12
+ open-pull-requests-limit: 5
@@ -0,0 +1,11 @@
1
+ ## Change
2
+
3
+ Describe the concrete problem and resulting behavior.
4
+
5
+ ## Validation
6
+
7
+ Record relevant tests, documentation changes and limitations. Distinguish synthetic, simulated and real receiver evidence.
8
+
9
+ ## Distribution impact
10
+
11
+ Confirm that no private calibration files, excluded compatibility resources or credentials are added.
@@ -0,0 +1,71 @@
1
+ name: Tests and release checks
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ pull_request:
6
+ workflow_dispatch:
7
+ permissions:
8
+ contents: read
9
+ jobs:
10
+ tests:
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ os: [ubuntu-latest, windows-latest, macos-latest]
15
+ python: ["3.11", "3.13"]
16
+ exclude:
17
+ - os: macos-latest
18
+ python: "3.11"
19
+ include:
20
+ - os: macos-15-intel
21
+ python: "3.11"
22
+ runs-on: ${{ matrix.os }}
23
+ env:
24
+ PYTHONUTF8: "1"
25
+ OPENBLAS_NUM_THREADS: "1"
26
+ OMP_NUM_THREADS: "1"
27
+ steps:
28
+ - uses: actions/checkout@v7.0.1
29
+ - uses: actions/setup-python@v7.1.0
30
+ with:
31
+ python-version: ${{ matrix.python }}
32
+ cache: pip
33
+ - run: python -m pip install -e ".[dev]"
34
+ - run: python -m unittest discover -s tests -v
35
+ - run: audioseyx --self-test --report self-test.json
36
+ docs:
37
+ runs-on: ubuntu-latest
38
+ steps:
39
+ - uses: actions/checkout@v7.0.1
40
+ - uses: actions/setup-python@v7.1.0
41
+ with:
42
+ python-version: "3.13"
43
+ - run: python -m pip install -r docs/requirements.txt
44
+ - run: python -m sphinx -W --keep-going -b html docs docs/_build/html
45
+ - uses: actions/upload-artifact@v7.0.2
46
+ with:
47
+ name: documentation-html
48
+ path: docs/_build/html
49
+ retention-days: 14
50
+ package:
51
+ runs-on: ubuntu-latest
52
+ steps:
53
+ - uses: actions/checkout@v7.0.1
54
+ - uses: actions/setup-python@v7.1.0
55
+ with:
56
+ python-version: "3.13"
57
+ - run: python -m pip install build twine
58
+ - run: python -m build
59
+ - run: python tools/audit_distribution.py dist
60
+ - run: python -m twine check --strict dist/*.whl dist/*.tar.gz
61
+ - name: Install and smoke-test the wheel
62
+ run: |
63
+ python -m pip install dist/*.whl
64
+ python tools/smoke_installed.py
65
+ - uses: actions/upload-artifact@v7.0.2
66
+ with:
67
+ name: python-distributions
68
+ path: |
69
+ dist/*.whl
70
+ dist/*.tar.gz
71
+ retention-days: 14
@@ -0,0 +1,65 @@
1
+ name: Publish documentation
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths:
7
+ - 'docs/**'
8
+ - 'src/audioseyx/__init__.py'
9
+ - 'CHANGELOG.md'
10
+ - 'CONTRIBUTING.md'
11
+ - 'THIRD_PARTY_NOTICES.md'
12
+ - 'tools/check_docs_site.py'
13
+ - '.github/workflows/docs.yml'
14
+ workflow_dispatch:
15
+
16
+ permissions:
17
+ contents: read
18
+
19
+ concurrency:
20
+ group: github-pages
21
+ cancel-in-progress: false
22
+
23
+ jobs:
24
+ build:
25
+ runs-on: ubuntu-latest
26
+ permissions:
27
+ contents: read
28
+ pages: read
29
+ steps:
30
+ - uses: actions/checkout@v7.0.1
31
+ - uses: actions/setup-python@v7.1.0
32
+ with:
33
+ python-version: '3.13'
34
+ cache: pip
35
+ cache-dependency-path: docs/requirements.txt
36
+ - name: Read Pages configuration
37
+ id: pages
38
+ uses: actions/configure-pages@v6.0.0
39
+ - run: python -m pip install -r docs/requirements.txt
40
+ - name: Build English documentation
41
+ env:
42
+ AUDIOSEYX_DOCS_BASE_URL: ${{ steps.pages.outputs.base_url }}/
43
+ run: python -m sphinx -W --keep-going -b html -d docs/_build/pages-doctrees docs docs/_build/pages
44
+ - name: Check the published file tree and internal links
45
+ run: python tools/check_docs_site.py docs/_build/pages --base-url '${{ steps.pages.outputs.base_url }}/'
46
+ - name: Upload the built site
47
+ uses: actions/upload-pages-artifact@v5.0.0
48
+ with:
49
+ path: docs/_build/pages
50
+ include-hidden-files: true
51
+
52
+ deploy:
53
+ if: github.ref == 'refs/heads/main'
54
+ needs: build
55
+ runs-on: ubuntu-latest
56
+ permissions:
57
+ pages: write
58
+ id-token: write
59
+ environment:
60
+ name: github-pages
61
+ url: ${{ steps.deployment.outputs.page_url }}
62
+ steps:
63
+ - name: Deploy documentation
64
+ id: deployment
65
+ uses: actions/deploy-pages@v5.0.1
@@ -0,0 +1,68 @@
1
+ name: Publish Python package
2
+ on:
3
+ workflow_dispatch:
4
+ inputs:
5
+ tag:
6
+ description: Existing version tag, for example v0.5.0a15
7
+ required: true
8
+ type: string
9
+ target:
10
+ description: Package index destination
11
+ required: true
12
+ default: testpypi
13
+ type: choice
14
+ options: [testpypi, pypi]
15
+ permissions:
16
+ contents: read
17
+ jobs:
18
+ build:
19
+ runs-on: ubuntu-latest
20
+ env:
21
+ RELEASE_TAG: ${{ inputs.tag }}
22
+ PYTHONUTF8: "1"
23
+ OPENBLAS_NUM_THREADS: "1"
24
+ OMP_NUM_THREADS: "1"
25
+ steps:
26
+ - uses: actions/checkout@v7.0.1
27
+ with:
28
+ ref: refs/tags/${{ inputs.tag }}
29
+ - uses: actions/setup-python@v7.1.0
30
+ with:
31
+ python-version: "3.13"
32
+ - run: python tools/check_release_tag.py
33
+ - run: python -m pip install ".[dev]"
34
+ - run: python -m unittest discover -s tests -v
35
+ - run: python -m build
36
+ - run: python tools/audit_distribution.py dist
37
+ - run: python -m twine check --strict dist/*.whl dist/*.tar.gz
38
+ - name: Verify an isolated wheel installation
39
+ run: |
40
+ python -m venv wheel-smoke
41
+ wheel-smoke/bin/python -m pip install dist/*.whl
42
+ wheel-smoke/bin/python tools/smoke_installed.py
43
+ - uses: actions/upload-artifact@v7.0.2
44
+ with:
45
+ name: release-distributions
46
+ path: |
47
+ dist/*.whl
48
+ dist/*.tar.gz
49
+ publish:
50
+ needs: build
51
+ runs-on: ubuntu-latest
52
+ environment:
53
+ name: ${{ inputs.target }}
54
+ permissions:
55
+ id-token: write
56
+ steps:
57
+ - uses: actions/download-artifact@v8.0.2
58
+ with:
59
+ name: release-distributions
60
+ path: dist
61
+ - name: Publish to TestPyPI
62
+ if: inputs.target == 'testpypi'
63
+ uses: pypa/gh-action-pypi-publish@release/v1
64
+ with:
65
+ repository-url: https://test.pypi.org/legacy/
66
+ - name: Publish to PyPI
67
+ if: inputs.target == 'pypi'
68
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,50 @@
1
+ name: Build Windows preview
2
+ on:
3
+ workflow_dispatch:
4
+ inputs:
5
+ tag:
6
+ description: Existing version tag, for example v0.4.0a1
7
+ required: true
8
+ type: string
9
+ permissions:
10
+ contents: read
11
+ jobs:
12
+ windows:
13
+ runs-on: windows-latest
14
+ env:
15
+ PYTHONUTF8: "1"
16
+ OPENBLAS_NUM_THREADS: "1"
17
+ OMP_NUM_THREADS: "1"
18
+ RELEASE_TAG: ${{ inputs.tag }}
19
+ steps:
20
+ - uses: actions/checkout@v7.0.1
21
+ with:
22
+ ref: refs/tags/${{ inputs.tag }}
23
+ - uses: actions/setup-python@v7.1.0
24
+ with:
25
+ python-version: "3.13"
26
+ - run: python tools/check_release_tag.py
27
+ - run: python -m pip install ".[windows]"
28
+ - run: python -m unittest discover -s tests -v
29
+ - run: python tools/build_windows.py
30
+ - name: Packaged offline self-test
31
+ shell: pwsh
32
+ run: |
33
+ $previewProcess = Start-Process -FilePath './dist/windows/audioseyX.exe' -ArgumentList '--self-test','--report','packaged-self-test.json' -WindowStyle Hidden -PassThru -Wait
34
+ if ($previewProcess.ExitCode -ne 0) { throw 'Packaged self-test failed' }
35
+ - name: Packaged native workflow benchmark
36
+ shell: pwsh
37
+ run: |
38
+ $nativeProcess = Start-Process -FilePath './dist/windows/audioseyX.exe' -ArgumentList '--native-workflow-benchmark','--report','packaged-native-workflow.json' -WindowStyle Hidden -PassThru -Wait
39
+ if ($nativeProcess.ExitCode -ne 0) { throw 'Packaged native workflow benchmark failed' }
40
+ - uses: actions/upload-artifact@v7.0.2
41
+ with:
42
+ name: audioseyX-Windows-${{ inputs.tag }}
43
+ path: |
44
+ dist/windows/audioseyX.exe
45
+ dist/windows/licenses/
46
+ packaged-self-test.json
47
+ packaged-native-workflow.json
48
+ LICENSE
49
+ THIRD_PARTY_NOTICES.md
50
+ third_party/
@@ -0,0 +1,11 @@
1
+ version: 2
2
+ build:
3
+ os: ubuntu-24.04
4
+ tools:
5
+ python: "3.13"
6
+ sphinx:
7
+ configuration: docs/conf.py
8
+ fail_on_warning: true
9
+ python:
10
+ install:
11
+ - requirements: docs/requirements.txt
@@ -0,0 +1,143 @@
1
+ # Changelog
2
+
3
+ ## 0.5.0a15 — Python package publication
4
+
5
+ - Include the GitHub Pages documentation URL in package metadata and use public documentation/source links in the package description.
6
+ - Document PyPI prerelease installation and retain installation from source.
7
+ - Verify the built wheel in an isolated environment before the Trusted Publisher upload. Keep the existing version-tag, test, archive-content and metadata gates.
8
+ - Preserve all acoustic algorithms, hardware capability limits and experimental-preview status.
9
+
10
+ ## 0.5.0a14 — deterministic local receipt order
11
+
12
+ - Assign a serialized workspace commit sequence to new design receipts while preserving their observed wall-clock timestamps. Equal or reversed Windows timestamps no longer reorder the latest completed/cancelled/failed results. Legacy receipts remain readable; known sequences and legacy records have deterministic display order.
13
+ - Cover identical clocks, clock rollback and concurrent receipt commits with deterministic tests instead of clock sleeps.
14
+
15
+ ## 0.5.0a13 — read-only receiver evidence and explicit local input checks
16
+
17
+ - Read the receiver's actual speaker menu before choosing exposed basic settings queries. Stop on the first settings read failure; hidden feature names and timeouts never become claims about writable DSP or independent EQ.
18
+ - Archive timestamped receiver evidence with integrity checks, separate readable sub parameters from measured signal behavior, and retain unverified native phase, filter independence and support routing states.
19
+ - Add an explicit five-second Windows input-level check with unambiguous device selection. Discard samples and save only numeric level statistics; no playback, gain change or audio file. Startup restores reports without network or microphone access.
20
+ - Expose the diagnostics in the English interface and local APIs while preserving capture selection, original measurement references and project data.
21
+
22
+ ## 0.5.0a12 — explicit spatial plans and resumable position capture
23
+
24
+ - Separate planned locations, seat priorities, response repeats and capture runs. Replace the fixed seven-point workflow with an editable position/seat/role/output matrix; retain arbitrary imported position IDs.
25
+ - Preview actual missing output/repeat batches offline, bind capture scope to the dataset, and stop completed or stale requests before receiver refresh. Keep per-run raw checkpoints and receipts; interrupted attempts can resume only missing outputs.
26
+ - Enforce explicit plan completeness before normal design and final transfer. Carry excluded-point roles and seat-balanced validation weights through independent, coupled native and complex reference paths without refitting held-out targets.
27
+ - Preserve legacy dataset fingerprints when no explicit spatial plan exists. Keep raw records and the prior source project immutable during failed/partial capture replacement. No historical TV-guided eight-point recovery is claimed.
28
+
29
+ ## 0.5.0a11 — portable saved-run validation
30
+
31
+ - Compare resolved archive paths in recovery tests so macOS temporary-directory aliases identify the same verified file. Runtime archive containment and integrity checks remain enforced.
32
+
33
+ ## 0.5.0a10 — EQ/control feedback, measurement robustness and local run recovery
34
+
35
+ - Add an opt-in complete minimum-phase EQ/native-control block search with frozen training targets, protected gain envelopes, coefficient reserve checks and strictly improving accepted steps. Retain a trace of rejected and accepted trials; held-out seats never select candidates.
36
+ - Feed positive repeat-consistency weights into auditory trim balancing and exact Cartesian power moments. Preserve equal weights when fewer than three repeats cannot establish a majority preference.
37
+ - Evaluate the complete centre/endpoint gain and relative-delay uncertainty ensemble without dropping curves, routing models, records or analysis bins. Check memory before native-delay table allocation; report that finite cases are declared assumptions.
38
+ - Save atomic, dataset-bound run receipts for successful, failed and cancelled designs. Verify archive integrity before downloading a saved run or restoring safe interface controls. Reset consent flags and require matching imported targets.
39
+ - Expose the controls and reports in the English interface and documentation. Extend the full-layout synthetic native workflow benchmark with two-curve robust EQ/control checks. Physical receiver reconstruction, playback and acoustic benefit remain unverified.
40
+
41
+ ## 0.5.0a9 — coupled native bass planning and restart-safe processing
42
+
43
+ - Select shared sub level, delay, polarity and linked crossovers with LFE participation, for one target or weighted Flat/Reference targets. Keep conditional exactness separate from joint FIR/main-trim optimality and hardware validity.
44
+ - Share a native-grid ERB Huber trim state across both targets; enforce known coefficient-reserve limits and retain independent per-curve evidence.
45
+ - Retain all response bins/repeats through complete Cartesian second/fourth moments and native-delay ZoomFFT sums. Preallocate bounded state storage, cache risk layouts and vectorize gain/delay batches.
46
+ - Directly recompute complete complex-response power at selected and validation states; reject numerical inconsistencies and protect frozen training references.
47
+ - Keep original measurement metadata immutable, retain the last result after cancelled/failed replacements, and atomically save data-linked interface defaults with all confirmations reset.
48
+ - Reuse joint Reference evaluations, avoid materializing repeat Cartesian products, and expand full-layout known-gain/timing/LFE benchmarks.
49
+
50
+ ## 0.5.0a8 — independent native calibration targets
51
+
52
+ - Calculate complete independent Flat/Reference minimum-phase EQ targets, retain shared training/validation references, and independently persist imported targets. Add result-curve selection and separate WAV/report/native-candidate exports.
53
+ - Share the Flat-selected native distance/level/crossover/polarity proposal and forward-evaluate Reference with those controls fixed. Retain every repeat and routing model; held-out data never select either curve or the common controls.
54
+ - Reserve coefficient headroom across both curves using one scale per output, or one global scale when baseline trims are unknown. Apply one common trim compensation and preserve relative digital gain.
55
+ - Audit separate curve/slot coefficient hashes and calibration FIR associations. Bind the selected initial curve to transfer schema 4; reject stale/swapped/mislabeled data and designs from another measurement project before connecting.
56
+ - Exercise distinct curves in offline transport self-tests and both complete XT32 targets in the packaged native-workflow benchmark. Export only current generated files from reused directories.
57
+
58
+ ## 0.5.0a7 — temporal evidence and capability coverage
59
+
60
+ - Retain every before/after original-IR repeat for observed-window temporal energy fractions and quality-gated descriptive EDT/T20/T30 slopes, including 20–150 Hz and octave-band analysis-filter ringing references.
61
+ - Separate gain changes, unknown timebases, shorter recordings and native calibration sweeps from evidence of improved corrected playback. Export immutable verification reports and invalidate them on project changes.
62
+ - Add opt-in complete FIR/IR linear-convolution diagnostics with a frozen original reference and original measured support; refuse guessed multirate reconstruction and insufficient memory.
63
+ - Expose a ten-row engineering capability checklist in the UI and offline API, including actual missing seats/outputs. Development counts are not Dirac performance percentages; native mixed-phase synthesis and ART support routes remain unverified/unavailable.
64
+ - Keep all filter-design coefficients and native control generation unchanged.
65
+
66
+ ## 0.5.0a6 — cross-platform native workflow verification
67
+
68
+ - Keep exact held-out-invariance checks for every selected native distance, level, crossover and polarity, while comparing internal Float64 objective scores at numerical precision on Intel macOS.
69
+ - Preserve strict serialized-coefficient byte checks. Native-menu, auditory and raw-clock functionality from 0.5.0a5 is unchanged.
70
+
71
+ ## 0.5.0a5 — integrated native menus and auditory/clock workflows
72
+
73
+ - Combine full-budget minimum-phase EQ with explicit native-menu distance, level, crossover and sub-filter-polarity proposals, retaining raw timing and every retained repeat.
74
+ - Evaluate every declared native distance step and linked crossover choice through exact conditional separability, with nested source/seat risk, optional routing-model ensembles and independent holdouts. The exactness claim is conditional on fixed FIRs and the proposed trim state.
75
+ - Add confirmed same-model ERB-band matching with robust Huber costs and exact zero-sum discrete trim optimization; preserve per-position priority across repeated scans.
76
+ - Separate physical sound speed from the X3700H legacy distance/delay model, preserve current main differences by default and expose explicit experimental relative-distance rescaling.
77
+ - Bind reviewed menu changes to the native byte transaction, normalize SWMIX control aliases, and quantize coefficient headroom to the tenth-dB compensation grid.
78
+ - Add known-pilot clock estimation and continuous-position correction of complete original recordings, with file-only reference generation, cancellation, preserved originals and timing maps. Deconvolved IRs are not treated as clock evidence.
79
+ - Add integrated UI, deterministic startup ordering and a full-layout synthetic native-workflow benchmark; document the boundary between independent methods and GSonic's proprietary engine.
80
+
81
+ ## 0.5.0a4 — native calibration transport refactoring
82
+
83
+ - Separate observed receiver framing, native coefficient serialization and calibration planning while preserving existing protocol imports and wire conventions.
84
+ - Reconstruct and audit every output/curve/rate stream, including vector budgets, routing, sequence, checksums, Float32/Q31 quantization and complete coverage.
85
+ - Commit the reviewed plan to the target device, calibration, settings, levels, exact control frames and coefficient frames; recheck before any socket is opened.
86
+ - Require explicit ACK fields, reject ignored/duplicated design channels, and expose data coverage and coefficient precision in a separate transfer UI module.
87
+ - Retain a private transaction snapshot during execution and record Float32 precision in offline native-candidate exports.
88
+ - Extend packaged offline self-tests across all three tiers, both numeric formats and all observed rate slots without private compatibility assets.
89
+ - Document OCA component parity and the remaining settings-calibration/native-playback gaps. Retain Intel/Python 3.11 and ARM/Python 3.13 macOS test coverage using separate supported runner pools.
90
+
91
+ ## 0.5.0a3 — conditional reachability analysis
92
+
93
+ - Analyze the unchanged joint target using annular main/subwoofer sum inequalities and shared-output residual duals across every training position and repeat.
94
+ - Report model-dependent objective lower bounds and remaining-gap upper bounds separately from numerical convergence, dB errors and hardware validity.
95
+ - Retain all frequency bins with bounded-memory diagnostic batches; account for different native Nyquist limits, declared gain envelopes, smooth worst-position risk and cancellation.
96
+ - Validate single-output limits, conflicting seats, multiple subs, native synthesis relaxations, arbitrary routing and independent small optimization references.
97
+ - Fingerprint and recheck the complete objective and constraint model. Add optional endpoint-preserving full-parameter refinement, disabled by default pending broader evidence of improvement.
98
+ - Retain complete joint iterates and reuse their full-vector/output-block directions in a monotonic feasible polishing pass. Preserve all parameters, targets and gain limits; report post-polish convergence separately.
99
+
100
+ ## 0.5.0a2 — capture correctness and spatial optimization
101
+
102
+ - Add hierarchical seat priorities, position-balanced native magnitude statistics, explicit missing-seat guards and independent holdout evaluation without refitting or renormalization.
103
+ - Use exact smooth worst-position risk gradient/Hessian steps, exact Schur frequency preconditioning, consistent projection/feasibility bounds and residual-correction CG. Keep feasible output, numerical convergence and native hardware validity separate.
104
+ - Add offline saved-routing snapshots and a reproducible synthetic three-seat benchmark.
105
+ - Recheck download byte hashes even when a file retains its size and timestamp.
106
+ - Translate configured SWMIX aliases to individual SW measurement commands, while retaining both identifiers in provenance. Reject a main-speaker response returned for a configured subwoofer.
107
+ - Flag legacy native SWMIX recordings as unverified and prevent their use in filter design. Preserve original recordings; exclude or reacquire the affected subwoofer data.
108
+ - Add same-model relative-polarity diagnostics with repeated measurements, early-response reference sensitivity, three window lengths and small timing-reference fits. Native reverse hints and terminal wiring verification are separate findings.
109
+ - Add explicit/early-lobe FDW references to avoid centring a correction goal on a stronger late reflection.
110
+ - Export expanded joint references as WAV/report candidates rather than pretending that legacy compression establishes native mixed-phase realizability.
111
+ - Check Float capture transport on an X3700H, including individual subwoofer acquisition. Microphone compensation, normal-playback reconstruction and transfer remain unverified.
112
+
113
+ ## 0.5.0a1 — full complex joint design preview
114
+
115
+ - Add variable layout summaries, completeness checks, examples from mono/stereo through 9.4.6, adjustable subwoofer counts and custom channel lists.
116
+ - Verify read-only X3700H native information, exact-IP HEOS identity and speaker settings; support receiver web URLs and reviewable per-channel crossover defaults.
117
+ - Preserve raw SWMIX identifiers, explicitly select capture outputs and record configured outputs omitted from physical wiring.
118
+ - Add full-tap, complex multi-output FIR optimization with shared main/subwoofer and LFE routing, complete position/repeat observations, ADMM/CG, position-risk weighting and feasible block refinements.
119
+ - Add per-frequency Gaussian windowing of correction goals, repeat consistency diagnostics and training-only references for held-out positions.
120
+ - Evaluate full original impulses directly on the solver grid, including different measurement rates; check complete-problem memory before grid allocation and retain integer-exact repeat scenario counts.
121
+ - Fully re-solve every explicit global crossover candidate without using held-out positions for selection.
122
+ - Support explicitly supplied sparse native synthesis models and optimize their native coefficient vectors directly; keep expanded XT32 reference variables separate from writable budgets.
123
+ - Show routed program-input sums, independent 0.4 comparisons, actual returned-filter gain gaps and numerical convergence independently; keep the new mixed-phase mode export-only.
124
+ - Add design cancellation, native-model archive validation and a reproducible full 7.1.4 synthetic benchmark.
125
+ - Add a Read the Docs API v3 maintenance CLI, using a locally configured token without accepting secrets on the command line.
126
+
127
+ Numerical and export workflows have no physical receiver validation. This release does not establish OCA/GSonic superiority, global optimality or ART-style arbitrary routing.
128
+
129
+ ## 0.4.0a1 — public-release candidate
130
+
131
+ - Adopt the audioseyX name and an English interface and documentation.
132
+ - Add an installable Python distribution and `audioseyx` / `python -m audioseyx` entry points.
133
+ - Keep installed-package user data outside `site-packages`.
134
+ - Exclude legacy native tables and address maps from public source and distribution artifacts.
135
+ - Preserve general filter WAV export when optional native compatibility data are absent.
136
+ - Distinguish numerical design self-tests from unexecuted native encoding checks.
137
+ - Add Sphinx/MyST documentation, Read the Docs configuration, issue templates and release workflows.
138
+
139
+ The 0.3 offline analysis and DSP core is retained. Actual receiver capture, native reconstruction, transfer and acoustic performance are still unverified.
140
+
141
+ ## 0.3.0 — local research prototype
142
+
143
+ Added impulse/ETC, group-delay and decay analysis; low-frequency STFT; rectangular-room modes; deep-null boost protection; common measured-band constraints; compressed projects; and verified resumable downloads. This prototype includes private local compatibility research assets and is not the public distribution.
@@ -0,0 +1,39 @@
1
+ # Contributing to audioseyX
2
+
3
+ Use English for code, public issues, pull requests and primary documentation. Keep changes focused and describe the user-visible behavior and the evidence behind it.
4
+
5
+ ## Development
6
+
7
+ ```console
8
+ python -m venv .venv
9
+ python -m pip install -e ".[dev,docs]"
10
+ python -m unittest discover -s tests -v
11
+ python -m sphinx -W --keep-going -b html docs docs/_build/html
12
+ python -m build
13
+ python tools/audit_distribution.py dist
14
+ python -m twine check --strict dist/*.whl dist/*.tar.gz
15
+ ```
16
+
17
+ Activate the virtual environment using the command appropriate to your shell before installing. The public test suite uses synthetic fixtures and simulated receivers; it does not initiate physical capture or transfer.
18
+
19
+ ## Measurement changes
20
+
21
+ - Preserve raw samples, timing and data origin. Do not silently peak-align responses.
22
+ - Do not invent phase or IR data from magnitude-only measurements.
23
+ - Keep predicted results, simulated protocol checks and real hardware validation distinct.
24
+ - Document sample rates, units, normalization, common frequency coverage and uncertainty.
25
+ - Never use a synthetic fixture to bypass receiver-transfer checks.
26
+
27
+ ## Tests and distribution
28
+
29
+ Add behavioral tests for meaningful new behavior. Native transfer tests must use explicit fake receiver addresses and mocked sockets. Legacy numerical resources and private calibration files are excluded from public source and packages; do not add them in a pull request.
30
+
31
+ The distribution audit rejects excluded compatibility files and checks the required web assets and license notices. The source archive is intended to rebuild the wheel without access to the original local prototype.
32
+
33
+ ## Hardware reports
34
+
35
+ Report the receiver model, firmware version, Audyssey tier, layout and whether the test covered discovery, raw capture, transfer acknowledgement, normal-playback verification or actual acoustic results. Explain how the microphone and timing reference were used. Hardware verification is model- and firmware-specific.
36
+
37
+ ## Release changes
38
+
39
+ Update `src/audioseyx/__init__.py` and `CHANGELOG.md`. Follow `docs/releasing.md`. A successful local build is not proof that a package or website is online.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 haomjc
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,22 @@
1
+ include README.md LICENSE CHANGELOG.md CONTRIBUTING.md THIRD_PARTY_NOTICES.md SECURITY.md
2
+ include .readthedocs.yaml
3
+ recursive-include src/audioseyx *.py *.json *.html *.css *.js
4
+ recursive-include third_party *.txt
5
+ recursive-include tests *.py
6
+ recursive-include tools *.py
7
+ recursive-include docs *.py *.md *.txt *.css *.jpg *.png *.svg
8
+ recursive-include .github *.yml *.md
9
+ recursive-include examples *.mqx *.mdat *.md *.json
10
+ exclude src/audioseyx/native_tables.json
11
+ exclude src/audioseyx/channel_addresses.json
12
+ global-exclude __pycache__ *.py[cod] *.exe *.log *.ady *.oca *.awb *.npz *.npy .env .pypirc
13
+ prune .git
14
+ prune .venv
15
+ prune .private
16
+ prune .native-profiles
17
+ prune dist
18
+ prune build
19
+ prune docs/_build
20
+ prune docs/research
21
+ prune 用户数据
22
+ prune UserData