Skip to main content

VoiceSign

The first open-source voice signature tool for individuals.

Powered by Oravys Inc. License Python

VoiceSign lets you embed an inaudible cryptographic watermark into any voice recording, binding it to your identity. Later, anyone can verify that a recording was signed by you. The watermark survives common audio transformations and is imperceptible to the human ear (target SNR: 42-46 dB).

Created by Eliot Cohen Bacrie, Founder and CEO of Oravys Inc.

Web version available at voicesign.eu


Why VoiceSign?

In a world of voice cloning and audio deepfakes, proving that a voice recording is genuinely yours matters. VoiceSign gives individuals a simple, free tool to:

  • Sign your voice memos, podcasts, or recordings with your identity
  • Verify that a recording was signed by a specific person
  • Prove provenance of your original audio content
  • Protect yourself against voice impersonation and unauthorized use

Install

pip install voicesign

Dependencies: numpy. For non-WAV audio formats (MP3, FLAC, M4A), you also need ffmpeg installed on your system.


Quick Start

Python API

import voicesign

# Read your audio file
with open("my_recording.wav", "rb") as f:
    audio = f.read()

# Sign it with your identity
signed = voicesign.sign(audio, identity="Alice Johnson", salt="my-secret-salt")

# Save the signed version
with open("signed_recording.wav", "wb") as f:
    f.write(signed)

# Later, verify it
with open("signed_recording.wav", "rb") as f:
    audio = f.read()

result = voicesign.verify(audio, identity="Alice Johnson", salt="my-secret-salt")

print(result["detected"])     # True
print(result["confidence"])   # 0.95 (95% confidence)
print(result["correlation"])  # 0.87

Command Line

# Sign a recording
voicesign sign -i "Alice Johnson" -s "my-secret" recording.wav

# Output: recording_signed.wav

# Verify a recording
voicesign verify -i "Alice Johnson" -s "my-secret" recording_signed.wav

# Output: MATCH - Voice signature detected for: Alice Johnson
#         Confidence: 95.23%

Custom output path

voicesign sign -i "Alice Johnson" -s "my-secret" -o output.wav input.wav

Non-WAV formats (requires ffmpeg)

voicesign sign -i "Alice Johnson" podcast.mp3
voicesign verify -i "Alice Johnson" podcast_signed.wav

How It Works

VoiceSign uses spread-spectrum audio watermarking in the frequency domain:

  1. Seed derivation - A SHA-256 hash of your salt + identity produces a deterministic seed.
  2. PN sequence generation - A pseudo-random noise (PN) sequence of +1/-1 values is generated from the seed.
  3. Frequency-domain embedding - The audio is split into 100ms segments. For each segment, the PN sequence is added to the real part of the FFT coefficients in the 2-6 kHz band at low amplitude.
  4. Detection - Pearson correlation between the expected PN sequence and the actual frequency coefficients. High correlation = signature present.

The watermark is:

  • Inaudible - Embedded at ~42-46 dB SNR, below human perception
  • Robust - Survives format conversion, mild compression, and noise
  • Deterministic - Same identity + salt always produces the same watermark
  • Lightweight - Pure numpy, no ML models, runs instantly on any machine

API Reference

voicesign.sign(audio_bytes, identity, salt=None, file_format="wav")

Embed an identity watermark into audio.

Parameter Type Description
audio_bytes bytes Raw audio file content
identity str Identity string to bind (name, email, etc.)
salt str or None Secret salt for watermark generation
file_format str Input format: wav, mp3, flac, m4a

Returns: bytes - Watermarked audio as 16-bit mono WAV.

voicesign.verify(audio_bytes, identity, salt=None, file_format="wav")

Check whether audio contains a watermark for a given identity.

Parameter Type Description
audio_bytes bytes Raw audio file content
identity str Identity string to check against
salt str or None Must match the salt used during signing
file_format str Input format: wav, mp3, flac, m4a

Returns: dict with keys:

  • detected (bool) - Whether a matching watermark was found
  • confidence (float) - Confidence score between 0 and 1
  • correlation (float) - Raw Pearson correlation value
  • identity_match (str) - The identity string tested

Security Notes

  • Salt matters. Anyone who knows your salt and identity can forge your watermark. Keep your salt private.
  • Not tamper-proof. A determined adversary who knows the algorithm and your salt can remove or overwrite the watermark. VoiceSign provides provenance, not DRM.
  • Use unique salts. Different salts for different contexts (personal, professional, etc.) prevent cross-context tracking.

Attribution

VoiceSign is created by Eliot Cohen Bacrie and powered by Oravys Inc.

If you use VoiceSign in your project, please include attribution:

Powered by Oravys Inc., created by Eliot Cohen Bacrie

See the NOTICE file for full attribution requirements.


Web Version

For a no-install experience, use the web version at:

voicesign.eu


License

Apache 2.0 with attribution requirements. See LICENSE and NOTICE.

Copyright 2024-2026 Oravys Inc.


Powered by Oravys Inc. - Voice Intelligence

Release files for voicesign 0.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for voicesign 0.3.1
File Size Uploaded
voicesign-0.3.1.tar.gz 25.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for voicesign 0.3.1
File Interpreter ABI Platform
voicesign-0.3.1-py3-none-any.whl Python 3 none any Details

Total release size: 51.1 kB

Release files / voicesign-0.3.1.tar.gz

Download URL voicesign-0.3.1.tar.gz
Size 25.2 kB
Tags Source
SHA-256 checksum
How to use checksums
04f46a07eb70d27365f140c357ebf9d70916fde830156b28a80751a5cfcc6809
BLAKE2b-256 checksum
How to use checksums
c95e193a35897bfec15402906f955d62a73350ab49de737c8cd7e64bbd9f681d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.7

Release files / voicesign-0.3.1-py3-none-any.whl

Download URL voicesign-0.3.1-py3-none-any.whl
Size 26.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a4fc41a46cded68dc420a1671092adefbb9c9876ae5e1a80e7d93e58cef85dc4
BLAKE2b-256 checksum
How to use checksums
d88968d84cd7bb0cfd334b185088b3a4773699beb9b1cfa44033ec265b43b9fc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.7

Release history Release notifications | RSS feed

This release

0.3.1 This release

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page