Arctan Voice Isolation for voice agents
Project description
Arctan Voice Isolation
Arctan Voice Isolation is a Python SDK for real-time voice isolation in voice agents and audio pipelines.
It supports standard NumPy audio processing and integrations for LiveKit and Pipecat.
Installation
Install the base SDK:
pip install arctan-vi
Install a framework integration:
pip install "arctan-vi[livekit]"
pip install "arctan-vi[pipecat]"
Arctan Voice Isolation 0.8.1 supports CPython 3.10-3.14 on Linux x86-64
(glibc 2.28 or newer) and Windows x86-64. The Pipecat integration requires
Python 3.11 or newer.
SDK key
Set your Arctan SDK key in the runtime environment:
export ARCTAN_SDK_KEY="arc_sk_live_..."
You can instead pass license_key="arc_sk_live_..." to a model, processor, or
framework integration. An explicit license_key takes precedence over
ARCTAN_SDK_KEY.
Standard Python
Process one stream
import numpy as np
import arctan
config = arctan.ProcessorConfig(sample_rate=24_000, num_channels=1)
processor = arctan.Processor(config=config)
try:
audio = np.zeros((config.num_channels, config.num_frames), dtype=np.float32)
enhanced = processor.process(audio)
finally:
processor.close()
Processor.process() accepts finite float32 samples in [-1.0, 1.0], shaped
as channels x frames. It returns a new float32 array with the same shape.
Mono and stereo input are supported. Stereo is returned as dual-mono stereo.
The sample rate must remain stable for the lifetime of a processor. If
num_frames is omitted, the SDK selects the native frame size. An explicit
num_frames must contain a whole number of native processing blocks.
Process concurrent streams
For concurrent streams in one worker, share one Model and create one
ProcessorAsync for each independent stream:
import asyncio
import numpy as np
import arctan
async def main() -> None:
model = arctan.Model()
configs = []
processors = []
try:
for _ in range(2):
config = arctan.ProcessorConfig.optimal(model)
configs.append(config)
processors.append(arctan.ProcessorAsync(model=model, config=config))
frames = [
np.zeros((config.num_channels, config.num_frames), dtype=np.float32)
for config in configs
]
enhanced = await asyncio.gather(
*(
processor.process_async(frame)
for processor, frame in zip(processors, frames)
)
)
print(len(enhanced))
finally:
for processor in processors:
processor.close()
model.close()
asyncio.run(main())
Use exactly one processor per call or audio stream. Keep frames ordered within
each processor. Different processors may execute concurrently, but calls on a
single ProcessorAsync are serialized. Close every processor before closing
its shared model.
LiveKit
Install the LiveKit integration:
pip install "arctan-vi[livekit]"
Pass an Arctan noise canceller to LiveKit audio input options:
from arctan.livekit import arctan_enhancer
from livekit.agents import room_io
await session.start(
agent=Assistant(),
room=ctx.room,
room_options=room_io.RoomOptions(
audio_input=room_io.AudioInputOptions(
noise_cancellation=arctan_enhancer.noise_canceller(),
),
),
)
Pass license_key= to noise_canceller() when the key is not provided through
ARCTAN_SDK_KEY. Create a separate noise-canceller instance for every
participant, call, or independent audio input.
Pipecat
Install the Pipecat integration:
pip install "arctan-vi[pipecat]"
Pass an Arctan audio filter to the transport:
from arctan.pipecat import arctan_enhancer
from pipecat.transports.base_transport import TransportParams
audio_filter = arctan_enhancer.ArctanAudioFilter()
transport_params = TransportParams(
audio_in_enabled=True,
audio_in_filter=audio_filter,
)
The Pipecat integration accepts mono PCM16 input and buffers arbitrary byte
chunks until a complete processing block is available. Create a separate
ArctanAudioFilter for every call or pipeline.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file arctan_vi-0.8.1-cp314-cp314-win_amd64.whl.
File metadata
- Download URL: arctan_vi-0.8.1-cp314-cp314-win_amd64.whl
- Upload date:
- Size: 8.6 MB
- Tags: CPython 3.14, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
16797917abfdf689721fb06d6d3a60b4292845de41138e004ab11de46e1c7aee
|
|
| MD5 |
5253881d065dea202c4bf045c6b1280d
|
|
| BLAKE2b-256 |
083ba437ee4a1e49ef7773bef85b98589632c9b9328798e96fac30993c5a97be
|
File details
Details for the file arctan_vi-0.8.1-cp314-cp314-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: arctan_vi-0.8.1-cp314-cp314-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 10.2 MB
- Tags: CPython 3.14, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0250d4edf8bbd7e1a9cf485f68dad3e8e86fb70bf84dcc14788cbd50839632c2
|
|
| MD5 |
8cc5dd522c4e3e9e01d9f78369800d54
|
|
| BLAKE2b-256 |
ce622d534f1bebbe395005a30245ad65c7bfb3340f362e77a583edc65b213a4d
|
File details
Details for the file arctan_vi-0.8.1-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: arctan_vi-0.8.1-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 8.6 MB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2aacd7de7e3ca625e484cc214431bfa3145157e749facc37dac74a8ebeb1488a
|
|
| MD5 |
2e2ba2b1bf55f2f11d07a492ea8d0e90
|
|
| BLAKE2b-256 |
ea30ad56caa1b34246bacfb0ad36b36ff5f560f2994c5740c8ef97b20d347d58
|
File details
Details for the file arctan_vi-0.8.1-cp313-cp313-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: arctan_vi-0.8.1-cp313-cp313-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 10.2 MB
- Tags: CPython 3.13, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f2800b7825048f9781407ed140fcfb5d12add271b9018c15cddcdb849965baa
|
|
| MD5 |
b51284a09c491fefd1f7f2ae9abe2076
|
|
| BLAKE2b-256 |
c24225617331c2a2228f8ad1fceb538b1550c5bd90eed6777bc98ffd904ec047
|
File details
Details for the file arctan_vi-0.8.1-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: arctan_vi-0.8.1-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 8.6 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f8ae607ca9236b0a2e5c6bf96b4bb0ee0b00764e7eedd1bd6691de9d43ecfa8
|
|
| MD5 |
abc0fe721aff47890ea19cd073e7afb4
|
|
| BLAKE2b-256 |
056a7a797f6f83a10d3dc771cf260842ea65a092df4429cbcf1d83bc2f617cfe
|
File details
Details for the file arctan_vi-0.8.1-cp312-cp312-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: arctan_vi-0.8.1-cp312-cp312-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 10.2 MB
- Tags: CPython 3.12, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
95236d7dc69b0e90b3e2e1810603b3c5585fd0a5dcf059cafab586ea9a07f279
|
|
| MD5 |
f7d3f0b8f0a290ec41dc490b3e7b3139
|
|
| BLAKE2b-256 |
c3cbecc8a2230d186a9bcec2502cad1d6411846dcc99d12b042893cfa46800e6
|
File details
Details for the file arctan_vi-0.8.1-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: arctan_vi-0.8.1-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 8.6 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fea31b500328148433d450a918401a054a4d8e943154d6e7af60d5ac287f8fda
|
|
| MD5 |
e8a7d2fce501f43529a80c330d714103
|
|
| BLAKE2b-256 |
70988199b6b85a0d625634d3f33f5af3910ef87f6b3d4250ec6781bc596056f9
|
File details
Details for the file arctan_vi-0.8.1-cp311-cp311-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: arctan_vi-0.8.1-cp311-cp311-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 10.2 MB
- Tags: CPython 3.11, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d2b369b52ca7cbb7b676cc6da58fb0fb492ef6531eb21c22198f31ab42f145b0
|
|
| MD5 |
472144f3b01be7f34646cfb36e7d6007
|
|
| BLAKE2b-256 |
0f4c507d8fa48e6d1cb277a04d7efda6969f0c37946caada98785c3dc7aca4a6
|
File details
Details for the file arctan_vi-0.8.1-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: arctan_vi-0.8.1-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 8.6 MB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1de568f0db92d57fdfd133da9d6bbff34227bca8980494e547994f03485cfa1d
|
|
| MD5 |
b06447ea34738234b955cab12f9a5a10
|
|
| BLAKE2b-256 |
5776621dfc66325ab01c414d58a57eb0fa2c05aba2fc219c9a49ce4308e17336
|
File details
Details for the file arctan_vi-0.8.1-cp310-cp310-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: arctan_vi-0.8.1-cp310-cp310-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 10.2 MB
- Tags: CPython 3.10, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b0b4bd1ab6f8a1c81d9c326181322817de2a44d61fa883c56d1474458de11db9
|
|
| MD5 |
0a652ba680007c34b32f018bb192d036
|
|
| BLAKE2b-256 |
62ad7a96486e5a0b0b063e991726d7fb1689ea1a1f0b42109b597d35b9b012dd
|