Skip to main content

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.

The SDK supports:

  • standard Numpy audio processing
  • LiveKit audio input processing
  • Pipecat audio input filtering

An Arctan SDK key is required before audio can be processed.

Model and runtime artifacts are downloaded only after authorization and are verified against authorization-provided SHA-256 digests. The encrypted Eigen bundle is decrypted into caller-zeroable process memory and loaded through the runtime's in-memory ABI; SDK 0.7.1 does not materialize plaintext model files, anonymous file descriptors, or named pipes.

Installation

Install the base SDK:

pip install arctan-vi

Install with framework adapters:

pip install "arctan-vi[livekit]"
pip install "arctan-vi[pipecat]"

The base SDK and LiveKit adapter support Python 3.10+. The Pipecat adapter requires Python 3.11+.

Set your SDK key in the runtime environment:

export ARCTAN_SDK_KEY="arc_sk_live_..."

You can also pass license_key="arc_sk_live_..." directly to the processor or adapter constructors. An explicit license_key takes precedence over ARCTAN_SDK_KEY.

Standard Python

For multiple streams, load one shared Model and create one ordered processor per stream. ProcessorAsync runs blocking native inference off the event loop; calls on one processor remain sequential while different processors can run in parallel.

import asyncio
import numpy as np
import arctan

model = arctan.Model()
config = arctan.ProcessorConfig.optimal(model, num_channels=1)
call_a = arctan.ProcessorAsync(model=model, config=config)
call_b = arctan.ProcessorAsync(
    model=model,
    config=arctan.ProcessorConfig.optimal(model),
)

async def process_calls():
    audio = np.zeros((config.num_channels, config.num_frames), dtype=np.float32)
    enhanced_a, enhanced_b = await asyncio.gather(
        call_a.process_async(audio),
        call_b.process_async(audio),
    )
    return enhanced_a, enhanced_b

try:
    enhanced_a, enhanced_b = asyncio.run(process_calls())
finally:
    call_a.close()
    call_b.close()
    model.close()

Create exactly one processor per audio stream and do not submit frames from the same stream out of order. The number of processors is the number of active streams; it is not a universal host-capacity claim.

The existing single-stream convenience remains supported. It creates and owns a private model internally:

processor = arctan.Processor(
    config=arctan.ProcessorConfig(sample_rate=24000),
)

Processor.process() accepts float32 audio shaped as channels x frames. Samples must be finite and in [-1.0, 1.0]. The output is a new float32 array with the same shape.

Mono and stereo input are supported. Stereo input is downmixed for voice isolation and returned as dual-mono stereo. The sample rate must remain stable for the lifetime of a processor.

If num_frames is omitted, initialization fills it with the native frame size for the selected sample rate. If you set num_frames, it must contain a whole number of native processing blocks.

LiveKit

Install the LiveKit extra:

pip install "arctan-vi[livekit]"

Create an Arctan noise-cancellation processor and pass it 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(),
        ),
    ),
)

You can pass SDK options directly to Arctan:

noise_cancellation = arctan_enhancer.noise_canceller(
    license_key="arc_sk_live_...",
)

LiveKit mono and stereo frames are supported. Stereo frames are downmixed for voice isolation and returned as dual-mono stereo. The sample rate must remain stable, and each input frame must contain a whole number of native processing blocks.

Pipecat

Install the Pipecat extra:

pip install "arctan-vi[pipecat]"

Create an ArctanAudioFilter and pass it as the input audio filter for your 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,
)

ArctanAudioFilter implements Pipecat's BaseAudioFilter. Pipecat calls start(sample_rate), filter(audio), and stop() through the transport lifecycle.

The Pipecat adapter accepts mono PCM16 input. Arbitrary byte chunks are buffered until a complete native processing block is available, so filter() may return b"". FilterEnableFrame can bypass or re-enable processing; toggling clears any incomplete buffered block.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

arctan_vi-0.7.1-cp314-cp314-win_amd64.whl (459.5 kB view details)

Uploaded CPython 3.14Windows x86-64

arctan_vi-0.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_35_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64manylinux: glibc 2.35+ x86-64

arctan_vi-0.7.1-cp314-cp314-macosx_11_0_arm64.whl (513.7 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

arctan_vi-0.7.1-cp313-cp313-win_amd64.whl (451.4 kB view details)

Uploaded CPython 3.13Windows x86-64

arctan_vi-0.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_35_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.35+ x86-64

arctan_vi-0.7.1-cp313-cp313-macosx_11_0_arm64.whl (511.0 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

arctan_vi-0.7.1-cp312-cp312-win_amd64.whl (455.7 kB view details)

Uploaded CPython 3.12Windows x86-64

arctan_vi-0.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_35_x86_64.whl (3.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.35+ x86-64

arctan_vi-0.7.1-cp312-cp312-macosx_11_0_arm64.whl (517.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

arctan_vi-0.7.1-cp311-cp311-win_amd64.whl (467.9 kB view details)

Uploaded CPython 3.11Windows x86-64

arctan_vi-0.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_35_x86_64.whl (3.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.35+ x86-64

arctan_vi-0.7.1-cp311-cp311-macosx_11_0_arm64.whl (522.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

arctan_vi-0.7.1-cp310-cp310-win_amd64.whl (465.1 kB view details)

Uploaded CPython 3.10Windows x86-64

arctan_vi-0.7.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_35_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64manylinux: glibc 2.35+ x86-64

arctan_vi-0.7.1-cp310-cp310-macosx_11_0_arm64.whl (526.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file arctan_vi-0.7.1-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: arctan_vi-0.7.1-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 459.5 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for arctan_vi-0.7.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 8ec4efb7bb45d0a303aa0de61fb17fda7a15be9d1ebb70764619d8e8c5790ca0
MD5 7c887a6a0c4fc4a67d66a95561822e98
BLAKE2b-256 a2047c8f4ac026974d55fc82896d2f8e82d8feeb5e1920518b51145ee598dfd5

See more details on using hashes here.

File details

Details for the file arctan_vi-0.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for arctan_vi-0.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 75e79dc9707f3213e4428c251af057227ee893716bf77b376f6f2deb3d7d7481
MD5 3dbd2a7f7eeaacfbe1ff52224495c01c
BLAKE2b-256 fab35330664dc0572f2ee2e5181483273d1235878480b3e21b876a6c054cc179

See more details on using hashes here.

File details

Details for the file arctan_vi-0.7.1-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for arctan_vi-0.7.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ddb0abb123110e61b09ed68a56c3fe7159ecaa9967115fae52a4e8be61995e85
MD5 2179e6633830c4cecad5d6ded4cc3a78
BLAKE2b-256 07ef95bf7eba914e9ae71d0cc81b089a52241a92727fa0b0d69ba709b2de9111

See more details on using hashes here.

File details

Details for the file arctan_vi-0.7.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: arctan_vi-0.7.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 451.4 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for arctan_vi-0.7.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 46339df7c1a49a4f3be34d85d98fda263a5105ff390bc7f930fc972bd12a3a14
MD5 e25f6249f2bf886b09fe981058010097
BLAKE2b-256 94607bfc708421ee0d8336ab2afbd4dc54fd3ed0455727b938ad5162136303f2

See more details on using hashes here.

File details

Details for the file arctan_vi-0.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for arctan_vi-0.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 697bebfeab85420cb94b13f9bd721f6b39a319f96468920f587c4e1fca15fe8d
MD5 8e74d2a9e344ea138c013b5f24127a74
BLAKE2b-256 f012a8999f2c665cc83679938c4ca0f356573fbfa5a2d9e019675b0cb82bc95d

See more details on using hashes here.

File details

Details for the file arctan_vi-0.7.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for arctan_vi-0.7.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 364ecfcb99b318843d30a3b7ec510015abe40d811caf249c90af465a6c5aa7f5
MD5 b005f4dcebf85d5693cfc827db5fea3e
BLAKE2b-256 bc68b6701ef1ea4c3389fd520212486bd8cdb38e22536779acb6468d6e076fda

See more details on using hashes here.

File details

Details for the file arctan_vi-0.7.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: arctan_vi-0.7.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 455.7 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for arctan_vi-0.7.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 2ac6fb6b8068a465a91812b3eff065f96ca84c2b6eb23fcd4e2754f7b93da82a
MD5 651791fb7e5374636526959e6b24ad88
BLAKE2b-256 ebf04f608a95afed7047636c82c7179e7573e9d6283319d3c43bf67f095d305d

See more details on using hashes here.

File details

Details for the file arctan_vi-0.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for arctan_vi-0.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 339011e6c297c46a99a30c2327aff653489593f6b614120269bfc17d1f169576
MD5 72c61ed25e8323825f461b8b673c7ec4
BLAKE2b-256 da31350d4be1f3fc8ae144819594c745e2918cbde5a883e66c69e6fd23911540

See more details on using hashes here.

File details

Details for the file arctan_vi-0.7.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for arctan_vi-0.7.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1d73e3f7bea217059ba2c687531d723e1afa51da5339e494eeead4906b198c21
MD5 e3f52d9ab55906bc839690bdc198951f
BLAKE2b-256 5a2e74edca4f5a9677f577353997ce02a9e3f55a82c7d6c70b2db370b906c93d

See more details on using hashes here.

File details

Details for the file arctan_vi-0.7.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: arctan_vi-0.7.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 467.9 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for arctan_vi-0.7.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 8ee0bb2073e3871bd315cbfcb2afee2c57ba8eacdb3ee1a98a63ff97d4cdf54e
MD5 3022ad4b572d6537f56a8480e12eaa9e
BLAKE2b-256 72de8592bb77b8d35046bf81811523939359a38c0cb12d2e95ecc6c0d19e29b0

See more details on using hashes here.

File details

Details for the file arctan_vi-0.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for arctan_vi-0.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 ff85c378603e5b7d2241ac6ab0358469df93f15313b5d0deb190e659ffd42006
MD5 6d48d7b29265cfa0570b8d4bdb973c96
BLAKE2b-256 ef09b9355b11def2bfafe7ecf3fda2877df47dc4bb336009186b8bf00ea0f91a

See more details on using hashes here.

File details

Details for the file arctan_vi-0.7.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for arctan_vi-0.7.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f6e52042a32bd0a5c4d64a78d1c79eb9b8edb73e19502a6b2ee0a027a55bfedb
MD5 763941643c11cdaaafc752747d6cca75
BLAKE2b-256 cd09848b6fe01d910fe7b55ab04777fb85e1014cdcff3617b69bdc5f75325d44

See more details on using hashes here.

File details

Details for the file arctan_vi-0.7.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: arctan_vi-0.7.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 465.1 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for arctan_vi-0.7.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 61d375acf4e6109fe60ffbce0b5b957afc214a9c991a008273dc0c59fc18063a
MD5 6d4fc1a3bcc880054656d3f1ad0666ce
BLAKE2b-256 9d9ec632dc4174f02d21995f13c5bc4bbbae56e0278960ce20fb302be4dfe0a2

See more details on using hashes here.

File details

Details for the file arctan_vi-0.7.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for arctan_vi-0.7.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 4c5be06e7964b6d92190589e90fad01d38100939195ada7d468c5d48745f3cd9
MD5 233d91e6cd2ad3180badd1ad5a699061
BLAKE2b-256 e53301ed90f5c4b6bc20355ebefb1665867829d900981ea058d3ed508b1c0133

See more details on using hashes here.

File details

Details for the file arctan_vi-0.7.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for arctan_vi-0.7.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 586d9ab6635e0b68c10b701515a4871d59ca529ab482bc44daa1b4d616854a68
MD5 72d06d4e76c58aec882b75d7bde839c9
BLAKE2b-256 147527e298b7ac77f2c0146f00141c124e26df86074f686447e6462baa71a00a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page