The number was capped at 6rem, so a readout given half a wall stopped growing at the size it reached in a small tile. Removing the cap was not enough on its own. Sizing text off container units means choosing a coefficient for some assumed number of characters, and the value here is not a fixed width: the coefficient that fills a tile nicely for "-45.9" pushes "-100.5" nine percent out through the side. Measured it rather than guessed — the tile now sets a trial size, reads the width the actual text wants, and scales to fit. That runs only when the tile size or the length of the reading changes, not on every frame. It now fills about 98% of the width wherever width is the limit and 92% of the height wherever height is, at every tile size from 180x70 up to 1400x700, with no overflow on either axis. The CSS keeps a conservative size for the first paint before the measurement has run. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
95 lines
2.6 KiB
JSON
95 lines
2.6 KiB
JSON
{
|
|
"id": "spl-meter",
|
|
"name": "SPL Meter",
|
|
"version": "0.2.1",
|
|
"proddash": ">=1.5.0",
|
|
"description": "Calibrated sound level, Leq and RTA from an audio input on this machine",
|
|
"permissions": [
|
|
{
|
|
"kind": "microphone",
|
|
"reason": "Measuring sound level from an audio input on this machine"
|
|
}
|
|
],
|
|
"client": "client.js",
|
|
"server": "server.js",
|
|
"style": "style.css",
|
|
"minSize": {
|
|
"w": 2,
|
|
"h": 1
|
|
},
|
|
"defaultSize": {
|
|
"w": 3,
|
|
"h": 2
|
|
},
|
|
"configGroups": {
|
|
"Input": {
|
|
"toggle": "enabled"
|
|
},
|
|
"Measurement": {
|
|
"columns": 2
|
|
},
|
|
"Calibration": {
|
|
"collapsed": "whenSet",
|
|
"help": "A sound level calibrator fits over the microphone capsule and emits a known level, almost always 94 dB at 1 kHz. Put it on, press Measure beside the channel, and copy the offset it reports into the box. Without this the meter still works, but it reads in dB relative to full scale and every tile says so."
|
|
}
|
|
},
|
|
"configSchema": {
|
|
"enabled": {
|
|
"type": "switch",
|
|
"label": "Sound level measurement",
|
|
"group": "Input",
|
|
"default": false
|
|
},
|
|
"device": {
|
|
"type": "select",
|
|
"label": "Audio device",
|
|
"group": "Input",
|
|
"showWhen": "enabled",
|
|
"default": "",
|
|
"optionsRoute": "/devices"
|
|
},
|
|
"channels": {
|
|
"type": "string",
|
|
"label": "Channels on that device (1-based, comma separated)",
|
|
"group": "Input",
|
|
"showWhen": "enabled",
|
|
"default": "1",
|
|
"help": "One meter per channel — \"1\" for a single measurement mic, \"1,2\" for a stereo pair."
|
|
},
|
|
"weighting": {
|
|
"type": "select",
|
|
"label": "Weighting",
|
|
"group": "Measurement",
|
|
"default": "A",
|
|
"options": [
|
|
{
|
|
"value": "A",
|
|
"label": "A — how loud it sounds"
|
|
},
|
|
{
|
|
"value": "C",
|
|
"label": "C — keeps the low end"
|
|
},
|
|
{
|
|
"value": "Z",
|
|
"label": "Z — no weighting at all"
|
|
}
|
|
]
|
|
},
|
|
"bands": {
|
|
"type": "switch",
|
|
"label": "Spectrum analysis",
|
|
"group": "Measurement",
|
|
"default": true,
|
|
"help": "1/48-octave bands for the RTA and spectrogram tiles, which each fold them to their own banding. Turn it off if you only ever show the number."
|
|
},
|
|
"calibration": {
|
|
"type": "string",
|
|
"label": "Offsets in dB, one per channel",
|
|
"group": "Calibration",
|
|
"default": "",
|
|
"help": "Leave empty and every reading is dB relative to full scale, labelled dBFS so nobody mistakes it for real SPL."
|
|
}
|
|
}
|
|
}
|