Recorder-Core Library
A comprehensive JavaScript library for audio recording, processing, encoding, and visualization.
Core Features
- High-Quality Recording: Supports PCM (48kHz/32-bit) via MediaRecorder with WebM format extraction. Recommended to keep
ConnectEnableWebMenabled for better quality. - Audio Worklet Support: Modern audio processing using AudioWorkletNode, falling back gracefully to ScriptProcessor for compatibility.
- Real-time Processing: Convert PCM data on-the-fly (resampling, filtering, encoding).
- Visualizations: Waveforms, frequency histograms, and real-time playback visualizers.
- Audio Effects: Pitch shifting, speed control, volume adjustment via Sonic engine.
- DTMF Handling: Decode/Encode DTMF signals for telephony applications.
Static Properties & Methods
Recorder.ConnectEnableWorklet
Type: Boolean (Default: false)
Enables AudioWorkletNode for audio connection. If enabled and valid, it overrides the default ScriptProcessor fallback. Note potential performance issues on mobile devices due to high callback frequency.
Recorder.SampleData(pcmDatas, pcmSampleRate, newSampleRate, prevChunkInfo, option)
Converts PCM sample rates (downsampling only).
- Parameters:
pcmDatas: Array of Int16 arrays ([[Int16,...]]).pcmSampleRate: Source rate (e.g., 48000).newSampleRate: Target rate.prevChunkInfo: Optional object to resume processing from a previous offset{index, offset}.- Returns:
ChunkInfocontaining processed data and next chunk info for continuous conversion.
Recorder.IIRFilter(useLowPass, sampleRate, freq)
Configures IIR low-pass or high-pass filtering. Returns a function to process PCM samples sequentially.
- Parameters:
useLowPass:true(low-pass) orfalse(high-pass).sampleRate: Input PCM sample rate.freq: Cutoff frequency in Hz.
Recorder.PowerLevel(pcmAbsSum, pcmLength)
Calculates volume percentage (0-100), not dBFS.
Recorder.PowerDBFS(maxSample)
Calculates peak volume in dBFS (-100 to 0).
Extensions (Plugins)
> Note: Plugins are located in /src/extensions and must be explicitly imported. They do not merge into the main build.
WaveView Plugin (waveview.js)
Real-time waveform visualization during recording via onProcess callback.
- Constructor:
Recorder.WaveView(set) elem: CSS selector or canvas object.scale: Scaling factor (default 2) for mobile clarity.linear1,linear2: Gradient color configurations.
WaveSurferView Plugin (wavesurfer.view.js)
Advanced waveform drawing using PCM sample values directly, resembling Audition waveforms. Compatible with non-H5 environments via canvas fallbacks.
- Constructor:
Recorder.WaveSurferView(set) - Similar configuration to WaveView but optimized for precise amplitude mapping.
FrequencyHistogramView Plugin (frequency.histogram.view.js)
Frequency spectrum visualization using FFT algorithms (requires lib.fft.js). Optimized for voice frequencies (0-5kHz).
- Constructor:
Recorder.FrequencyHistogramView(set) - Configurable bar count, width ratio, and color gradients.
BufferStreamPlayer Plugin (buffer_stream.player.js)
Real-time playback of audio fragments converted to MediaStream. Supports PCM, WAV, MP3 input with optional decoding/fading.
- Methods:
input(data),pause(),resume(),stop() - Use Cases:
- Real-time WebRTC local stream generation.
- Playback of WebSocket/RTMP received audio chunks.
ASRAliyunShort Plugin (asr.aliyun.short.js)
Real-time speech-to-text using Alibaba Cloud API via WebSocket. Supports continuous recognition with automatic chunk stitching for long durations (>60s).
- Configuration: Requires
tokenApi, language model settings, and optional custom request handlers.
Sonic Plugin (sonic.js)
Audio transformation engine (pitch shift, speed change, volume control) ported from Java. Supports synchronous or asynchronous WebWorker processing.
- Methods:
.setPitch(),.setSpeed(),.input(buffer)
NMN2PCM Plugin (create-audio.nmn2pcm.js)
Generates test audio files using sine/square/triangle waves based on simplified musical notation text.
DTMF Plugin (dtmf.decode.js / dtmf.encode.js)
- Decode: Extracts phone keypad signals from PCM streams (requires
lib.fft.js). - Encode: Generates DTMF tones for softphone integration.
Audio Format Encoders
Located in /src/engine. All support real-time encoding except WebM and AMR/NB specific constraints.
PCM & WAV
- PCM: Raw 16-bit LE data. Mergeable by binary concatenation.
- WAV: Adds standard 44-byte header to PCM blobs.
MP3 (CBR)
Uses lamejs library. Supports real-time encoding with configurable bitrate/frame size handling for seamless stitching.
G.711 (A-law/μ-law)
Compresses arbitrary sample rates to 8000Hz, 8-bit streams (g711aencode, g711udecode).
OGG/Vorbis & AMR/NB
- OGG: High compression ratio using
ogg-vorbis-encoder-js. - AMR: Narrowband (12.8kbps) for small file sizes, supports real-time encoding/decoding via
Recorder.AMR.GetEncoder().
Beta WebM
Experimental encoder relying on browser-native MediaRecorder limitations; not recommended for production due to latency in older browsers.
Internationalization (i18n)
Built-in support for multiple languages including English, Spanish, French. Language files generated via /src/package-i18n.js.
- Switch:
Recorder.i18n.lang = "en-US" - Usage:
$T("key", [args])retrieves localized strings with parameter substitution.