|
|
1 month ago | |
|---|---|---|
| .claude | 1 month ago | |
| src | 1 month ago | |
| .dockerignore | 1 month ago | |
| .gitignore | 1 month ago | |
| CLAUDE.md | 1 month ago | |
| Dockerfile | 1 month ago | |
| README.md | 1 month ago | |
| church-acoustic-suite.jsx | 1 month ago | |
| docker-compose.yml | 1 month ago | |
| index.html | 1 month ago | |
| nginx.conf | 1 month ago | |
| package.json | 1 month ago | |
| vite.config.js | 1 month ago |
A purpose-built acoustic analysis tool for PBCC Universal Hall distributed speaker systems. Models the MS6 ceiling speaker layout, Haas window compliance, and off-axis coverage — then connects to Room EQ Wizard (REW) for live measurement analysis via a local LLM (Ollama) or Claude API.
The easiest way to run the app. Docker handles the Node.js build inside the container — no local Node.js required.
# Build and start (runs tests during build)
docker compose up --build
# Open in browser
# http://localhost:3000
REW (port 4735) and Ollama (port 11434) are called from your browser, not the container, so they reach your local machine as normal localhost addresses.
To stop:
docker compose down
npm install
# Development server with hot reload
npm run dev
# Run tests
npm test
# Run tests once (CI)
npm run test:run
# Test coverage report
npm run test:coverage
# Production build
npm run build
-api flaghttp://127.0.0.1:4735 by default — change in Settings if neededOllama requires CORS to be enabled for the browser to reach it:
OLLAMA_ORIGINS=* ollama serve
Pull a model before starting (examples):
ollama pull llama3.2
ollama pull mistral
ollama pull qwen2.5
The Settings tab lets you configure the host, port, and fetch available models dynamically.
The geometry engine models the confirmed PBCC Universal Hall (8-row) dimensions:
| Parameter | Value | Source |
|---|---|---|
| Seating plan | 20,914 × 20,914 mm | SK-303 drawing |
| Row 1 front edge | 2,210 mm from centre | SK-303 |
| Row pitch (FFL–FFL) | 883 mm | SK-303 |
| Row 8 back face | 8,411 mm | SK-303 |
| Back aisle | 2,046 mm | Derived: 10,457 − 8,411 |
| Corner rows | 4 rows, 883 mm pitch | Site survey |
| Ceiling | FLAT at 4,300 mm above centre datum | Survey |
| Floor at centre | 0 mm (lowest point, communion table) | Survey |
| Floor at row 8 back | +700 mm (dish rise) | Survey: 4,300 − 3,600 = 700 |
| Floor-to-ceiling at row 8 | 3,600 mm | Confirmed survey |
| Corner zone ceiling | 2,950 mm floor-to-ceiling (structural drop) | Survey |
Key rule: The ceiling is a single flat horizontal plane. The floor rises (dished bowl) from 0 mm at the communion table zone outward to 700 mm at row 8. Floor-to-ceiling clearance therefore decreases toward the perimeter.
All speakers are flush-mounted in the 600 mm × 600 mm acoustic ceiling tile grid (no drop rods). Power settings per Dudley Wilkin's 2010 Aberdeen 8-row hall proposal:
| Ring | Count | Radius | Power | Coverage target |
|---|---|---|---|---|
| Centre | 1 | 0 mm | 6 W | Rows 1–3 |
| Inner ring | 8 | 5,720 mm | 8 W | Rows 4–7 |
| Outer ring | 8 | 8,600 mm | 4 W | Row 8 + back aisle |
| Corner | 8 (2 per corner) | 10,310 mm | 4 W | Corner seating |
The MS6 is a two-driver ceiling speaker designed by Dudley Wilkin for this hall type:
Signal chain: Mono mix → MIDAS MR12 Ch1 (TEQ room EQ) → Bus 1/2 → AUX1 LF amp + AUX2 HF amp → 100 V line → transformers → speakers
Adjacent speaker segments are wired in anti-phase. This creates acoustic null lines along aisle centrelines, so each listener receives sound from only one speaker. This is the primary intelligibility mechanism — it dramatically improves gain-before-feedback and removes inter-speaker comb filtering.
Measurement note: When setting EQ, select the main ring with anti-phase enabled and disconnect the centre speaker. A microphone placed under any main ring speaker will then pick up only that speaker. (Dudley Wilkin — GEQ setup method, September 2014)
Full method: Dudley Wilkin, September 2014
Only impulse-based measurement is valid for this speaker system. Continuous sound (pink noise, SLM readings) is invalid because:
Use REW or ARTA with an impulse window. The minimum measurement window required is 10 ms — this requires sufficient ceiling clearance (at minimum 2,000 mm microphone distance from the speaker).
Reference: Dudley Wilkin — "Loudspeaker Positions and Continuous Sound"
| Status | Delay beyond primary | Meaning |
|---|---|---|
| Primary | 0 ms | Nearest speaker to this row |
| OK | 0–10 ms | Acceptable — fused with primary |
| Warn | 10–30 ms | Colouration risk |
| Danger | > 30 ms | Distinct echo — intelligibility impact |
church-acoustic-suite/
├── src/
│ ├── main.jsx # React entry point
│ ├── App.jsx # All tabs and UI components
│ ├── geometry.js # Pure acoustic geometry functions (testable)
│ ├── constants.js # Hall defaults, speaker defaults, settings defaults
│ ├── palette.js # Dark-theme colour constants
│ └── __tests__/
│ └── geometry.test.js # 35+ unit and integration tests
├── documents/ # Reference documents (Dudley Wilkin)
├── church-acoustic-suite.jsx # Original monolithic prototype (reference)
├── index.html
├── vite.config.js
├── package.json
└── CLAUDE.md # Codebase reference for AI assistants
This tool is informed by 40+ years of acoustic engineering documentation for the PBCC Universal Hall format by Dudley Wilkin, covering: