theallelectricsmartgrid

Concrete JUCE iOS project comparison

Read-only research, 9 September 2026. Three released audio projects and one small JUCE diagnostic application were traced from their iOS build definitions through their standalone initialization to the actual native backend they include. Only public source files and indexes were downloaded; no repository was cloned, no application was built or installed, and no device settings or project code were changed.

Main result: these examples do not reveal a special USB-safe AVAudioSession configuration that SmartGridOne is missing. All three applications’ inspected standalone paths use RemoteIO, allow mixing, retain active sample-rate/buffer probing, and retain JUCE’s historical one-extra-frame buffer-duration request. SonoBus explicitly starts from 48 kHz/256 frames. BYOD and CHOW Tape leave rate/buffer preferences to saved settings and JUCE defaults. Those are useful comparisons of source configuration, not demonstrations of reliability on the MAYA44 USB+ and iPadOS 26.6.1.

Inspected project snapshot JUCE actually selected by that build Significance
SonoBus 35f1062, 11 December 2023, 1.7.2 deps/juce, 7.0.8, essej/JUCE sono7good fork at 925e37b00500afe60ad64cacdbcbc8c85f1f2ec5 Custom standalone setup and explicit USB route classification.
BYOD 1cf22b6, 14 August 2025 Upstream JUCE 7.0.10, a8ae6edda6d3be78a139ec5e429dc57ef047e82a Standard standalone wrapper, almost identical native iOS backend to our unpatched 8.0.2.
CHOW Tape 604372e, 5 November 2023 lv2-porting-project/JUCE 6.1.6, ebbe26fd877ac7248c9bb800b56a4786bf538cdb Older standalone implementation; its native iOS file is byte-identical to upstream 6.1.6.
JUCE AudioPerformanceTest 8.0.2 JUCE 8.0.2 Small output-only application with a concrete iOS exporter; closest structural baseline to the current SmartGrid tone path.

Version provenance was checked in SonoBus’s module header, its subrepo metadata, BYOD’s pinned module header, and CHOW Tape’s pinned module header. The application SHAs were resolved from their public main/master branches during this research. Their dates matter: these source snapshots do not establish what any presently installed App Store binary contains.

Our actual baseline. The relevant local checkout is /Users/joyo/.codex/worktrees/e18e/theallelectricsmartgrid, not the unrelated working changes on main. OpenAudioDevice explicitly requests 48 kHz/512 frames, zero physical inputs and seven outputs, supplies no saved device XML, and disables fallback on initialization failure. It clears the input mask and closes a device whose accepted rate is unsuitable. The observed MAYA run had zero inputs and four outputs according to the supplied experiment packet. SampleTimer defines the required 48 kHz rate.

The shared native file at /Users/joyo/JUCE/modules/juce_audio_devices/native/juce_Audio_ios.cpp is byte-identical to upstream 8.0.2. The app’s copy-generation script makes precisely two native replacements: remove the extra frame from the requested duration, and change the physical-device default from 256 to 512. The iOS exporter persists the prebuild and header precedence. The checked definitions contain no override disabling mixing, no explicit sample-rate list, and no app call enabling measurement mode.

Consequently, these are inherited JUCE behaviors, rather than explicit SmartGrid app choices:

SonoBus: an explicit 48 kHz preference with a small native fork.

Its custom standalone application’s createWindow sets 48 kHz and, on iOS, 256 frames. These are preferences: its holder reloads saved device settings, and a user option can remove the saved rate and replace the preferred rate with zero. It initializes from the plugin’s main bus counts; the plugin defines stereo main input/output, while the standalone holder disables non-main buses. Thus fresh standalone initialization normally opens two inputs/two outputs when recording permission is granted, unlike our zero-input/four-active-output test.

The iOS Projucer settings explicitly enable microphone permission and background audio, target iOS 11, and select deps/juce/modules. The committed Xcode project also points to that directory; the separate top-level JUCE directory is not this build’s backend. A misleading-looking rate-list definition begins with NOTUSED_; it does not define the actual JUCE explicit-rate macro.

Its native backend retains mixing, the +1-frame duration formula, and rate/buffer probing. Unlike stock JUCE 8.0.2, it leaves Bluetooth HFP input disabled by default; A2DP/AirPlay remain permitted for PlayAndRecord. Its audio-unit creation selects RemoteIO, not VoiceProcessingIO. No call selecting Measurement was found in the inspected initialization, options, processor, or platform utility code.

The native fork additionally classifies USB, line-out and headphones as external listening routes. That classification drives feedback muting in the holder. Its route handler retains JUCE’s category/configuration-change exclusions and schedules refresh for the other route reasons; restart reapplies target settings and recreates the running audio unit.

These changes concern route selection and preventing feedback, not a demonstrated correction to USB clock drift or periodic analog holes. SonoBus supplies a concrete counterexample to the idea that 48 kHz itself is an unusual app choice, but it is not a measured MAYA success case here.

BYOD: standard stereo effect wrapper, with almost our same native code.

Its build selects Standalone and AUv3 on iOS, requests microphone permission, and archives the standalone target for iOS 11.4. The inspected build definitions do not replace JUCE’s standalone application or set native audio macros.

The stock standalone app passes no preferred setup. Its holder supplies saved audio XML, channel counts and fallback permission. BYOD inherits stereo buses and prepares DSP using the delivered rate/block size. It does not enforce SmartGrid’s fixed 48 kHz contract.

Its inherited physical-device buffer default is 256. An unspecified rate is selected using JUCE’s requested/current/supported-rate logic, not an explicit BYOD 44.1 kHz preference. Likewise the wrapper’s provisional processor initialization numbers are not hardware requests. The input mute substitutes zero samples; it does not close physical inputs. With recording permission granted, the native category is therefore PlayAndRecord even while input is muted.

Byte comparison of BYOD’s pinned native file against our unmodified JUCE 8.0.2 found only the licence header and removal of pre-iOS-10 compatibility branches for A2DP/URL opening. On our current iPad these do not change audio behavior. The rate/buffer probing, mixable session, optional mode setter, RemoteIO creation and route/restart logic are otherwise the same. Our two app-local patches are the substantive differences in that native file. This is stronger evidence than inferring behavior from the version numbers alone.

CHOW Tape: another real standalone app, with older JUCE defaults.

The iOS CMake branch builds Standalone/AUv3 with microphone permission, and the archive script targets iOS 11.4. Its submodule configuration points to the LV2 JUCE fork, but that fork’s native iOS file at this pin is byte-identical to upstream 6.1.6.

Its standalone app also passes no preferred setup; the holder restores saved settings and opens the main channels. Its base processor defaults to stereo in/out, and DSP preparation follows the delivered format.

The 6.1.6 native source supplies the 256-frame physical default, +1-frame duration request, active rate/buffer probing, mixable PlayAndRecord with inputs, and RemoteIO. The inspected standalone path does not select Measurement or VoiceProcessingIO. Compared with our backend, its category options lack the explicit AllowAirPlay option; this is not evidence of a USB playback improvement. Its route callback still schedules asynchronous hardware refresh/restart. Its muted-input behavior is software muting, as in BYOD. These two ChowDSP applications share framework conventions, so they are not fully independent evidence for a configuration rule.

Small diagnostic comparison. AudioPerformanceTest’s constructor requests zero inputs/two outputs through AudioAppComponent; its project has an iOS exporter. AudioAppComponent initializes the device with no format preferences and attaches AudioSourcePlayer. This inherits Playback after the initial PlayAndRecord enumeration, mixing, 256 frames and normal JUCE probing/restarts. It is an output-only structural example, not a USB-specific success report or a pure sine source. No independently verified minimal MAYA-specific diagnostic repository was found in this search.

What matters for this investigation.

  1. SmartGrid’s 48 kHz preference, output-only session, RemoteIO, or mixability cannot be identified as wrong merely by contrasting it with “other JUCE apps.” There are concrete examples of the same choices, and several shared native mechanisms. None supplies a controlled MAYA/iPadOS 26.6.1 result.
  2. The specific differences worth retaining in the hypothesis list are: 512 versus inherited 256-frame preferences; actual input-channel opening versus software muting; fixed accepted sample-rate requirements versus adapting DSP; initial native enumeration and subsequent format-setting order; and the native JUCE revision/patch set. Existing recordings already cover several of the first three variations, so source comparison alone is not a reason to repeat them.
  3. These inspected apps do not demonstrate that skipping capability probing is an established working solution. SonoBus even carries a disabled explicit-rate-list definition. Suppressing probing would be a distinct experiment, and any such experiment must retain reliable actual-rate/buffer verification.
  4. There is no source evidence here that changing to VoiceProcessingIO or Measurement is required for USB stability. None of the inspected standalone initialization paths makes either choice. A default-mode claim concerns expected process initialization, not a measurement of the currently running AVAudioSession.
  5. An AUv3 run inside AUM/Drambo or another host does not exercise the plugin’s standalone device manager. The host selects the session/device configuration. A future public-app comparison would need the actual standalone binary version, session state, accepted format and callback sizes recorded before it could distinguish configurations.
  6. This source survey cannot explain the initiating cause of the late tone-only periodic holes. It establishes neither the semantics of ioDriftNS nor why Drambo remained clean. The observed absence of long callback gaps, xr increments and USB restarts during that symptom remains stronger evidence about that run than any assumption based on an app’s popularity.

The corresponding downloaded source files, pinned tree/commit metadata, and comparison inputs are retained beside this report with sonobus-, byod-, chowtape-, and juce8- prefixes. Every claim above refers to inspected source/build paths; none is a claim that these public snapshots were executed in our hardware setup.