ObieWebApp β User Guide
How to use Explore, Convolve, and Acquire to measure, compare, and auralize violin FRFs.
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.
ObieAppSettings/ inside
your Data Folder and are loaded automatically on startup.
Supported file formats
| Extension | Description |
|---|---|
| .avr / .avc | Averaged FRF (real/imaginary columns) β main format for Explore and Convolve |
| .trf / .trv | Transfer-function format β also supported by Explore and Convolve. Files saved by Acquire include coherence and run metadata. |
| .csv | Two-column CSV (frequency, magnitude dB) β quick import for Convolve |
| .mat | MATLAB FRF file (yspec format) β loaded by Explore and Convolve. Coherence is shown automatically when present. |
| .wav | Audio file used as the dry signal in Convolve; also storable as a sound snippet in Explore |
Explore
PyScriptExplore 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:
- Browse β opens a file picker; select one or more FRF files directly. Accepts AvR, AvC, TRF, TRV, CSV, and MAT formats.
- 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.
- Drag & drop β drag files from your desktop onto the plot area.
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
| Control | What it does |
|---|---|
| Y = lin / log | Toggles the Y axis between linear and dB (log) scale. |
| βY | Auto-scales the Y axis to the visible X range β ignores data outside the current frequency window. |
| dB range field | Sets the displayed Y range in dB (e.g. 38 dB). |
| X = log / lin | Toggles the X (frequency) axis between log and linear. |
| Ξ³Β² checkbox | Show or hide coherence traces for all datasets that carry coherence data. |
| Smoothing | Applies fractional-octave smoothing from ΒΌ semitone to one full octave. |
| Normalization | As 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). |
| π¨ Print | Far 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 Claude | 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. |
Dataset list (left panel)
| Button / control | What it does |
|---|---|
| Checkbox | Show 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 swatch | Click to change the line color for that dataset. |
| See All / See None | Show or hide all datasets at once. |
| Reduce | Removes datasets that are currently hidden. |
| Clear All | Removes all loaded datasets. |
| Undo | Restores 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 or an
AvR file into a Group Averages folder created at the root of your Data Folder.
Interpret
Click Interpret to open a reference overlay with two sections:
- Mode labels β the standard Oberlin mode labels (A0, CBR, B1β, B1+, Bridge Hill, etc.) drawn as shaded regions on the current plot. Includes links to violinacoustics.com and euphonics.org.
- Note Harmonics β click any of the 12 chromatic note buttons (G3 β Fβ―4) to overlay blue dotted vertical lines at the fundamental frequency of that note and all of its overtones up to 10,500 Hz. Click the same note again to remove the lines. Useful for checking whether a resonance peak lines up with a specific played note.
Other toolbar buttons
| Button | What it does |
|---|---|
| Settings | Opens Explore Preferences (default Y range, X range, line width, sound snippet WAV, output device). |
| Lists | Shows predefined file lists stored in your Data Folder β useful for quickly loading a curated set of FRFs. |
| Share | Copies a shareable URL (or file list) to the clipboard so a colleague can open the same set of files. |
| Colors | Switches the entire palette (Default, Warm, Cool, High Contrast). |
Convolve
PyScriptConvolve 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
- 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.
- 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.
- (Optional) Pick an output device. Under Settings, choose where playback should go from the Output device dropdown.
- Convolve. Click β‘ Convolve. The button is enabled only once both an FRF and a WAV are loaded.
- 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.
Acquire
PyScriptAcquire 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 averages at completion (see What gets saved below).
Hardware setup
- Connect your USB audio interface (e.g. Focusrite Scarlett 2i2) before opening the page.
- 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.
- 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 Template: in the banner
row β and type a name into the Instrument field at the top of the left column
(it autocompletes against instruments that already exist in your Data Folder). The dialog's
primary button (Use Template / Use Settings /
Update and Use Template) both commits that 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.
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:
- Left column β the Instrument field (above) and a Photos section for attaching images to the instrument (see Session Notes & Photos below).
- Notes tab β shown by default when the dialog opens; a dated entry box for this test (see Session Notes & Photos below).
- Template tab β Input device, Run Settings, Hit Detection (including Node Stencil), Calibration, Audio Capture, and Plot Settings: everything that gets saved into a template file.
| Setting (Template tab) | Notes |
|---|---|
| Input device | Choose 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 threshold | Voltage level (V) that triggers a hit. Lower values catch lighter taps; raise it to ignore ambient noise. |
| Time before / after hit | Pre- and post-trigger capture window in seconds. |
| Hammer / Mic time cutoff | Signal is zeroed after this time (0.001β5 s) β suppresses late reflections. Shown as a green line on the mini plots. |
| Channel 1 (L) / Channel 2 (R) calibration | Converts raw voltage to physical units β N/V for the hammer, Pa/V for the mic (or the equivalent for an accelerometer). 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. |
| Hits per position | Number of good hits to average before the app considers a position complete. |
| Number of positions | Total positions per prefix group (e.g. 12 gives H01βH12). |
| Position prefix | Label 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 channels | Moves 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):
| Fields | Controls |
|---|---|
| FRF X / Y range | Frequency 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 range | Time window (s) and voltage range (V) for the Hammer time plot. |
| Mic X / Y range | Time window (s) and voltage range (V) for the Microphone time plot. |
| FFT X / Y range | Frequency 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 β click its header (or the βΎ/βΈ arrow) to show or hide it; it's expanded by default, and advanced users who don't need the reminders can collapse it out of the way. It's a step-by-step reminder for the full workflow, grouped into two sections:
| Group | Steps |
|---|---|
| Soundcard | Powered on; 48V on; HiZ on for the hammer; selected (in blue) |
| Software | Data 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 next to Notes, 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
- Click π Data Folder and select the folder where results should be saved β Acquire lands in live view immediately (see above).
- Open Template & Settings and name your instrument (see Naming an instrument, above) β this also starts acquisition automatically.
- 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.
- 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.
- 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.
- When all positions are complete, AvR/AvC 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.
- 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.
.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, an .avr (magnitude average) and
.avc (complex average) file are written to the instrument folder root for
each prefix group, named <run> <group>.avr/.avc β e.g. an H,V run
named test2_09 with 12 positions per group produces test2_09 H.avr
/ .avc, test2_09 V.avr / .avc, and a combined
test2_09 HV.avr / .avc across all 24 positions.
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 bottom third 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. Use the plot-toolbar controls to toggle log/linear X axis, rescale Y, adjust the dB range, or choose a color palette. The π Zoom Toolbar button on the right shows or hides Plotly's own zoom/pan/box-select/autoscale/reset/camera controls on this plot.
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.
- 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.
- 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.
- The primary button at the bottom reads Use Template when your settings still match the applied template. Editing any field switches it to Update and Use Template, which saves your changes back into that template as well as applying them. With no template applied, it reads Use Settings and applies your changes to this run only.
- To save the current settings as a brand-new template, click Create New Template.
- Reset Default Templates re-downloads the built-in templates ("HV 24 Obie Rig", "ScratchPad", "Scratchpad Obie 26") without touching your custom ones.
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. There are two ways to edit them, both writing to the same
file:
- Notes in the main toolbar opens a quick modal with the whole notes file as one free-form text box β edit it and click Save Notes.
- The Template & Settings dialog's Notes tab (shown by default) is scoped to the current test: it seeds a new dated, numbered entry (e.g. "(3) 8/31/26 19:54 Test 03") pre-filled with the instrument name, for you to add your own observations to β every prior entry is kept read-only underneath, so nothing you already wrote is ever overwritten.
Both surfaces share the same Photos section: 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. In the standalone Notes modal, use
π Delete Notes & Start Again (with a confirmation prompt) to clear the
notes box and remove notes.txt from disk.
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.
Circle Fit
PyScript Β· betaCircle 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
-
Data Folder β Load Runβ¦ Pick a run folder containing a
TRF/subfolder (an Acquire modal/accelerometer run). All node TRFs load automatically. - 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.
- 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.
- 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).
- 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.
- 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 Β· betaModal 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
-
Data Folder β Load Runβ¦ Pick a run folder with a
TRF/subfolder. The node sidebar and FRF View tab populate automatically. - 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.
- 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.
- 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.
- 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.
Spectrum Monitor
PyScript Β· betaSpectrum 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
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
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).