Skip to content

feat(ngs2): implement the sampler and submixer peak meter - #11354

Merged
adriadam10 merged 3 commits into
boykopovar:mainfrom
edubox:feat/ngs2-peak-meter
Oct 28, 2026
Merged

adriadam10 merged 3 commits into
boykopovar:mainfrom
edubox:feat/ngs2-peak-meter

Conversation

@edubox

@edubox edubox commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

What

Implement the sampler and submixer peak meter.

  • Handles the sampler control 0x10000009 and the submixer control 0x20000005 (16 bytes, detect type at offset 8).
  • Accepts detect types 0 (off), 1 (peak) and 2 (RMS); above 2 returns 0x804A8093.
  • Keeps a ring of num_peak_meter_blocks values per channel (1 to 256; otherwise 0x804A8092). Peak mode stores the largest absolute sample of each grain, RMS mode the sum of squares.
  • Reports peak_height through sceNgs2VoiceGetState: the largest channel peak, or sqrt(sum / (blocks * grain)) for RMS, over the filled slots.
  • A voice reset clears the detect type and the ring; a detect-type change empties the ring. Measurement is taken after the voice's modules, on its output.

Firmware 13.42 confirms the peak_height field at offset 12 (peak 0.5 and RMS 0.353553 for alternating 16384/0 PCM) and that a sampler SETUP reset turns the meter off until it is enabled again. The submixer reset remains unmeasured and is recorded in the debt entry, together with the ring details that still follow fma-rc's 12.70 module reading.

Tested

Linux, GCC 16.2.1. All 16 ngs2_* tests pass, including TestPeakMeter and TestPeakMeterHistory:

  • submixer and sampler peak_height in peak mode (0.5),
  • submixer RMS mode (0.5) and off mode (0),
  • invalid detect type returns 0x804A8093,
  • submixer and sampler rack creation rejects 0 and 257 blocks with 0x804A8092,
  • multi-block RMS, ring eviction, and a reset that reads 0 and stays off until the meter is enabled again.

Checklist

  • Based on current main; no other open PR implements the same functions
  • One topic per PR; follow-ups go in a new PR
  • No comments in code except technical debt
  • Unimplemented paths throw (NotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file
  • No notes, investigation .md files or images added to the repository (attach them to this PR)
  • New third-party code is a submodule built from source
  • Generic behaviour, not specific to one title
  • Depends on: none
  • Fixes: none
  • Unblocks: none (a prerequisite for PPSA32802 audio, which still has other gaps)
  • GPUs tested: n/a
  • AI-assisted: yes

@MarcZX10 MarcZX10 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reviewed the implementation against the linked 12.70 analysis and issue #8039's follow-up. That analysis supports the detect modes, block range, ring calculation and a linear voicePeak, but its author explicitly says they have not determined which sampler state field receives that value. This PR writes it directly to Ngs2SamplerVoiceState::peak_height (and the submixer field). The field name makes that mapping plausible, but the current evidence does not establish the firmware mapping; the Trails report in #8039 still identifies it as unresolved. Please add evidence for the output field/offset and read semantics, or document that mapping as an unverified assumption rather than presenting it as confirmed behavior.

The new regression checks one rendered block for peak and RMS. It does not exercise the multi-block RMS average, ring eviction after the configured window, or the reset/retention behavior described in the implementation. Those cases would materially validate the main history logic.

Eligibility, conventions, intake and labels pass; hosted Build jobs are skipped by path policy. I attempted a local configure for an independent run, but it stopped because SDL2's CMake package is unavailable in this environment, so I did not run the reported 16-test suite. I’m leaving this as feedback rather than approval pending the evidence and focused coverage.

@MarcZX10

Copy link
Copy Markdown
Contributor

Additional integration check: current upstream main is 3d2b7c0673f1ea53ff60ece04ed2b3426e40be38; this head is 35 commits behind its base. A direct merge preview with current main is clean and none of the eight PR paths changed on main since the merge base, but the reported local NGS2 suite ran before those 35 commits and the hosted Build jobs are skipped. Please refresh and rerun the focused suite on the resulting head before relying on the old-base test result.

Pairwise merge preview with #11352 is clean for code/tests but conflicts in docs/dev/debt/libSceNgs2.native.md, where both add NGS2 entries. Please preserve both entries when integrating the related changes.

@MarcZX10

Copy link
Copy Markdown
Contributor

Additional local validation on exact head 91f72ace77d8b69a90bfd4226cbc67cffdf9af34: the bundled-dependency CMake configure succeeded and cmake --build build-ngs2 --target ngs2_render_tests --parallel 4 built the NGS2 library and test executable. I then attempted ctest --test-dir build-ngs2 -R '^ngs2_render$' --output-on-failure; the executable exited in the host CPU preflight before reaching assertions because this Xeon E5-1620 v2 lacks LZCNT, BMI1/BMI2, MOVBE, AVX2 and FMA. This is not a test pass or an assertion failure; I cannot run the NGS2 suite on this host.

@github-actions

github-actions Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

Other open pull requests touch the same code. Merging one will break the other, or both implement the same thing. If this one builds on them, list them in Depends on.

Pull request Conflicting files (lines on main) Same exports Same new files
PR 11315 core/libs/prx/libSceNgs2.native/src/Ngs2Internal.hpp L174-175, L202-203
core/libs/prx/libSceNgs2.native/src/Rack.cpp L143
core/libs/prx/libSceNgs2.native/src/Render.cpp L270
core/libs/prx/libSceNgs2.native/src/Voice.cpp L324, L490-491

Some comparisons could not be completed because a pull request conflicts with the base branch. Review these shared files manually before concluding that there is no overlap.

Pull request Shared files not compared
PR 1384 core/libs/prx/libSceNgs2.native/include/Ngs2Types.hpp
core/libs/prx/libSceNgs2.native/src/Ngs2Internal.hpp
core/libs/prx/libSceNgs2.native/src/Rack.cpp
core/libs/prx/libSceNgs2.native/src/Render.cpp
core/libs/prx/libSceNgs2.native/src/Voice.cpp
PR 5548 core/libs/prx/libSceNgs2.native/src/Ngs2Internal.hpp
core/libs/prx/libSceNgs2.native/src/Render.cpp
core/libs/prx/libSceNgs2.native/src/Voice.cpp
core/libs/prx/libSceNgs2.native/tests/Ngs2Render.cpp
docs/dev/debt/libSceNgs2.native.md
PR 9149 docs/dev/debt/libSceNgs2.native.md

@MarcZX10

Copy link
Copy Markdown
Contributor

I manually checked the new overlap warning against exact heads #11354 91f72ace77d8b69a90bfd4226cbc67cffdf9af34 and #11315 316f48500a7193fb89aae6d3d9b2c260df55b409. git merge-tree --write-tree reports content conflicts in Ngs2Internal.hpp, Rack.cpp, Render.cpp, Voice.cpp, and docs/dev/debt/libSceNgs2.native.md; the type header and render test auto-merge. These are separate sampler/submixer-meter and PitchShift/render-job changes, so the conflicts do not by themselves establish a functional dependency. Please coordinate merge order and preserve both implementations, tests, and debt entries when resolving the shared files.

@MarcZX10

Copy link
Copy Markdown
Contributor

The previously reported NGS2 test binary built here, but this host still cannot execute it because its CPU preflight requires unsupported instructions; I have not claimed a local test pass. The sampler output mapping and multi-block RMS/ring/reset coverage questions in my earlier review remain unanswered. Current main is now b27cc8416f820e40ce187f165d34138e24373dd7; this head is 1 ahead/108 behind, with a clean merge preview and no changes to the eight touched paths since its base. Please rebase and preserve both debt entries, address the mapping/evidence and history-test gaps, and rerun the focused NGS2 tests on the resulting head. Keep the integration order with #11315 coordinated; the previous pairwise preview had code/debt conflicts.

@edubox
edubox force-pushed the feat/ngs2-peak-meter branch from 91f72ac to 7d136db Compare October 26, 2026 09:04
@edubox

edubox commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor Author

Rebased onto current main (c3db979cd3).

The debt entry now states that the output field is an assumption: peak_height is at offset 12 in Ngs2SamplerVoiceState and Ngs2SubmixerVoiceState, taken from its name, because the 12.70 reading does not identify the field or its read semantics and no console measurement confirms them. It also records that keeping the detect type across a reset is unverified on PS5.

Added TestPeakMeterHistory, which covers:

  • the multi-block RMS average with a different level per grain: with two slots filled by grains at 0.5 and 0.25 the value is sqrt(2.5/16), so a last-block-only value or an unnormalised sum fails;
  • ring eviction after the configured window, in both peak and RMS: a third grain at 0.125 replaces the 0.5 slot, so the peak reads 0.25 and the RMS sqrt(0.625/16);
  • setup clearing the ring and peak_height while retaining the detect type: after re-setup and re-adding the waveform, one grain with peak 0.5 and RMS sqrt(0.125) reads the RMS value, not zero.

All 16 ngs2_* tests pass on the rebased head 7d136db887 (ctest -R "^ngs2_" -j16).

@MarcZX10 MarcZX10 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed exact head 7d136db8870a0cf2c6bc0e72aa18da5a231b45eb against current main 8100e480f7d55e87afb5376b8f784bf17df0f75c.

The new TestPeakMeterHistory addresses the earlier coverage gap: it exercises multi-block RMS, circular eviction, and reset behavior. The debt entry now accurately labels the peak_height mapping as an assumption, rather than established firmware behavior. That disclosure is useful, but the implementation still writes the result into that field and asserts reset retains the detect type even though the PR says neither behavior is verified on PS5. AGENTS.md requires unknown behavior to throw and be recorded in debt. Please provide firmware/console evidence for the field mapping and reset semantics, or leave those behaviors unsupported until evidence establishes them; the test currently verifies the PR's assumptions, not console equivalence.

The latest main has changed Render.cpp, Voice.cpp, Ngs2Render.cpp, and the NGS2 debt file since the PR's merge base c3db979cd33a65a0a651f1e7ba7958137a961413. The merge preview is currently clean, but those shared-path changes were not in the reported test base. Please refresh onto current main, preserve both sets of changes, and rerun the focused NGS2 suite on that exact head.

I also compared the current #11354 and #11315 heads with git merge-tree: they still conflict in Ngs2Internal.hpp, Rack.cpp, Render.cpp, Voice.cpp, and docs/dev/debt/libSceNgs2.native.md. These appear to be separate changes, so the conflict does not itself prove a functional dependency; please coordinate landing order and retain both implementations, test changes and debt entries when resolving it. The PR currently says Depends on: none.

The author reports all 16 ngs2_* tests passing on this head. I did not independently rerun them; hosted eligibility, conventions, labels and report checks pass, and product/build test jobs are skipped by path policy. My earlier local attempt could not execute this NGS2 test binary because the host CPU preflight requires unsupported instructions.

AI-assisted review.

@edubox
edubox force-pushed the feat/ngs2-peak-meter branch from 7d136db to 05bb568 Compare October 26, 2026 09:27
@edubox

edubox commented Oct 26, 2026

Copy link
Copy Markdown
Contributor Author

Rebased onto current main 4e43321bd6; all 16 ngs2_* tests pass on 05bb568fe7 (ctest -R "^ngs2_" -j16), and check_conventions is clean.

I do not have PS5 firmware or console evidence for the peak_height mapping or for a reset retaining the detect type, and I do not want to assert either as console behavior. I will keep this PR open until the firmware trace is available rather than ask for it to be merged on the assumption; the debt entry already records both points as unverified.

@MarcZX10 MarcZX10 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-reviewed exact head 05bb568fe73b994b5a2f3b5dabe665d47a83914e against current main 4e43321bd6ceccdc1ae28568bbbc35d9a6446464. The branch is now current. The added history tests address the prior multi-block RMS, ring-eviction and reset-coverage gaps, and the author reports all 16 ngs2_* tests passing on this exact head. My python3 -I tools/check_conventions.py --base upstream/main --head upstream/pr/11354 and git diff --check upstream/main...upstream/pr/11354 also pass. I could not independently run the NGS2 binaries on this host: the earlier built test executable exits during its CPU-feature preflight because this Xeon lacks required instructions.

The remaining blocker is the behavior the author confirmed is unverified: the 12.70 module reading does not identify the peak_height output field or its read semantics, and no PS5 measurement establishes that mapping or whether reset retains the detect type. The implementation nevertheless writes voice.peakHeight to that field and the tests assert the assumed value and reset behavior. Recording the uncertainty in the debt file is transparent, but it does not make returning the assumed result conform to AGENTS.md's rule that unknown behavior remains unsupported. Please add firmware evidence for both behaviors, or leave the peak-meter output unsupported until they can be established.

The exact-head pairwise merge preview with #11315 still conflicts in Ngs2Internal.hpp, Rack.cpp, Render.cpp, Voice.cpp and the NGS2 debt file. The changes are distinct; coordinate landing order and preserve both sets when resolving those conflicts.

AI-assisted review.

@BunnyFl

BunnyFl commented Oct 26, 2026

Copy link
Copy Markdown
Contributor

On the two behaviours the review asks for firmware evidence on: I ran firmware 13.42's libSceNgs2.native.sprx (sha256 8ad3dfc9cd7a51ee…) natively on x86-64. It was driven by this PR's own Ngs2Test.hpp helpers at head 05bb568, with every sceNgs2* call forwarded to the module's export of the same name. The graph is the one TestPeakMeter builds: mastering (2 ch) ← submixer (2 ch) ← sampler (mono PCM_I16L, matrix levels 1/1). Samples alternate 16384 / 0, so peak 0.5 and RMS √0.125 ≈ 0.353553. Each step printed the whole voice-state struct. Three runs gave identical output.

1. The output field is the one at offset 12 (peak_height in both Ngs2SamplerVoiceState and Ngs2SubmixerVoiceState):

detect type sampler +12 submixer +12
off (default) 0 0
1 (peak), one grain 0x3f000000 (0.5) 0x3f000000 (0.5)
2 (RMS), one grain 0x3eb504f3 (0.353553) 0x3eb504f3 (0.353553)
2 (RMS), 8 grains 0.353553 0.353553

In the first 28 bytes of each struct (what I printed), no other word changed with the detect type. The sampler's word at +24 grew by 0x40 per 64-sample grain. Detect types 3 and 0xffffffff return 0x804A8093, as this PR does.

2. A reset does not keep the detect type. With peak mode on and +12 reading 0.5, I sent the sampler's SETUP again (the reset that calls ResetSetup here). +12 read 0 straight after. Then I re-added a waveform of constant 8192 (0.25), re-applied the patch, matrix levels and port matrix, sent PLAY, and rendered twice without touching the meter. The output carried 0.25: from the fourth frame of the first render, and on every printed frame (0 to 3) of the second. Yet +12 stayed 0 on both renders. Re-enabling detect type 1 made it read 0x3e800000 (0.25) on the next render. So on 13.42 the SETUP reset turns the meter off. From reading this PR's code: ResetSetup clears the history but keeps peakMeterMode, so it would report 0.25 there.

Notes on the setup, since the run needed two departures from the test helpers:

  • sceNgs2SystemSetGrainSamples(8) returns 0x804A8310 from the module (64, 128 and 256 return 0), so this ran with a 64-sample grain.
  • The module rejects SCE_NGS2_SAMPLER_VOICE_PARAM_SETUP with the 32-byte Ngs2SamplerVoiceSetupParam (0x804A8361) and accepts it with 40 bytes (header + format + two zero words). I sent 40.

Both of those concern the shared NGS2 headers and helpers rather than this PR. The module's call to sceKernelGetProsperoCompiledSdkVersion got 0 with no version written. Only the sampler's reset was tested, not the submixer's.

@edubox
edubox force-pushed the feat/ngs2-peak-meter branch from 05bb568 to 4e9ab12 Compare October 26, 2026 13:15
@edubox

edubox commented Oct 26, 2026

Copy link
Copy Markdown
Contributor Author

Applied the firmware 13.42 measurement on 4e9ab12700:

  • ResetSetup now clears peakMeterMode as well as the ring, so peak_height reads 0 after a SETUP and stays 0 until the meter is enabled again.
  • TestPeakMeterHistory covers that sequence for the sampler: a render with the meter off reads 0, then re-enabling RMS reads the expected sqrt(0.125).
  • the debt entry now records the measured peak_height field at offset 12 and the reset clearing the detect type; the submixer reset remains listed as unmeasured.

Rebased onto current main 035ac96edd; all 16 ngs2_* tests pass and check_conventions.py / git diff --check are clean. Could you re-review the exact head?

@THEMANnt THEMANnt left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 4e9ab12 against 035ac96. No actionable findings. The changed render paths maintain per-channel peak/RMS history, reset it when the detection mode changes, and validate sampler and submixer block counts. I built ngs2_render_tests, ngs2_custom_tests and ngs2_voiceindex_tests in Release with WinLibs GCC 15.2.0; focused CTest passed all three (3 passed, 0 skipped, 0 failed). Review-only checks also confirmed both rack types accept the 256-block upper boundary and reject 257. The exact-head Actions run passed eligibility only; product build/test jobs were skipped. This independently validates the affected Windows/MinGW paths, not the full 16-test NGS2 suite or console firmware behavior.

@edubox
edubox force-pushed the feat/ngs2-peak-meter branch 2 times, most recently from bda80ff to c831bcc Compare October 26, 2026 16:17
@edubox

edubox commented Oct 26, 2026

Copy link
Copy Markdown
Contributor Author

Rebased onto current main (518d36eaec); head is now c831bccb14. Rebuilt and ran the focused suite on the rebased head: 16/16 ngs2_* tests pass. check_conventions.py --base origin/main: all checks passed.

On the unverified behaviour: the peak_height field at offset 12 and the sampler SETUP reset are backed by the 13.42 measurement linked in the description (peak 0.5 / RMS 0.353553, no other word in the first 28 bytes changes, and the meter stays off after a sampler reset until re-enabled). The submixer reset is not claimed as measured: it is recorded as unmeasured in the debt entry, together with the ring semantics that follow fma-rc's 12.70 reading. Please take another look.

@edubox
edubox force-pushed the feat/ngs2-peak-meter branch from c831bcc to b452176 Compare October 26, 2026 17:57
@edubox

edubox commented Oct 26, 2026

Copy link
Copy Markdown
Contributor Author

Rebased onto current main (88795ed448); head is now b452176178. The change itself is unchanged. Rebuilt and ran the focused NGS2 suite on the rebased head: 16/16 tests pass. check_conventions.py --base origin/main and git diff --check are clean. The sampler SETUP reset now clears the detect mode per the 13.42 measurement in the thread; the submixer reset remains recorded as unmeasured in the debt entry. Could you re-check the exact head?

@edubox
edubox force-pushed the feat/ngs2-peak-meter branch from b452176 to e625f89 Compare October 26, 2026 21:39
@edubox

edubox commented Oct 26, 2026

Copy link
Copy Markdown
Contributor Author

Rebased again onto current main (85071975fb); head is now e625f892bf. No code changes; the sampler reset measurement and the unmeasured submixer reset note are unchanged. 16/16 focused NGS2 tests pass; conventions/diff-check clean. Could you re-check the exact head?

@edubox
edubox force-pushed the feat/ngs2-peak-meter branch from e625f89 to c32e19c Compare October 26, 2026 22:10
@edubox

edubox commented Oct 26, 2026

Copy link
Copy Markdown
Contributor Author

Rebased onto current main (74acfad65b); head is now c32e19c703.

  • Resolved the Ngs2Internal.hpp conflict with feat(ngs2): route custom submixer buffers through Gain #10851 by keeping both its custom-buffer state and the new peak-meter state (peakMeterHistory, peakMeterMode, peakMeterCount, peakMeterCursor, peakHeight, peakMeterBlocks).
  • Kept main's render/custom-processing flow, including custom buffers, route revalidation and Gain lifecycle; the peak meter still measures after the voice modules and still clears on SETUP reset.
  • Debt entry merged with main's newer text and kept under the 1000-character convention limit.

Rebuilt and ran both focused suites on the rebased head: 21/21 in libSceNgs2.native and 9/9 in libSceNgs2. check_conventions.py --base origin/main: all checks passed. Could you re-check the exact head?

@edubox
edubox force-pushed the feat/ngs2-peak-meter branch from 6ce47a5 to 687922b Compare October 27, 2026 12:03
@edubox

edubox commented Oct 27, 2026

Copy link
Copy Markdown
Contributor Author

Rebased automatically onto current main (62b3ba2522); head is now e57c454db3. Focused tests pass; check_conventions.py --base origin/main and git diff --check are clean.

@edubox
edubox force-pushed the feat/ngs2-peak-meter branch from 687922b to e57c454 Compare October 27, 2026 13:04
@edubox

edubox commented Oct 27, 2026

Copy link
Copy Markdown
Contributor Author

Rebased automatically onto current main (75f3702aed); head is now 8218014507. Focused tests pass; check_conventions.py --base origin/main and git diff --check are clean.

@edubox
edubox force-pushed the feat/ngs2-peak-meter branch from e57c454 to 8218014 Compare October 27, 2026 14:03
@edubox

edubox commented Oct 27, 2026

Copy link
Copy Markdown
Contributor Author

Rebased automatically onto current main (0c4a8cb41a); head is now 873d10b2a9. Focused tests pass; check_conventions.py --base origin/main and git diff --check are clean.

@edubox
edubox force-pushed the feat/ngs2-peak-meter branch from 8218014 to 873d10b Compare October 27, 2026 17:04
@edubox

edubox commented Oct 27, 2026

Copy link
Copy Markdown
Contributor Author

Rebased automatically onto current main (14332cd8d0); head is now 137cfe300b. Focused tests pass; check_conventions.py --base origin/main and git diff --check are clean.

@edubox
edubox force-pushed the feat/ngs2-peak-meter branch from 873d10b to 137cfe3 Compare October 27, 2026 18:03
@edubox

edubox commented Oct 27, 2026

Copy link
Copy Markdown
Contributor Author

Rebased automatically onto current main (46fe6f2437); head is now f7ce4d27a3. Focused tests pass; check_conventions.py --base origin/main and git diff --check are clean.

@maskym

maskym commented Oct 27, 2026

Copy link
Copy Markdown
Contributor

Windows result for head f7ce4d27a3, merged into main f759e165d9 (the PR's Tested section names no Windows run).

Host: Windows 11 26300, Intel i7-12700K, WinLibs GCC 15.2.0 (x86_64-ucrt-posix-seh, r6), Release, BUILD_TESTING=ON, Ninja. Build clean.

The tree also carried the open PRs #11945, #11899, #11859, #11772, #11087, #10789, #11627, all merged cleanly, so the run is a joint one; the tests of this PR are ngs2_core_render (1.66 s) and ngs2_voiceindex (0.04 s), and the whole Ngs2 suite was run with them: ctest -R '^ngs2_' 30/30 passed. Not run on a PS5.

AI-assisted: yes (Claude Code), the runs and the numbers above are from this machine.

@edubox

edubox commented Oct 28, 2026

Copy link
Copy Markdown
Contributor Author

Rebased automatically onto current main (0cd07dc4ab); head is now 41905ba9c9. Focused tests pass; check_conventions.py --base origin/main and git diff --check are clean.

@edubox
edubox force-pushed the feat/ngs2-peak-meter branch from f7ce4d2 to 41905ba Compare October 28, 2026 06:03
@edubox

edubox commented Oct 28, 2026

Copy link
Copy Markdown
Contributor Author

Rebased automatically onto current main (d7fd416992); head is now a2d5b03456. Focused tests pass; check_conventions.py --base origin/main and git diff --check are clean.

@edubox
edubox force-pushed the feat/ngs2-peak-meter branch from 41905ba to a2d5b03 Compare October 28, 2026 08:02
@adriadam10
adriadam10 dismissed MarcZX10’s stale review October 28, 2026 08:31

Dismissing a stale review: the requested changes were addressed after it (new head) and the merge queue blocks on it. Please request changes again if anything is still open.

@adriadam10
adriadam10 merged commit acd1387 into boykopovar:main Oct 28, 2026
10 checks passed
@adriadam10

Copy link
Copy Markdown
Collaborator

Checked the diff against the 13.42 measurement in this thread (peak_height at offset 12, sampler SETUP reset clearing the detect type), the ring and block-range validation, and the tests: TestPeakMeter and TestPeakMeterHistory pin values only this change produces (0.5, 0.25, the multi-block RMS average, the reset). The earlier requests for evidence and history coverage are met on this head; the submixer reset stays recorded as unmeasured in the debt entry; merged.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants