An elegant, client-side audio intelligence platform designed to analyze and visualize call recordings. It processes audio directly in the browser using the Web Audio API for total privacy and zero server overhead.
- 🔒 100% Client-Side Processing: All decoding, analysis, and rendering happen locally in the browser. Your audio never leaves your machine.
- 📅 Interactive Call Timeline: Automatically infers events such as Ringing/Dialing, Call Pickup, Active Talk, Silence/Pauses, On Hold, and Hang Up.
⚠️ Automated Anomaly Detection:- Silence Gaps: Spots extended periods of silence or call holds.
- Noise Bursts: Highlights transient volume spikes against rolling baselines.
-
Clipping: Flags digital audio saturation (amplitude peak
$\ge$ 97%). - Echo Detection (Stereo): Employs normalized cross-correlation between left (caller) and right (receiver) channels to detect speaker bleed/echo lag.
- 📊 Aggregate Analytics & Composition: Displays Total Duration, Talk Time, Silence Time, estimated Signal-to-Noise Ratio (SNR in dB), and channel composition stats.
- 🔍 Detailed Waveform Inspector: Smooth interactive canvas showing separate tracks for Stereo calls with seek-to-click, speed control (0.5x to 2x), volume adjustment, and synchronized playhead tracking.
- HTML5 & Canvas: Structure and high-performance waveform rendering.
- Vanilla CSS: Premium modern dark-theme design with responsive layout grid and custom components.
- Vanilla JavaScript: Pure JS audio analysis engine using the native Web Audio API (
AudioContext,decodeAudioData).
Since Call Analyser is built entirely on standard frontend technologies, there are no compilers or dependencies to install.
Simply double-click the index.html file to open the app directly in your web browser. (Note: Some browsers may restrict loading certain local files due to CORS policies).
Use any simple static server of your choice:
# Using Node.js npx:
npx serve .
# Or using Python:
python -m http.server 8000Then, navigate to http://localhost:3000 (or http://localhost:8000) in your browser.
- Decoding: The file is loaded via
File.arrayBuffer()and decoded into anAudioBufferusingAudioContext.decodeAudioData(). - Frame Analysis: The buffer is divided into frames of 1024 samples. For each frame, Root Mean Square (RMS) energy and Peak amplitude are computed.
- Rolling Averages: A moving average of RMS energy is maintained to dynamically identify noise bursts.
- Normalized Cross-Correlation: For stereo tracks, the engine calculates sliding cross-correlation between left and right channels to pinpoint acoustic echoes and signal bleed.