🎻

ObieWebApp

Β· Documentation
Tips Changelog ← All tools

ObieWebApp β€” User Guide

How to use Explore, Convolve, and Acquire to measure, compare, and auralize violin FRFs.

Plot tips & shortcuts For Plotly plot controls, axis range editing, and mouse shortcuts, see the Tips page β†’
Looking for the math? For the signal-processing derivations (H1/H2 estimators, coherence, convolution, band averaging) and binary file format specifications, see the Technical Reference β†’

Contents

πŸ“

Getting Started β€” Data Folder

All three tools are browser-based and run entirely locally β€” nothing is uploaded to any server. They use the File System Access API (Chrome or Edge 86+ required) to read and write files in a folder you choose on your computer.

Select a Data Folder

Before using any tool, click the Data Folder button (on the home page or inside any tool) and select the folder that holds your measurement files. The folder name is remembered between visits. Grant read/write access when the browser asks β€” this allows the tools to load FRF files and save new measurements automatically.

Folder layout expected by the tools Measurement files (AvR, AvC, RMS, TRF, CSV) can be anywhere inside the Data Folder. Acquire saves each run into a timestamped sub-folder. Settings files (templates, band presets, lists) are stored in ObieAppSettings/ inside your Data Folder and are loaded automatically on startup.
Page looks out of date after a site update? Every tool's header has a ⟳ Refresh button. The browser can keep serving an old cached copy of a tool's files behind the scenes even after a normal reload β€” click ⟳ Refresh to clear that cache and reload with the current version. Any unsaved work in progress on the page is lost, so save first if you can.

Text size

Every page's header has Aβˆ’ / A+ buttons with the current size (90–175%) between them. The choice applies to all ObieWebApp tools in that browser and is remembered. Without a choice, Macs default to 100% and Windows/Linux PCs to 115%. Double-click the percentage to return to the default for your computer.

Supported file formats

ExtensionDescription
.avr / .avcAveraged FRF (real/imaginary columns) β€” main format for Explore and Convolve
.rmsRMS average across positions, written by Acquire (AvR layout) β€” loads in Explore like an .avr
.trf / .trvTransfer-function format β€” also supported by Explore and Convolve. Files saved by Acquire include coherence and run metadata.
.csvTwo-column CSV (frequency, magnitude dB) β€” quick import for Convolve
.matMATLAB FRF file (yspec format) β€” loaded by Explore and Convolve. Coherence is shown automatically when present.
.wavAudio file used as the dry signal in Convolve; also storable as a sound snippet in Explore

πŸ”

Explore

PyScript
Open Explore β†’

Explore lets you load multiple FRF files at once, overlay them on a single interactive plot, and compare them with smoothing, normalization, band averaging, and per-dataset convolution playback.

Loading files

Three ways to load FRF files:

  1. Browse β€” opens a file picker; select one or more FRF files directly. Accepts AvR, AvC, RMS, TRF, TRV, CSV, and MAT formats.
  2. Search β€” opens the Search modal. Type a filename pattern (comma-separated for OR logic), filter by file type, and load all matching files from your Data Folder with one click.
  3. Drag & drop β€” drag files from your desktop onto the plot area.
Coherence overlay When a file contains coherence data (TRF files saved by Acquire, or MATLAB .mat FRF files), a Ξ³Β² checkbox appears in the plot toolbar. Check it to show the coherence trace for all visible datasets. The trace is drawn in the same colour as the FRF, scaled to occupy the bottom third of the current Y range β€” so it never pushes the FRF out of view. The checkbox is off by default.

Hover tooltip

Hovering over any point on the plot shows: Amp = 18.4 dB   Freq = 443 Hz  (A = 440 Hz). The note name and its exact reference frequency (nearest equal-temperament pitch) are shown automatically whenever the cursor is over an FRF trace.

Plot controls

ControlWhat it does
Y = lin / logToggles the Y axis between linear and dB (log) scale.
↕YAuto-scales the Y axis to the visible X range β€” ignores data outside the current frequency window.
dB range fieldSets the displayed Y range in dB (e.g. 38 dB).
X = log / linToggles the X (frequency) axis between log and linear.
Ξ³Β² checkboxShow or hide coherence traces for all datasets that carry coherence data.
SmoothingApplies fractional-octave smoothing from ΒΌ semitone to one full octave.
NormalizationAs measured, normalize by peak, normalize by average over a custom Hz range, or overlay a Complex average / Real average trace across all visible datasets (see Group averaging below).
πŸ–¨ PrintFar right of the toolbar. Snapshots the current plot and opens it in a new page with an editable title and notes area β€” fill those in, then click Print on that page to send just the labeled plot to your printer.
✨ Ask ClaudeOpens a new Claude.ai chat in another tab with a question started for you, pointing Claude at ObieWebApp's documentation β€” finish typing your question and send it. Nothing is sent automatically.

Dataset list (left panel)

Button / controlWhat it does
CheckboxShow or hide an individual dataset on the plot.
β–Ά (play)Convolves the dataset's FRF with your saved sound snippet and plays it back in real time.
Color swatchClick to change the line color for that dataset.
See All / See NoneShow or hide all datasets at once.
ReduceRemoves datasets that are currently hidden.
Clear AllRemoves all loaded datasets.
UndoRestores the last dataset removed by Reduce or Clear All.

Band averaging

Select a band preset from the Bands dropdown (presets are loaded from ObieAppSettings/bands/ in your Data Folder). The band table shows one column of results per visible dataset β€” average dB level and spectral centroid for each band, in each dataset's colour. Toggle shade to highlight the band regions on the plot. Click Excel to export all datasets' band data as a CSV file.

Group averaging & saving

Set the Normalization dropdown to Complex average or Real average to overlay one averaged trace across all currently visible datasets. Complex average converts each dataset's dB magnitude to linear amplitude before averaging (then back to dB); Real average takes the arithmetic mean of the dB values directly. Complex average is only selectable when at least one visible dataset carries complex/phase data (e.g. loaded from an AvC or a complex TRF).

With one of those modes active, right-click the plot for a πŸ’Ύ Save to Group Averages… option β€” name the average and save it as a CSV, an AvR file, or an RMS file (the root-mean-square of the visible datasets' magnitudes, in AvR layout with a .rms extension) into a Group Averages folder created at the root of your Data Folder.

Interpret

Click Interpret to open a reference overlay with two sections:

Other toolbar buttons

ButtonWhat it does
SettingsOpens Explore Preferences (default Y range, X range, line width, sound snippet WAV, output device).
ListsShows predefined file lists stored in your Data Folder β€” useful for quickly loading a curated set of FRFs.
ShareCopies a shareable URL (or file list) to the clipboard so a colleague can open the same set of files.
ColorsSwitches the entire palette (Default, Warm, Cool, High Contrast).
Tip β€” convolution playback Set a sound snippet WAV in Settings (open Settings β†’ Sound snippet β†’ Browse…). This dry audio is then convolved on-the-fly when you press β–Ά on any dataset, letting you audition what the violin "sounds like" given that FRF.

πŸ”€

Convolve

PyScript
Open Convolve β†’

Convolve applies a measured FRF to a dry audio file using full complex frequency-domain convolution: Y(f) = H(f) Β· X(f). The result sounds like the dry signal played through (or by) the measured instrument.

Step-by-step workflow

  1. Load an FRF. Under FRF Files, click Left / Mono FRF and pick an AvR, AvC, TRF, or CSV file. For stereo output, also load a Right FRF; the tool then produces a two-channel result with independent left and right filtering.
  2. Load a WAV. Under Signal (WAV), click Load WAV and select any WAV file (mono or stereo). Use β–Ά Play WAV to confirm the dry signal.
  3. (Optional) Pick an output device. Under Settings, choose where playback should go from the Output device dropdown.
  4. Convolve. Click ⚑ Convolve. The button is enabled only once both an FRF and a WAV are loaded.
  5. Listen and save. Press β–Ά Play Result to audition, then πŸ’Ύ Save to download the convolved WAV to your computer.

The four plots

FRF Β· Magnitude (dB)
  • Shows the loaded FRF on a log-frequency axis.
  • Both L and R channels are drawn if stereo.
Input Β· Spectrogram
  • Time-frequency spectrogram of the dry WAV.
  • Toggle dB / linear amplitude with Spec: dB in the toolbar.
Output Β· Convolved Waveform
  • Time-domain waveform of the convolved result.
  • Useful for checking for clipping.
Output Β· Spectrogram
  • Spectrogram of the convolved result.
  • Compare with the input spectrogram to see the FRF shaping effect.
Technical details Convolution is performed in the frequency domain using a Hann-windowed FFT. The FRF is interpolated onto the audio-sample frequency grid using log-space interpolation. The result is reconstructed with minimum-phase or zero-phase methods as appropriate for the file type.

🎯

Acquire

PyScript
Open Acquire β†’

Acquire turns your laptop and a USB audio interface into an impact-hammer FRF measurement system. It records hammer and microphone signals simultaneously, detects hits automatically, averages multiple hits per position, and saves a TRF per position plus AvR, AvC and RMS averages at completion (see What gets saved below).

Hardware setup

  1. Connect your USB audio interface (e.g. Focusrite Scarlett 2i2) before opening the page.
  2. By default, plug the impact hammer into Input 1 (left) and the microphone into Input 2 (right). Enable Swap channels in Template & Settings if your hardware is wired the other way around β€” the Calibration section's channel labels and row order swap with it, so whichever input the hammer is actually on is always listed first.
  3. Use Chrome or Edge β€” Safari and Firefox do not support the required audio APIs.

Connecting a Data Folder β€” live view

Click πŸ“ Data Folder and select the folder where results should be saved (or let Acquire auto-restore the last one you used). It immediately drops you into a live, unnamed "scratch" view β€” no instrument, no test name, calibrations reset to 1, cutoffs reset to 0.30 s, nothing running β€” so you can plug in and watch the Hammer/Mic/FFT plots respond right away with nothing to configure first. Nothing is written to disk while you're in this state; the toolbar's 🎻 Instrument button and the test-name indicator next to it stay hidden until you actually name an instrument.

Naming an instrument

Open Template & Settings β€” click the test button (New Test, or the template's name) in the banner row. For a new test the dialog is titled New Test and opens with the Instrument field showing Choose an instrument, empty notes, and the primary button greyed out. Type a name (it autocompletes against instruments that already exist in your Data Folder) or pick an existing one. The hint under the field then tells you what will happen β€” Creates a folder for a new instrument or Uses the existing instrument folder β€” and what the new test will be called (e.g. Violin_03). The notes box fills in at the same time. When you pick an existing instrument, Acquire also pre-selects the template its last test used (read from that test's template.json), unless you've already chosen a template in this dialog or edited the settings; the template must still exist in your Templates folder.

The primary button (Run Test / Update Template and Run Test) both commits the name and starts acquisition for you if nothing is already running, so there's no separate Start click needed the first time. Acquire creates a folder named after the instrument and automatically numbers successive test runs inside it (Violin_01, Violin_02, …). Once an instrument is set, the toolbar's 🎻 Instrument button and the test-name indicator appear β€” click 🎻 any time afterwards to rename or switch instruments (it reopens the same dialog), and click the test-name indicator to rename just the current run.

Reopening the dialog during a test. While a test is in progress (audio running, or the test already has hits and isn't finished) the dialog is titled Current Test, keeps the current instrument and shows that test's notes unchanged, and the primary button reads Continue Test. Data taking is paused while the dialog is open β€” a hit already being captured finishes first β€” and resumes when you close it. Changing the instrument name turns it back into a new test.

Leaving Instrument blank The primary button stays disabled until an Instrument name is entered. Create New Template is the exception: it only saves a template file and never requires an instrument.

Template & Settings dialog

Click Template: in the banner row, or pick one from its dropdown (see Templates below), to open the dialog. It's laid out as a left column plus a tabbed area on the right:

Setting (Template columns)Notes
Input deviceChoose your audio interface from the dropdown β€” takes effect immediately. You can also click the Device: indicator in the status row at any time for a quick device picker without opening the full dialog.
Ham trigger thresholdVoltage level (V) that triggers a hit. Lower values catch lighter taps; raise it to ignore ambient noise.
Time before / after hitPre- and post-trigger capture window in seconds.
Hammer / Mic time cutoffSignal is zeroed after this time (0.001–5 s) β€” suppresses late reflections. Shown as a green line on the mini plots.
Ch1 (L) / Ch2 (R) calibrationSensor sensitivities in the same units as LabVIEW β€” mV/N for the hammer, mV/Pa for the mic (mV/m/sΒ² for an accelerometer, mV/mm/s for a vibrometer), taken from the sensor's data sheet. Full-scale voltage (V/full range, default 1 β€” LabVIEW's Voltage Cal) is the input voltage that a Β±1 sample represents, so physical value = sample Γ— full-scale voltage Γ— 1000 / sensitivity. FRF estimator chooses H1 (default, what LabVIEW saves), H2 (= H1 Γ· coherence, reads high where coherence is low) or the geometric mean √(H1Β·H2) (= H1 Γ· √coherence); it is saved in template.json and applies to the live plot and the saved TRF/AvC/AvR files. The row labelled "Hammer cal." always names the channel the hammer is actually wired to, and the two rows swap order together with Swap channels. Saved hit WAVs are raw (uncalibrated, channel 1 = L, channel 2 = R, exactly as captured, 32-bit float); the calibration and swap settings needed to convert them are stored in the run's template.json.
Hits per positionNumber of good hits to average before the app considers a position complete.
Number of positionsTotal positions per prefix group (e.g. 12 gives H01–H12).
Position prefixLabel prepended to position names. Enter a comma-separated list (e.g. H,V) to create multiple groups β€” H,V with 12 positions per group gives H01–H12 then V01–V12.
Swap channelsMoves the hammer trigger to the right input channel (Input 2) and relabels/reorders the Calibration rows to match.

Node Stencil (inside Template & Settings)

The Stencil: dropdown sits next to the Template picker at the top of the Template tab, listing every stencil saved in your Data Folder's Templates folder plus a None option. Picking one applies it immediately β€” there's no separate Apply button β€” and saves it into that run's template.json right away. Pick None to remove a stencil from the current run. The Stencil Builder link next to the dropdown opens Stencil Builder in a new tab.

Once a stencil is applied, a small preview of its node layout appears under Hit Detection, labelled with the stencil's name. This preview keeps itself in sync: while the Template & Settings dialog is open, Acquire re-checks the stencil's file every couple of seconds, so edits saved from a Stencil Builder tab open alongside it (same name, re-saved) appear automatically without re-selecting anything. Click the preview image to open Stencil Builder with that exact stencil already loaded, ready to edit.

Plot Settings (inside Template & Settings)

Plot Settings is a collapsible section (click the header to show/hide it, expanded by default). It controls the axis limits for all four plots, each shown as a single X axis range and Y axis range row (min – max):

FieldsControls
FRF X / Y rangeFrequency range (Hz) shown on the main FRF plot, and fixed dB limits for its Y axis. Leave Y blank to use auto-scale (controlled by the dB range field).
Hammer X / Y rangeTime window (s) and voltage range (V) for the Hammer time plot.
Mic X / Y rangeTime window (s) and voltage range (V) for the Microphone time plot.
FFT X / Y rangeFrequency range (Hz) and dB range for the Hammer FFT plot.

These axis limits are saved with your settings and are part of templates β€” loading a template restores all axis ranges.

Checklist

The right-hand info panel's Checklist sits above Run Settings. The Checklist button at the right end of the plot toolbar shows or hides that whole right-hand column to give the FRF plot more room; Acquire remembers whether it was open or closed and restores it next time. It's a step-by-step reminder for the full workflow, grouped into two sections:

GroupSteps
SoundcardPowered on; 48V on; HiZ on for the hammer; selected (in blue)
SoftwareData folder; name instrument; rename test (if you want); choose template; edit Notes; verify in LiveView; hit Run (if needed); check hammer FFT; check coherence

Click a step to check it off; it strikes through and the state persists across reloads. The whole checklist clears automatically the next time you press β–Ά Start from idle or a completed run, ready for the next one.

✨ Ask Claude, in the main toolbar, opens a new Claude.ai chat in another tab with a question started for you, pointing Claude at ObieWebApp's documentation β€” finish typing your question and send it (nothing is sent automatically).

Running a measurement

  1. Click πŸ“ Data Folder and select the folder where results should be saved β€” Acquire lands in live view immediately (see above).
  2. Open Template & Settings and name your instrument (see Naming an instrument, above) β€” this also starts acquisition automatically.
  3. Strike the instrument. The three mini plots (Hammer FFT, Hammer time, Mic time) update after each hit. Check that the hammer pulse is clean β€” a double-hit shows two bumps in the Hammer time plot.
  4. After the required number of good hits the Position complete dialog appears. Choose Next Position β†’ to advance (the mini plots and current FRF clear for a fresh start) or Repeat to re-do the current position.
  5. Use the Undo / Clear / Start over row above the Hammer FFT plot (left sidebar) to remove a bad last hit, restart just the current position, or clear every position and start the whole run over. Esc clears the current position, like Clear. Undo and Clear also blank the Hammer, Mic and Hammer FFT plots, not just the FRF.
  6. Right-click a position box in the banner that already has data to Clear that position, or Clear it and all later positions. After a confirmation, Acquire deletes the cleared positions' saved WAV and TRF files and clears their data; the run then goes back to the first cleared position (finished runs become resumable) so the next hits refill it. Boxes with no data have no menu.
  7. When all positions are complete, AvR, AvC and RMS averages are saved automatically (per prefix group, plus a combined set if you used more than one β€” see What gets saved below) and a Run complete banner appears.
  8. To start the next run on the same instrument, click β–Ά Start in the banner again β€” the test name increments automatically (e.g. Violin_01 β†’ Violin_02) and all positions reset.
What gets saved Each position saves one .trf file (updated after every hit, named by its resolved position label, e.g. H03.trf or V07.trf) and one .wav raw capture per hit inside a raw/ sub-folder. TRF files include coherence and run metadata (sample rate, threshold, cutoffs, device name) readable by Explore. At run completion, three files are written to the instrument folder root for each prefix group, named <run> <group>.avr/.avc/.rms: an .avr (the plain average of the per-position magnitudes), an .avc (the complex average), and an .rms (the root-mean-square of the per-position magnitudes, √(mean of |H|Β²) β€” see the file-format reference). The .rms file uses the AvR layout. E.g. an H,V run named test2_09 with 12 positions per group produces test2_09 H.avr / .avc / .rms, the same for V, and a combined test2_09 HV.avr / .avc / .rms across all 24 positions. Explore opens .rms files like .avr, and its File Type filter has an RMS option.

Reviewing the FRF plot

The main plot shows the current position's FRF building up with each hit, along with a coherence overlay (Ξ³Β², scaled to the middle of the Y range). When you advance to the next position the plot clears so you start fresh β€” previous positions are saved on disk and can be loaded in Explore. The controls above the plot are ↕Y (rescale Y to the data), the dB span field (up to three digits), Colors (line palette), Show History, and Checklist (see above). Plotly's own zoom/pan/box-select/autoscale/camera controls are always shown on the plot, and the line-name legend is hidden.

With no fixed Y limits set, the Y axis fits itself to your first data (top at the peak rounded up to 5 dB) and then stays put β€” it doesn't jump when the plot clears for the next position or when later data peaks differently. Press ↕Y, change the dB span, or double-click the plot to re-fit it.

Templates

A template stores your complete measurement setup β€” trigger settings, calibration factors, position count, and all plot axis limits. Templates live in ObieAppSettings/Templates/ inside your Data Folder.

  1. The banner's Template control is a split button: click Template: name to reopen the current template's settings, or click the β–Ύ caret next to it for a dropdown of every saved template β€” picking one opens the dialog with that template's settings already applied.
  2. Inside the dialog, picking a different template from its own list applies it immediately (fields update right away). Closing with Cancel reverts the banner and dialog back to whichever template was actually active when you opened it.
  3. The primary button at the bottom reads Run Test (or Continue Test when resuming a test in progress) when your settings still match the applied template. Editing any field switches it to Update Template and Run Test (… Continue Test), which saves your changes back into that template as well as applying them. With no template applied, it applies your changes to this run only.
  4. Picking an existing instrument pre-selects the template its last test used (see Naming an instrument).
  5. To save the current settings as a brand-new template, click Create New Template.
  6. Reset Default Templates re-downloads the built-in templates ("HV 24 Obie Rig", "ScratchPad", "Scratchpad Obie 26") without touching your custom ones.
Primary button label tracks unsaved changes If you edit any setting (threshold, cutoffs, axis ranges, etc.) after loading a template, the primary button switches to "Update Template and Run Test" so it's clear the current settings no longer match the saved template until you save them back into it.

Audio device disconnect

If the USB audio interface is unplugged or interrupted while acquisition is running, Acquire stops immediately and shows an alert. Re-plug the device and click β–Ά Start again. If you change the selected input device in Settings while audio is active, the audio stream restarts automatically on the new device.

Session Notes & Photos

Notes save to notes.txt in the instrument's folder and are shown in Explore when you hover that instrument's datasets. They are edited in the Template & Settings dialog's Notes tab (shown by default), which now fills the left column's height for more writing room. The box holds the whole notes file: the new test's dated, numbered entry (e.g. "(3) 8/31/26 19:54 Test 03", pre-filled with the instrument name) sits on top and every earlier entry follows below β€” all of it is editable, and exactly what's in the box is written to notes.txt when you click Run Test or Continue Test. While a test is in progress the box shows the file as it is, with no new entry added.

The Photos tab, next to Notes: Add Photos… attaches one or more image files, and Camera opens a live preview from your computer's webcam with a Snap button to capture and save a photo directly β€” both save into a photos folder alongside the notes. Saved photos are shown as thumbnails; click one to open the full-size image in a new tab.

LiveView

Click LiveView, between the Template control and β–Ά Start in the banner row, to open a full-screen view of the FRF plot β€” useful when the laptop is placed at a distance from the instrument during measurement.

Tip β€” adjusting the threshold on the fly You can change the trigger threshold and hammer/mic time cutoffs directly in the mini-plot headers without opening Template & Settings. Edit the number next to V (threshold) or s (cutoff) and press Enter. The purple dotted threshold line and green cutoff line update in real time.

β­•

Circle Fit

PyScript Β· beta
Open Circle Fit β†’

Circle Fit pins down each mode's natural frequency, damping, and modal constant from an Acquire run's TRF data, using the classical Kennedy–Pancu Nyquist circle-fitting method. See the math behind circle fitting for the full derivation.

Step-by-step workflow

  1. Data Folder β†’ Load Run… Pick a run folder containing a TRF/ subfolder (an Acquire modal/accelerometer run). All node TRFs load automatically.
  2. Select nodes. In the left sidebar, click one or more usable nodes (marked cplx β€” they carry complex Re/Im data). The selected nodes are complex-averaged into a single Reference FRF, shown bold on the FRF plot; every other node is greyed out for context.
  3. Add a candidate band. Enter a Min/Max Hz range around a visible peak and click οΌ‹ Add Band. Add one band per mode you want to fit β€” bands are shaded on the FRF plot.
  4. Fit Modes. Runs the circle fit (with residual compensation across all bands) and fills in the results table: frequency, loss factor Ξ·, Q (=1/Ξ·), |A| modal constant, and a fit-quality percentage (residual RMS as a fraction of the circle's radius β€” green when good, flagged widen band when the peak likely falls outside the chosen band).
  5. Inspect the Nyquist plot. Click a results-table row to see that mode's residual-subtracted data, fitted circle, and resonance point (β˜…) in the Re/Im plane.
  6. View in Modal Analysis. Click the button on any valid row to open Modal Analysis with that run loaded and the frequency slider set to the fitted resonance.

🌊

Modal Analysis

PyScript Β· beta
Open Modal Analysis β†’

Modal Analysis animates a plate's physical deformation at any frequency, built from an Acquire run's per-node complex FRF data and a node stencil (built in Stencil Builder). See the math behind mode-shape reconstruction for how each frame is computed.

Step-by-step workflow

  1. Data Folder β†’ Load Run… Pick a run folder with a TRF/ subfolder. The node sidebar and FRF View tab populate automatically.
  2. Load a stencil. The stencil indicator in the toolbar shows the loaded stencil (if one was saved into the run folder by Acquire); otherwise browse for one β€” stencils are built in Stencil Builder and give each node a physical (x, y) position.
  3. Pick a frequency. In FRF View, click a peak on the reference FRF plot to jump straight to it, or switch to the Mode Shape tab and use the Freq slider/number field directly.
  4. Animate. Click β–Ά Animate to sweep the plate through one full vibration cycle at that frequency. Adjust Amplitude to exaggerate small deflections, and Deform to choose which axis (X/Y/Z) the displacement is drawn along.
  5. 3D / Contour. Toggle between the animated 3-D surface and a static 2-D contour map of the same mode shape. The view cube (3-D mode) snaps the camera to a face or spins it with the arrow buttons.
Tip β€” fit first, then animate Use Circle Fit to precisely locate each mode's natural frequency first, then click View in Modal Analysis on that row β€” it's usually more accurate than eyeballing a peak on the FRF plot directly.

πŸŽ™οΈ

Spectrum Monitor

PyScript Β· beta
Open Spectrum Monitor β†’

Spectrum Monitor is a live, single-channel microphone scope β€” not a measurement tool like Acquire, just a quick way to see what a microphone is picking up: the raw waveform, an averaged magnitude spectrum, and (on a separate tab) a scrolling spectrogram. It starts capturing automatically as soon as the page loads and the browser grants microphone access.

Step-by-step workflow

  1. Grant microphone access. The tool starts capturing immediately on load β€” accept the browser's microphone permission prompt. The status row shows Running once it's live.
  2. Pick the input device. Click the blue Device: … indicator on the right of the status row (same pattern as Acquire) to open a small picker and choose a different input device β€” it takes effect immediately, mid-capture.
  3. Choose Ch 1 or Ch 2. For a stereo input device, the Channel toggle in the left sidebar picks which of the two channels is displayed and analyzed; the averaged spectrum resets whenever you switch channels.
  4. Tune the averaging. Averages (N) sets how many recent snippets the spectrum blends together (in linear power, then converted to dB β€” not a naive dB average); Snippet sets how long each one is (seconds). Shorter snippets update faster but resolve lower frequencies less precisely.
  5. Pause to inspect. ⏸ Pause freezes the current waveform and spectrum so you can zoom and pan with Plotly's controls (the modebar only appears while stopped or paused, to stay out of the way during live updates). β–Ά Resume picks back up β€” the microphone itself never stops, only the display.
  6. Spectrogram tab. Switch to the Spectrogram tab for a scrolling heatmap of the last few seconds on the selected channel, computed with the same STFT function Convolve uses for its spectrograms β€” see the math behind the averaged spectrum for the full derivation.
Settings persist automatically Device, channel, N, and snippet length are saved to this browser immediately as you change them β€” there's no separate save button. Set a Data Folder to also persist them to ObieAppSettings/spectrum.json, so they roam across browsers/machines the same way Acquire's and LiveView's settings do.

πŸ”’

Technical reference β€” signal processing & file formats

Detailed derivations of the H1/H2 estimators, coherence, band averaging, convolution, the acoustic wave equation, mode-shape reconstruction, and Nyquist circle fitting, plus full binary file format specifications: Technical Reference (HTML)  Β·  ObieDocs (original PDF).