Community-maintained integration. This service is built and maintained by edbrdi. Pipecat does not test or officially support it. Please report issues and request changes on the source repository. Learn more about community integrations.
Overview
AlkoveFilter is a BaseAudioFilter implementation backed by Focus, the
voice isolation model of Alkove, an open-source
(Apache-2.0) voice SDK. You attach it to a transport’s audio_in_filter, and it
keeps the user’s voice (the closest one, or the voice of a voiceprint) and
removes the other people talking and the background noise, so VAD and your STT
service only hear the user. It runs locally on the CPU with Alkove’s own
inference engine: no API key and no network calls after the model download.
The same package has AlkoveVADAnalyzer,
a VAD that hears only the user when it sits behind this filter.
Source Repository
Code, example and README of the Pipecat plugin
PyPI Package
The
pipecat-alkove package on PyPIInstallation
This is a community-maintained package distributed separately frompipecat-ai:
Prerequisites
- No API key. The models (Focus 1.1 MB, Cue 1.1 MB) download once into the cache and are checked by their sha256.
Configuration
alkove.Voiceprint | list[float] | None
default:"None"
Keep the voice of this print rather than the closest voice. Make it with
alkove.Timbre from 1.5 s or more of the user’s voice.float
default:"1.0"
Mix between the raw microphone (0) and Focus’s output (1).
bool
default:"False"
Bring the kept voice to a steady level.
alkove.Models | None
default:"None"
Models to use.
None loads Focus and Cue once per process, shared by every
session. Pass alkove.Models.load(["focus", "cue"], dir=...) to read them
from your own folder.Usage
Create one filter per call and pass it to your transport asaudio_in_filter:
With a voiceprint
Input Frames
Frame
Toggles the filter at runtime. Disabled, it gives the raw microphone back at
the same delay.
Frame
Changes
strength (0 to 1) or voiceprint (a print, or None) while it runs.Audio Requirements
- Input is 16-bit mono PCM at the transport’s sample rate; the filter works at that rate.
- Focus adds 16 ms of delay: the first calls to
filter()return a little less audio than they get, then about the same size.