Skip to main content

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 PyPI

Pipecat 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 from pipecat-ai:
The 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
Don’t commit SDK license keys or .env files to source control.

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 as audio_in_filter:
The transport drives the filter lifecycle — 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.

Compatibility

Requires Pipecat 1.3 or later. Check the Arctan documentation for the latest tested version and release notes.