🎻

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, 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.

Supported file formats

ExtensionDescription
.avr / .avcAveraged FRF (real/imaginary columns) β€” main format for Explore and Convolve
.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, 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 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:

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 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 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.

Leaving Instrument blank The dialog won't let you apply settings with a blank Instrument name β€” it asks you to enter one first. 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 tab)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.
Channel 1 (L) / Channel 2 (R) calibrationConverts 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 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 β€” 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:

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 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

  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.
  6. 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.
  7. 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, 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.

  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 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.
  4. To save the current settings as a brand-new template, click Create New Template.
  5. 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 and Use Template" 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. There are two ways to edit them, both writing to the same file:

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.

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).