odin-voice
Python bindings for the 4Players ODIN Voice SDK - a cross-platform solution for integrating real-time voice chat into your applications.
What is ODIN?
ODIN is a cross-platform SDK that integrates real-time voice chat into multiplayer games, applications and websites. It supports both managed cloud hosting through 4Players and self-hosted deployments, giving developers flexibility in their deployment strategy.
Key Features
- Real-Time Voice Chat - Low-latency audio transmission with Opus codec compression and automatic sample rate conversion
- Audio Processing - Voice Activity Detection (VAD), echo cancellation, noise suppression, automatic gain control and DeepFilterNet based voice isolation
- Channels & Proximity Chat - Up to 64 logical channels per room with per-channel 3D positions; the server only forwards what a peer wants to hear and what is in range
- End-to-End Encryption - Secure voice communication with customizable room passwords
- Sockets - Reliable and unreliable data channels between peers, alongside the voice stream
- Connection Pooling - Efficient multi-room management for complex applications
- Flexible Pipeline - Extensible audio pipeline architecture supporting custom effects
Installation
pip install odin-voice
Quick Start
import asyncio
import json
import time
from odin_voice import (
OdinConnectionPool,
OdinTokenGenerator,
OdinEncoder,
OdinDecoder,
OdinAudioEncoderConfig,
OdinAudioDecoderConfig,
)
async def main():
# Generate a token (in production, do this server-side)
generator = OdinTokenGenerator.from_access_key("your-access-key")
nbf = int(time.time())
token = generator.sign(json.dumps({
"rid": "my-room",
"uid": "user-123",
"aud": "gateway",
"nbf": nbf,
"exp": nbf + 300,
}))
async with OdinConnectionPool() as pool:
room = pool.join_room(
gateway="gateway.odin.4players.io",
token=token,
user_data={"name": "user-123"},
)
# Wait for the join to complete
own_peer_id, room_id, customer = await room.joined()
print(f"Joined {room_id} as peer {own_peer_id}")
# Encoder for outgoing audio; the room stamps our peer id into each datagram
encoder = OdinEncoder(OdinAudioEncoderConfig(sample_rate=48000))
# One decoder per remote peer
decoders: dict[int, OdinDecoder] = {}
async def handle_events():
async for rpc in room.rpcs():
match rpc:
case {"PeerJoined": {"peer_id": peer_id}}:
decoders[peer_id] = OdinDecoder(OdinAudioDecoderConfig(sample_rate=48000))
case {"PeerLeft": {"peer_id": peer_id}}:
decoders.pop(peer_id, None)
case _:
print(f"Event: {rpc}")
async def handle_audio():
async for datagram in room.datagrams():
if decoder := decoders.get(datagram.peer_id):
decoder.push(datagram.data)
samples, is_silent = decoder.pop(960) # 20ms at 48kHz mono
# Process samples...
await asyncio.gather(handle_events(), handle_audio())
asyncio.run(main())
Events arrive as dicts with the event name as their only key: Joined, Left, PeerJoined, PeerLeft, PeerChanged, MessageReceived, NewReconnectToken, Error, plus a locally generated RoomStatusChanged whenever the connection state moves between joining, joined and closed. Commands go out the same way via room.send_rpc({...}).
Channels and Positions
Every voice datagram travels on one or more of 64 logical channels, each with a 3D position. Which channels you send on is decided by the positions set on your encoder; which channels of which peers you receive is decided by channel masks on the room.
# Transmit on channel 3 from position (10, 0, 5); a fresh encoder sends on channel 0 at the origin
encoder.set_position(10.0, 0.0, 5.0, channel=3)
encoder.clear_position(0)
# Only hear peer 7 on channels 1, 3 and 5; peer id 0 sets the default for everybody
room.set_channel_masks({7: 0b10101, 0: 0xFFFF_FFFF_FFFF_FFFF})
# Decoders report what they last received
print(hex(decoder.active_channels), decoder.positions)
The server culls audio whose sender is further than one unit away on that channel, so positions double as a proximity filter. Coordinates are fixed point with 1/16 resolution.
Sockets
Besides voice, two peers can exchange arbitrary data over the room's connection. A socket is opened towards one peer and shows up on the other side with its first message.
from odin_voice import OdinSocketType
# Open a socket to peer 7; reliable is ordered and retransmitted, unreliable is fire-and-forget
sock = room.create_socket(7, kind=OdinSocketType.Reliable, label=1)
sock.send(b"hello")
# Messages from sockets opened on either side arrive on one stream
async for message in room.sockets():
print(message.socket.remote_peer_id, message.socket.info.label, message.data)
if message.socket.info.is_inbound:
message.socket.send(b"got it") # answer on the socket the peer opened
Sockets are bound to the connection they were opened on and stop working after a reconnect. An unreliable message has to fit into a single datagram together with its header, so its size is bounded by the connection's path MTU, typically a little under 1.5 KB; sending more raises OdinError naming the exact limit. Reliable sockets have no such bound.
Token Generation
Tokens authenticate users and grant access to rooms. Generate tokens server-side only - never embed access keys in client code.
import json
import time
from odin_voice import OdinTokenGenerator
# Create from your access key
generator = OdinTokenGenerator.from_access_key("your-access-key")
# Or generate a new key pair (share public_key with 4Players)
generator = OdinTokenGenerator.generate()
print(f"Access Key: {generator.access_key}") # Keep secret!
print(f"Public Key: {generator.public_key}") # Share with 4Players
# Create a token
nbf = int(time.time())
token = generator.sign(json.dumps({
"rid": "my-room", # Room ID
"uid": "user-id", # User ID
"aud": "gateway", # Audience: "gateway" or "sfu"
"nbf": nbf, # Not before (Unix timestamp)
"exp": nbf + 300, # Expiration (Unix timestamp)
}))
End-to-End Encryption
Enable E2EE by creating a cipher with a shared password. All peers must use the same password. A cipher serves exactly one room.
from odin_voice import OdinCipher, OdinCryptoPeerStatus
# Create cipher with password
cipher = OdinCipher("shared-secret")
# Join room with encryption
room = pool.join_room(gateway=gateway, token=token, cipher=cipher)
# Check peer encryption status
status = cipher.peer_status(peer_id)
match status:
case OdinCryptoPeerStatus.Encrypted:
print("Peer is using the same password - secure!")
case OdinCryptoPeerStatus.PasswordMismatch:
print("Peer is using a different password")
case OdinCryptoPeerStatus.Unencrypted:
print("Peer is not using encryption")
# Change password at runtime
cipher.set_password("new-password")
Audio Processing Pipeline
Add effects like VAD, noise suppression and voice isolation to encoders and decoders:
from odin_voice import (
OdinEncoder,
OdinAudioEncoderConfig,
OdinVadConfig,
OdinApmConfig,
OdinViConfig,
OdinNoiseSuppressionLevel,
OdinGainControllerVersion
)
encoder = OdinEncoder(OdinAudioEncoderConfig())
pipeline = encoder.pipeline
# Add Voice Activity Detection with default settings
vad_id = pipeline.insert_vad(0, OdinVadConfig())
# Add automatic gain control, noise suppression and echo cancellation
apm_config = OdinApmConfig(
gain_controller_version=OdinGainControllerVersion.V2,
noise_suppression_level=OdinNoiseSuppressionLevel.High,
echo_canceller=True,
)
apm_id = pipeline.insert_apm(1, 48000, False, apm_config)
# Echo cancellation needs to know what is being played back
pipeline.update_apm_playback(apm_id, playback_samples, delay_ms=10)
# Add DeepFilterNet based voice isolation
vi_id = pipeline.insert_vi(2, OdinViConfig(enabled=True, attenuation_limit_db=100.0))
# Reconfigure or remove effects at any time
pipeline.set_vad_config(vad_id, OdinVadConfig.disabled())
pipeline.remove_effect(vi_id)
Connection Statistics
Monitor connection quality:
stats = room.stats
if stats:
print(f"RTT: {stats.rtt:.1f}ms")
print(f"Packet Loss: {stats.udp_tx_loss:.1f}%")
print(f"RX Datagrams: {stats.udp_rx_datagrams}")
print(f"TX Datagrams: {stats.udp_tx_datagrams}")
# Encoders, decoders and rooms expose their internals for debugging
print(decoder.dump()["decoder"]["jitter_buffer"])
print(room.dump()) # join state, gateway, own peer id, join parameters with the token redacted
Documentation
For full documentation, visit docs.4players.io.
Metadata
Release files for odin-voice 2.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 976.7 MB
Release files / odin_voice-2.0.0-cp314-cp314t-win_amd64.whl
| Download URL | odin_voice-2.0.0-cp314-cp314t-win_amd64.whl |
|---|---|
| Size | 20.4 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-64 |
|
SHA-256 checksum How to use checksums |
eecb7281b4efdb25a81932ad8d851a629a06764f0eafb3558e3a3d0af8cf69bc
|
|
BLAKE2b-256 checksum How to use checksums |
b9c1e63132b26d7f868a64aff601d5c0380720af9c807ce68ead07605646b5b0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp314-cp314-win_amd64.whl
| Download URL | odin_voice-2.0.0-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 20.4 MB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
eb87357a6e05aea09bb8b8cb79a0cfae7dcdc077e1f1aa2f11410ab89a1305cc
|
|
BLAKE2b-256 checksum How to use checksums |
61e7443a3c24b1c03358f61a3914e9cddb2526e814e995d35277615851b1d4ed
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl
| Download URL | odin_voice-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 24.5 MB |
| Tags | CPython 3.14 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
152d825f2de05a7f3a1de1275d508845ac33ccf7cbdf2b47f72cc025239331fd
|
|
BLAKE2b-256 checksum How to use checksums |
32643c65524d15c3be734669f614b23ed2348a0fcd1bfefef369be7f7fb30989
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl
| Download URL | odin_voice-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 19.8 MB |
| Tags | CPython 3.14 Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
2135aa1aeae60e678269e4b71a03cfca80f8f386fe21ffcdc10c66b4b657155f
|
|
BLAKE2b-256 checksum How to use checksums |
e0bffb0e38085940e686794e80aecb63f5a5da1e441d34de6ff2cc4d3779fc03
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp314-cp314-manylinux_2_28_x86_64.whl
| Download URL | odin_voice-2.0.0-cp314-cp314-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 22.5 MB |
| Tags | CPython 3.14 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
e3e2763ce43be198bee20d8c2b7d0215fe316c022c1d8415ec58322af1cc3d64
|
|
BLAKE2b-256 checksum How to use checksums |
24ce6dc4dc87872601b1fa089ad2f9760cde15e658402392e8876de3e1d5aebb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | odin_voice-2.0.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 19.8 MB |
| Tags | CPython 3.14 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
565500107e3e43c3dade04839b4efb3ec90d5a3babe5a78b7a5994865f0c32f2
|
|
BLAKE2b-256 checksum How to use checksums |
1d8aa25644dc79ba5950bf035c4ceb20241f1c63fd6b5650b435ffb69326eef8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | odin_voice-2.0.0-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 20.5 MB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
ab1f56ba81343617762da3d80766dedee014fb34b9f1ade928af2178378cf4a7
|
|
BLAKE2b-256 checksum How to use checksums |
c6beccdce1cc18f34ace4845de92517509eea4b1e176b15ac0383c38f2bb0100
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp314-cp314-macosx_10_12_x86_64.whl
| Download URL | odin_voice-2.0.0-cp314-cp314-macosx_10_12_x86_64.whl |
|---|---|
| Size | 21.7 MB |
| Tags | CPython 3.14 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
65a282c0c5e2dd460fc38dc43236cd2c773ed8511c1dfa7f6746e46c4eb8cea3
|
|
BLAKE2b-256 checksum How to use checksums |
336c6357839e64269624100aee114f57983e30851ec7d3bf8457cecaa62ce1fc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
| Download URL | odin_voice-2.0.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl |
|---|---|
| Size | 42.1 MB |
| Tags | CPython 3.14 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
8bcbc48ea887a1e7e8575d6d91390184ef1abdd0de3c95c5c218bd7851af5fbd
|
|
BLAKE2b-256 checksum How to use checksums |
eab26b4bdf9e355b6be6b629ccf56c9ec5243539c7711d9b1103cc134c6af573
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp313-cp313-win_amd64.whl
| Download URL | odin_voice-2.0.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 20.4 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
2045af0bc865fb5aeadbec52a93ec7adb6fe8f3eed14f2d3b590adb74167eb3f
|
|
BLAKE2b-256 checksum How to use checksums |
743b28d51a35106efc2f6955f6c8532cef2803a8c8bec01624b47302c1373f8d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl
| Download URL | odin_voice-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 24.5 MB |
| Tags | CPython 3.13 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
5e244460ed87399e254453dbc3f284e1c8d329491a8429e5bd62194034e2a3da
|
|
BLAKE2b-256 checksum How to use checksums |
9c06d2955896dcb1dbb067187d910702bbbce9cef4a3b256654e7457b8febe28
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl
| Download URL | odin_voice-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 19.8 MB |
| Tags | CPython 3.13 Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
2dc5b01a678e490510b20b5ad13342b2fa925d08882e04c70e5041fb9784a8c4
|
|
BLAKE2b-256 checksum How to use checksums |
ad94b08efbf6cd55502d26c962aef44cb0e340ede104563733452cfac5b09a15
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp313-cp313-manylinux_2_28_x86_64.whl
| Download URL | odin_voice-2.0.0-cp313-cp313-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 22.5 MB |
| Tags | CPython 3.13 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
d3fe006c4e95f3a375904c59eef76da7fab1480bf340d8a0cf9625a85f05734a
|
|
BLAKE2b-256 checksum How to use checksums |
42c770b82c1cf96e38d798ccaa1ad74e13e52656bd73f7b88d665840a65f17a1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | odin_voice-2.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 19.8 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
9e44a4c11b408e6ad159f185a4ced64a32777c4bea6ea81a81c2dc997ed5d9e4
|
|
BLAKE2b-256 checksum How to use checksums |
bb2c2e5d995fe6c73f50a599d887d99ecdd6c3a6fd403b09836e6b75592d8d14
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | odin_voice-2.0.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 20.5 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
040e3bfdac5aeca7264dd73d1d78e07021d85b3898b39d94517385be83ba8c79
|
|
BLAKE2b-256 checksum How to use checksums |
4c9a9d8c1220e25b4b2ade6c4a6fec50c417ef2eb5d79f76ac748cb119f072a8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp313-cp313-macosx_10_12_x86_64.whl
| Download URL | odin_voice-2.0.0-cp313-cp313-macosx_10_12_x86_64.whl |
|---|---|
| Size | 21.7 MB |
| Tags | CPython 3.13 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
292a1b393a8511fd97e570f58ddcf94e0577dcd906e8aa0359f98fe23cf26056
|
|
BLAKE2b-256 checksum How to use checksums |
39a4974a7f6f203374a4d738ab9593088d11554cca30098d9a9d73559638bc0e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
| Download URL | odin_voice-2.0.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl |
|---|---|
| Size | 42.1 MB |
| Tags | CPython 3.13 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
2de5c65749b774caaa3744b1c843671b34c51735ab4f61399a12ff9f6e127e61
|
|
BLAKE2b-256 checksum How to use checksums |
ec6b403bc17d439379f0b034b12a9a839e7dd352ceb1a1c1312fdfb0fadb913c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp312-cp312-win_amd64.whl
| Download URL | odin_voice-2.0.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 20.4 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
8eb1604671ab8aafe5462888d61e6cacfd762fe8c208a01b2af8cbdadacc8e13
|
|
BLAKE2b-256 checksum How to use checksums |
dab288b5dfad0f650e1c63a832d0a6e1677e4bd80237b3c69435e101bcf7d674
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl
| Download URL | odin_voice-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 24.5 MB |
| Tags | CPython 3.12 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
c5d6f96c932bd9d3fcee4db7295cdcb3dceb81ec5b78ec68502a66465c78e8cc
|
|
BLAKE2b-256 checksum How to use checksums |
27448032e7f5dcfa59fb52c9091493d239754702f71496b098bdfecb38cf3101
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl
| Download URL | odin_voice-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 19.8 MB |
| Tags | CPython 3.12 Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
170b913e57817b57ec288ba5ef3ec8ea3a7635d7b09837f58c21e89001077006
|
|
BLAKE2b-256 checksum How to use checksums |
661adbee1832ea995cafe9c9db041291fbedeafd6a7aa1f098214887524f41a6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp312-cp312-manylinux_2_28_x86_64.whl
| Download URL | odin_voice-2.0.0-cp312-cp312-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 22.5 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
a5f5e26aff3ad234bf14c91912c81d9b0a5d289a469781b56645be7e7b099a38
|
|
BLAKE2b-256 checksum How to use checksums |
c10cdcddbcc68b18347a1a3bd3bc440aba0cde36b3bbe6bd29ecfc84c771ffda
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | odin_voice-2.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 19.8 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
c7b4a12b9d87f590caded1e4660d64e5dfdce381b80343cab501106d8fc76958
|
|
BLAKE2b-256 checksum How to use checksums |
6b275ea0c48f3af97a36335db5796af5057d090d29a657ffadaab30b625eed73
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | odin_voice-2.0.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 20.5 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
059507711e9c1c67960791a6543bb44f0991642bb12a0f8ced326471c7db5016
|
|
BLAKE2b-256 checksum How to use checksums |
45a581c95351ba44e3e156d2daf83b668b4339987c22091552d233f8e148a676
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp312-cp312-macosx_10_12_x86_64.whl
| Download URL | odin_voice-2.0.0-cp312-cp312-macosx_10_12_x86_64.whl |
|---|---|
| Size | 21.7 MB |
| Tags | CPython 3.12 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
bb998838aba461455f6e4f671c99f9ef5754a53b10d682d58af734ab78794c0e
|
|
BLAKE2b-256 checksum How to use checksums |
16e265bf897dab29202cb1b007bf8c83fc97e609ccbfe8758dbceae10b1ed5fd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
| Download URL | odin_voice-2.0.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl |
|---|---|
| Size | 42.1 MB |
| Tags | CPython 3.12 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
6b77af04461f3b3b26ab81b9bb974c53f52279ae72d913cb6ac4b29d63d7e3b1
|
|
BLAKE2b-256 checksum How to use checksums |
07d13045cd6a4f4ec8c05502c01c8e608e3977ecddb31ab5db1527ba8f22bbc4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp311-cp311-win_amd64.whl
| Download URL | odin_voice-2.0.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 20.4 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
8b740d3a345943634907215217fbfb4196b33345ea3762a1acc4fe34f518e042
|
|
BLAKE2b-256 checksum How to use checksums |
461677a759e7e0b37ae0358e1e78df17f43f09c30196452f3353fcb3aed00b67
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl
| Download URL | odin_voice-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 24.5 MB |
| Tags | CPython 3.11 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
f51ba156a7345da7e66e0b99fdaf401e73d90ada1201991582431449b52150df
|
|
BLAKE2b-256 checksum How to use checksums |
d19948831348d2c215e88447700766479a5a93b68917bbc212c123b6e5889b0b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl
| Download URL | odin_voice-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 19.8 MB |
| Tags | CPython 3.11 Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
3d4e7fc4c5ff81308521d68a14a002cce5e2571276a3a85077d9cc4e34673a06
|
|
BLAKE2b-256 checksum How to use checksums |
0cbf81441d8cb89d453545e411c33b3630e30c196227e37f53ec5902d1fbfe85
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp311-cp311-manylinux_2_28_x86_64.whl
| Download URL | odin_voice-2.0.0-cp311-cp311-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 22.5 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
86bcd229ed3d7f4f95421ff4cf78e6d101c175f4aeb7b2001fae48d8895f9085
|
|
BLAKE2b-256 checksum How to use checksums |
8d0e72bb764b912d8c742e95bd68728525abf6b3b7ea7d63711b8f277b4fa972
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | odin_voice-2.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 19.8 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
2837fc15e9899b64c4f35833ae0d57da67315a1609f915f284e82b993fea847c
|
|
BLAKE2b-256 checksum How to use checksums |
96f58441525ec212ab09bec6cbd6bae9d257bf33f2ec1b394d5ab3daf81794fb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | odin_voice-2.0.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 20.6 MB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
d16a8e243634f8f8c490a0044590566d973e1fe5c38446a28e7163f203c9caa7
|
|
BLAKE2b-256 checksum How to use checksums |
7a17783378b72609ffca80631cc7627a337f290961a2dda4ff1abe59c5ed1526
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp311-cp311-macosx_10_12_x86_64.whl
| Download URL | odin_voice-2.0.0-cp311-cp311-macosx_10_12_x86_64.whl |
|---|---|
| Size | 21.6 MB |
| Tags | CPython 3.11 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
7958206ce85bb38a6486c5d27cfc172e193208ebfe98b747b61af8998474539c
|
|
BLAKE2b-256 checksum How to use checksums |
a35ded7619ebd01a02fd371d2ddbec2cddf63a3560645cf2f161d9f1748aacd9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
| Download URL | odin_voice-2.0.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl |
|---|---|
| Size | 42.1 MB |
| Tags | CPython 3.11 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
313ed0377502c69df04c1cfde75c0cae8b98c1f6e5f08b6673e9d248dc5cef31
|
|
BLAKE2b-256 checksum How to use checksums |
23e518ba9a0c76283a6620beb0963a348494ee9a660bae0d82a5e59b6d766e0e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp310-cp310-win_amd64.whl
| Download URL | odin_voice-2.0.0-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 20.4 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
46fafe0f89e3a5465a4eddd767544bf4b4456ab8689d933de0edece2075eaba6
|
|
BLAKE2b-256 checksum How to use checksums |
c9f37594f604112da13059fb53466e6b03fd4260aa0eef376a3464ce6e9f5256
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl
| Download URL | odin_voice-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 24.5 MB |
| Tags | CPython 3.10 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
3d64eaec74a4df0503318118dbe3a264bcaa3a8eab19d4588791524010e5a3ec
|
|
BLAKE2b-256 checksum How to use checksums |
81c18ba7bf24be65c8b78bba4f9266d9a0a1241f985c3c21625a47f11ddc0cdb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl
| Download URL | odin_voice-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 19.8 MB |
| Tags | CPython 3.10 Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
f42f9f2796014153185f431ef6899f88e611320e592b3d8124509f34ad9a7c9f
|
|
BLAKE2b-256 checksum How to use checksums |
2c56e182f9ce70517e5d31e0d23248e1951aedc1f843d60fcc54fdcfb01fb986
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp310-cp310-manylinux_2_28_x86_64.whl
| Download URL | odin_voice-2.0.0-cp310-cp310-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 22.5 MB |
| Tags | CPython 3.10 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
f4b682bafdfc472cee193ff9b9f95c15326d350856bcb92910ca822e0b1c5eed
|
|
BLAKE2b-256 checksum How to use checksums |
5e73f869d45f725d289e83e796da9e81cdfcf98e21486d9b9cdb266a69808df4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | odin_voice-2.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 19.8 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
7aad6b8209244c56d8f33a9423d0baa976f5dace530ca680e1f63cc7a8f37c61
|
|
BLAKE2b-256 checksum How to use checksums |
5bf991c45901e32d84886141a282db7255d87254af70d50cb06290d05d014dde
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | odin_voice-2.0.0-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 20.6 MB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
0df1c43b512e71eb84b3a8ee9dc67520b6de98ade69b467b8233cfbf3c7cbf5b
|
|
BLAKE2b-256 checksum How to use checksums |
0426e771e679c71a09e7ce33791ba73f803bb18faf76fc651d9859cf4bc4bce0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp310-cp310-macosx_10_12_x86_64.whl
| Download URL | odin_voice-2.0.0-cp310-cp310-macosx_10_12_x86_64.whl |
|---|---|
| Size | 21.6 MB |
| Tags | CPython 3.10 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
c43610123fd4bee3d2c05cf0ef3f5830651a5da4b2175c025a47661b455369ea
|
|
BLAKE2b-256 checksum How to use checksums |
0b78b4df0706c75672bbb4d28fdf3057194c80f31027705def8f3f188241a6bc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|
Release files / odin_voice-2.0.0-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
| Download URL | odin_voice-2.0.0-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl |
|---|---|
| Size | 42.1 MB |
| Tags | CPython 3.10 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
c23d296a23d41b00307cd12a7b724c8c5ea5574346efaf55a28b73f1bf5425bc
|
|
BLAKE2b-256 checksum How to use checksums |
43ca82c5a1f9c342bb79327c3eb6ce00ebc1964321fb222abaf2c9d4b6dae6a4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.14.4
|