Skip to main content

Python bindings for the dss-codec Rust decoder

Project description

pydsscodec

Python bindings for the Rust dss-codec decoder.

pydsscodec decodes Olympus DSS and DS2 audio directly in Python through a native Rust extension. It mirrors the core dss-codec model: top-level decode and decrypt functions plus streaming decoders.

Features

  • Decode DSS and DS2 files from paths or bytes
  • Normalize encrypted DS2 input back to plain container bytes
  • Stream decode in chunks without forcing a whole-file convenience path
  • Load native Rust code in-process instead of shelling out to a CLI
  • In our benchmark, achieved roughly 150x faster DSS decoding and 50x faster streamed DS2 decoding than the reference Python decoders

Installation

pip install pydsscodec

If a prebuilt wheel is not available for your platform, installation will build the Rust extension locally.

Prebuilt wheels are currently published for:

  • Linux x86_64
  • macOS arm64
  • Windows x86_64

Other platforms install from source and require a local Rust toolchain.

Usage

Decode a file:

from pydsscodec import decode_file

audio = decode_file("recording.ds2")
print(audio.format, audio.sample_rate, audio.native_rate, audio.duration_seconds)
print(audio.sample_count)

Decode in-memory bytes:

from pydsscodec import decode_bytes

audio = decode_bytes(data)

Decrypt encrypted DS2 input to plain container bytes:

from pydsscodec import decrypt_file

plain_ds2 = decrypt_file("encrypted.ds2", password="secret")

Stream decode in chunks:

from pydsscodec import DecryptingDecoderStreamer

decoder = DecryptingDecoderStreamer(password="secret")

with open("recording.ds2", "rb") as handle:
    while chunk := handle.read(4096):
        chunk_samples = decoder.push(chunk)
        # process chunk_samples here

final_samples = decoder.finish()

print(decoder.format(), decoder.native_rate(), len(final_samples))

Detect the container format without decoding:

from pydsscodec import detect_format

fmt = detect_format(data)
print(fmt)  # "dss_sp", "ds2_sp", or "ds2_qp"

API

Top-level functions:

  • decode_file(path, password=None) -> DecodedAudio
  • decode_bytes(data, password=None) -> DecodedAudio
  • decrypt_file(path, password=None) -> bytes
  • decrypt_bytes(data, password=None) -> bytes
  • detect_format(data) -> str | None

Streamer classes:

  • StreamingDecoder()
  • DecryptStreamer(password=None)
  • DecryptingDecoderStreamer(password=None)

Streamer methods mirror the Rust API:

  • push(data)
  • finish()
  • format()
  • native_rate()

Bulk decode returns a DecodedAudio object with:

  • samples: decoded mono samples as list[float]
  • sample_rate: sample rate of the returned samples
  • native_rate: original sample rate of the source codec
  • format: one of "dss_sp", "ds2_sp", or "ds2_qp"
  • sample_count
  • duration_seconds

Notes

  • The streaming classes are the preferred scalable interface for large inputs.
  • Bulk decode returns samples as a Python list.

Project details


Download files

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

Source Distribution

pydsscodec-0.1.4.tar.gz (112.1 kB view details)

Uploaded Source

Built Distributions

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

pydsscodec-0.1.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (379.0 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

pydsscodec-0.1.4-cp39-abi3-macosx_11_0_arm64.whl (330.0 kB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

File details

Details for the file pydsscodec-0.1.4.tar.gz.

File metadata

  • Download URL: pydsscodec-0.1.4.tar.gz
  • Upload date:
  • Size: 112.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pydsscodec-0.1.4.tar.gz
Algorithm Hash digest
SHA256 06e86324899adefed42c1f905bdf1e21bf6b538367c13bdddc8f4e66c692f060
MD5 55e136920fbcfd2025b1c8c4fd502f59
BLAKE2b-256 3e124e8ccd265f5853da8dcd473747faad8f8568253680c291701f80f88ab365

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydsscodec-0.1.4.tar.gz:

Publisher: release.yaml on gaspardpetit/pydsscodec

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pydsscodec-0.1.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pydsscodec-0.1.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 779e8140da430a568d9c189f613d3c844d355743768495a09c55f8e6eeafe82e
MD5 d67244422775c934ba32854c35218e42
BLAKE2b-256 d1ef18fd69157253578050a3e067adae50227d2039e460a08f5f6f9b0a919819

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydsscodec-0.1.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yaml on gaspardpetit/pydsscodec

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pydsscodec-0.1.4-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pydsscodec-0.1.4-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1b1b7c3350453681805dfbd015fe6790234a96d0ae549b45aa094fb93fd6ab4c
MD5 1bd0128fea41feea82613260ffcf5f20
BLAKE2b-256 0ab74311eef53129836a1ec78835cbbd23f04fcb9fe36e26c775b02aae3447c1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydsscodec-0.1.4-cp39-abi3-macosx_11_0_arm64.whl:

Publisher: release.yaml on gaspardpetit/pydsscodec

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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