Overview
ArctanAudioFilter is a BaseAudioFilter implementation backed by
Arctan Eigen, a low-latency speech enhancer and
noise canceller tuned for ASR/STT accuracy. You attach it to a transport’s
audio_in_filter, and it cleans up incoming user audio — reducing background
noise, side-talk, and other degradation — before the audio reaches VAD and your
STT service.
Arctan Eigen Docs
SDK documentation, API reference, and troubleshooting
PyPI Package
The
arctan-vi package on PyPIPipecat Integration Guide
Arctan’s own guide to the Pipecat integration
Request Access
Request an SDK license key from Arctan
Installation
This is a community-maintained package distributed separately frompipecat-ai:
pipecat extra installs the Arctan SDK along with the Pipecat integration.
Requires Python >= 3.11.
Prerequisites
- SDK license key: Arctan requires a license key. Request access at arctan.ai/eigen.
- Network access: the agent process must be able to reach Arctan’s servers to validate the license key.
Required Environment Variables
ARCTAN_SDK_KEY: your Arctan SDK license key
Configuration
str | None
default:"None"
Arctan SDK license key. Falls back to the
ARCTAN_SDK_KEY environment
variable if not provided. When set, this value takes precedence over the
environment variable.Usage
Create one filter instance and pass it to your transport asaudio_in_filter:
start(sample_rate),
filter(audio), process_frame(frame), and stop() — so no additional wiring
is needed.
Passing the license key explicitly
With a specific transport
The filter works with any Pipecat transport that supports input audio filters:Input Frames
Frame
Control frame to toggle enhancement on and off at runtime
Audio Requirements
The Arctan filter does not resample audio. Configure your input transport to deliver PCM16 at a single, stable sample rate.- Input must be signed 16-bit PCM (int16) bytes.
- The sample rate must be positive and must not change after the filter starts.
- Each chunk passed to
filter()must contain complete int16 samples; incomplete samples raise an error. - Any chunk size is accepted — the filter buffers partial data internally.