📟

Oscilloscope Tool

Virtual dual-channel oscilloscope with time/div + volts/div controls, trigger settings (rising / falling / auto / normal / single), XY Lissajous mode for phase comparison, and click-to-place measurement cursors. Audio input from your microphone (stereo if your mic supports it).

100% browser-based — your microphone audio never leaves your device.
⏸ FROZEN
Click on the screen to place cursors (Off / Δt / Δv / Both).
CH1 peak-to-peak
CH1 RMS
CH2 peak-to-peak
CH2 RMS
Est. frequency
Sample rate

Vertical (channels)

Mono microphones drive both channels with the same signal — XY mode then shows a straight diagonal.

Horizontal & Trigger

Click on the scope screen to place the nearest cursor. Two cursors per axis cycle on each click.

About Oscilloscopes & the XY Mode

An oscilloscope shows electrical signals (here: audio samples) plotted against time, with controllable horizontal and vertical scaling. The two cornerstone controls are time/div (seconds per horizontal division — sets how much time fits on the screen) and volts/div (amplitude units per vertical division — sets how loud you can see before the trace runs off the top). The standard grid is 10 horizontal × 8 vertical divisions (so a screen at 2 ms/div + 0.5 V/div spans 20 ms wide and ±2 V tall).

Triggering — why your sine wave stops scrolling

Without a trigger, each new frame starts at an arbitrary point in the signal so a steady tone appears to "scroll" sideways. The trigger locks the display to a specific signal event:

  • Rising / Falling edge — capture starts when the signal crosses your trigger level in the chosen direction
  • Auto — try to trigger; if no trigger found within a frame, free-run anyway. The display always updates, but a repetitive signal may scroll if no trigger ever fires.
  • Normal — only update the display when the trigger fires. If the signal stops, the display freezes on the last triggered frame.
  • Single — like Normal but freezes after one trigger; press the Single button again to re-arm.

Volts / div and the "V" here

This is an audio oscilloscope. The "voltage" axis really shows normalized digital sample value (−1.0 to +1.0 from your audio API). For a real-world voltage measurement you'd need a calibrated audio interface with known gain. The V/div control still functions correctly — it sets how many sample-value units one division of the screen represents. 1.0 V/div with 4 divisions vertical capacity = full-scale visible.

XY mode (Lissajous figures)

XY mode plots CH1 on the horizontal axis instead of time, and CH2 on the vertical axis. The shape that emerges is a Lissajous figure — a beautiful visual map of the phase and frequency relationship between the two signals. Examples:

  • Same frequency, in phase — 45° straight line through origin (top-right to bottom-left)
  • Same frequency, 90° phase shift — circle
  • Same frequency, 180° (anti-phase) — 45° straight line in the other direction
  • Different frequencies — closed loops; the number of "lobes" along each axis reveals the integer frequency ratio (3:2 ratio = 3 lobes wide / 2 tall, etc.)
  • Random or unrelated — fuzzy noise; no Lissajous pattern

XY mode is the classic way audio engineers check stereo phase: a healthy stereo mix forms a tall vertical ellipse, a mono signal collapses to a 45° line, a phase-inverted signal becomes a horizontal line.

Cursors and measurements

The cursor system places two vertical lines (X1, X2) and/or two horizontal lines (Y1, Y2) on the screen. The tool reads out the delta-time (Δt) between the X cursors and the delta-voltage (Δv) between the Y cursors — letting you measure period (place X cursors on consecutive peaks), pulse width, amplitude, overshoot, etc. Click anywhere on the screen to place the nearest unset cursor; subsequent clicks cycle through the four cursors.

Frequently Asked Questions

How is this different from the Waveform Visualizer?
The Waveform Visualizer is a friendly single-channel viewer with file-mode and basic trigger. This Oscilloscope is the instrument-style version: two channels overlaid, XY Lissajous mode for phase analysis, time/div + volts/div + cursor system + Normal/Single trigger modes, all matching what you'd find on a Tektronix or Rigol scope. Use the visualizer for casual viewing; use this for measurement and stereo-phase work.
Why are CH1 and CH2 showing the same signal?
Your microphone is mono. Most laptop built-in mics and USB headsets are single-channel. The audio API up-mixes mono input to stereo by duplicating the signal — so both CH1 and CH2 see the same data, and the XY plot collapses to a 45° diagonal line. To get two truly independent channels you need a stereo audio interface or a USB input where left and right carry different signals (a stereo line-in cable from another device, for instance).
Why is the trigger not catching anything?
Three common reasons. (1) The trigger source is the wrong channel — check Trigger Source = CH1 or CH2 to match the channel that has signal. (2) The trigger level is set higher than your signal's peak — lower it toward 0 or set it to where you can see the signal actually crosses. (3) Trigger Slope is rising but your signal only crosses your level going down (or vice versa). Switch slope or set trigger mode to Auto so the display keeps refreshing even without a valid trigger.
What's a Lissajous figure?
A Lissajous figure is the closed curve traced when one sinusoidal signal drives the X axis and another drives the Y axis. For two signals at the same frequency, the shape depends on their phase difference: 0° = diagonal line, 90° = circle, 45° = ellipse, 180° = opposite-direction diagonal. For different frequencies the figure is a closed loop with a number of lobes equal to the frequency ratio (a:b frequency ratio gives a lobes along Y, b lobes along X). Named after Jules Antoine Lissajous (1857). Stereo audio mixing engineers use Lissajous patterns as a phase-coherence check.
How accurate is the frequency estimate?
The on-screen frequency estimate uses the trigger-period method: the time between consecutive trigger events (or between zero-crossings in Auto mode) gives the signal period; reciprocal = frequency. Accuracy is roughly ±1 sample period (~21 µs at 48 kHz), giving fractional accuracy that improves at lower frequencies (e.g., ±0.04% at 1 kHz). For complex multi-tone signals this method picks the lowest dominant frequency. Use the dedicated Pitch Detector or Frequency Detector tools for autocorrelation-grade pitch tracking.
Can I use cursors in XY mode?
In XY mode the X axis is CH1 voltage (not time), so the "Δt" cursors become "ΔX-voltage" (CH1 amplitude difference). The Y cursors still read voltage (CH2 amplitude difference). The Δt readout reflects the CH1 voltage difference instead — the tool's cursor labels stay the same so the math is consistent, just interpret accordingly. Useful for measuring Lissajous ellipse axes.
Why is "voltage" in quotes?
The Web Audio API returns audio samples as floats in the range [−1.0, +1.0] representing normalized digital amplitude — not real volts. A microphone with low gain reading speech might give samples around ±0.05; the same speech with high gain might give ±0.5. The "V/div" control still scales the display correctly relative to those normalized units, so all measurements (Δv, peak-to-peak, RMS) are valid relative numbers, just not calibrated to physical voltage. To get real volts you'd need a known audio interface gain and a hardware preamp calibration.