CI validation: Omnichord AMY release R20260908T212305 - #16
Closed
linuxificator wants to merge 120 commits into
Closed
linuxificator wants to merge 120 commits into
linuxificator wants to merge 120 commits into
Conversation
Add a fixed-size AF_UNIX/SOCK_SEQPACKET transport for local AMY wire messages, including peer credential checks, bounded queueing, cleanup safeguards, standalone regression tests, and focused CI.
Add a generic Android AAR service that renders AMY through Oboe/AAudio and accepts ordinary AMY wire packets over the private Unix transport. Include the minimal C-scale hello-world app plus Android build and emulator integration CI.
Document the generic Android AAR, Oboe backend, private SOCK_SEQPACKET client contract, readiness semantics, build requirements, and hello-world example.
Measure the raw AMY render stream and exact signed-16-bit buffer handed to Oboe during the Android hello-world integration test. Retain both WAVs and level statistics in CI, require byte-for-byte AMY-to-Oboe identity, healthy peak level, and no full-scale clipping. Use AMY V10.0 for the audible hello-world. AMY's V control is a 0..10 bus/master scale and the final mixer applies a 0.1 factor, so the previous V2.0 setting was only 20% linear gain (about -14 dB relative to V10.0). Validated at -2.721 dBFS peak with zero clipping and zero AMY-to-Oboe sample differences in Android AMY run 32630088165.
Make the Java hello-world a transport-only client. MainActivity no longer imports or starts AmyService and no longer loads a JNI/native client library. It uses Android LocalSocket SOCK_SEQPACKET directly and sends only ordinary AMY wire packets to filesDir/amy.sock. Move service startup to an AAR-owned ContentProvider lifecycle hook, remove the hello-world C++/CMake client wrapper, and move test-only audio capture arming into CI so the example remains free of service/test control logic.
Add a fixed-size AF_UNIX/SOCK_SEQPACKET transport for local AMY wire messages, including peer credential checks, bounded queueing, cleanup safeguards, standalone regression tests, and focused CI.
amy.h defined the block size unconditionally -- 256, or 128 under AMY_DAISY -- so a host could not ask for anything else without editing the header. tulip5 wants 128 and 64 on the ESP32-P4 for lower latency (the P4's CPU is thought to have the headroom; the S3's does not), and its only route was a patched shadow of amy/src. Now `-DAMY_BLOCK_SIZE=128` is honoured: the default sits behind `#ifndef`, BLOCK_SIZE_BITS is derived from it, and a size that is not a power of two from 32 to 1024 is an #error. Built with nothing passed, the result is byte-identical to before -- 256, and 128 on Daisy. BLOCK_SIZE_BITS is derived as an expression rather than one literal per size on purpose: `make amy/constants.py` greps every numeric #define out of this header and the last one would win, so a ladder of literals would have reported BLOCK_SIZE_BITS=10 to Python and the generated JS. The expression is skipped by that grep and the two literals above it still report the default. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
dpwe's review: a host should choose the block in BITS, with the size (1 << BLOCK_SIZE_BITS), because asking in bits is what says the block has to be a power of two. Checked against the code and it does: every use of BLOCK_SIZE_BITS is a shift -- the per-block amplitude ramps in oscillators.c and the pan ramp in amy.c -- so a block that was not a power of two would ramp to the wrong place with no error. So -DBLOCK_SIZE_BITS=7 is the override, 5..10 is #error'd outside, and AMY_BLOCK_SIZE is (1 << BLOCK_SIZE_BITS). Built with nothing passed it is 8 (256), or 7 (128) on Daisy, as before. The special case is amy/constants.py: it is a grep of the NUMERIC #defines in amy.h, so a derived AMY_BLOCK_SIZE dropped out of it and with it out of amy.render() and the generated JS API. The Makefile rule now appends AMY_BLOCK_SIZE computed from the BLOCK_SIZE_BITS that landed; constants.py and amy_api.generated.js are regenerated (the JS diff is the one key moving to the end). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
BLOCK_SIZE_BITS can be chosen at compile time
Bump version to 1.2.164
# Conflicts: # amy/constants.py # src/amy.h
Owner
Author
|
Validation complete: the full AMY regression matrix and the standalone Linux/macOS/Windows Godot addon build passed for this release commit. Closing this CI-only PR without merging; the release branch remains available. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Temporary fork-internal CI validation PR for the release branch. Do not merge; it will be closed after the platform matrix completes.