LibSpeech
Lightweight Speech Processing Library
C++ library with Python bindings for audio I/O, DSP, and ONNX-based speech models -- built to install with nothing but pip, no system dependencies (libcurl, OpenSSL, ...) required.
Contents
✨ Key Features
- 🚀 ONNX Runtime powered models, without a heavy LibTorch dependency
- 🎙️ Audio I/O (
speech::io): load/save WAV/MP3/FLAC, playback, resample, mono-mixing - 🧮 DSP (
speech::dsp): Resample, window functions, FFT/IFFT, DCT/IDCT, STFT/ISTFT, MFCC -- all with their own C++ unit tests and Python bindings - 🔊 Speech models (
speech::models): aDenoiserinterface (Facebook, SpeechBrain, GTCRN and DPDFNet backends) and Silero VAD - 🖥️ Cross-platform: Windows, Linux, macOS
- 🐍 Python bindings (nanobind) mirroring the C++ API 1:1
- 📦 Zero system dependencies: no
apt install libcurl-dev/ OpenSSL needed -- HTTPS model downloads go throughhttpp(pip install httpp), a separately-installed package with its own prebuilt HTTP(S) client and progress bar
📦 Installation
Python package
pip install libspeech
From source (C++/CMake)
git clone https://github.com/MohammadRaziei/libspeech.git
cd libspeech
git submodule update --init src/third_party/miniaudio
# speech::models (BUILD_MODELS=ON, the default) needs httpp on
# CMAKE_PREFIX_PATH for model downloads (HTTPS client + progress bar) --
# no more Mbed TLS/libcurl to build, just:
pip install httpp
mkdir build && cd build
cmake .. # downloads ONNX Runtime automatically on first configure
cmake --build . -j$(nproc)
ctest # runs the full test suite (see "Testing" below)
Only want the DSP layer (no ONNX Runtime/network access needed at all)?
cmake .. -DBUILD_MODELS=OFF
cmake --build . -j$(nproc)
🚀 Quick Start
Python
import libspeech
# --- Audio I/O ---
audio = libspeech.Audio()
audio.load("sample.wav")
mono = audio.to_mono()
resampled = mono.resample(16000)
resampled.save("sample_16k_mono.wav")
# --- DSP ---
mfcc = libspeech.MFCC(libspeech.MFCCParams())
coefficients = mfcc.compute(resampled.data(0)) # [num_frames][num_coefficients]
# --- NumPy: float32 in, NumPy out, no list conversion ---
x = resampled.to_numpy() # float32 1-D array (any float array works)
# The everyday functions follow librosa: keyword-only n_fft / hop_length / window / center,
# a one-sided complex64 result of shape (bins, frames), center=True padding.
z = libspeech.stft(x, n_fft=512, hop_length=128) # (257, frames) -- same as librosa.stft(x, ...)
y = libspeech.istft(z, hop_length=128, length=len(x))
# The classes keep a transform around and give you control of the layout:
stft = libspeech.STFT(n_fft=512, hop_length=128) # or STFT(9, ...): the exponent form
z = stft.stft_complex(x, onesided=True) # (frames, 257) complex64, written in place
y = stft.istft(z, "weighted") # "weighted" (default) or "plain"
re, im = stft.stft(x) # the older (re, im) pair; onesided=False = all 512 bins
fft = libspeech.FFT(12)
spectrum = fft.fft(x[:4096]) # complex64, like np.fft.fft (fft.ifft inverts it)
re, im = fft.forward(x[:4096]) # the same as a pair; also inverse/dct/idct
# --- Speech models ---
# Denoiser("facebook") uses the backend's standard model (downloaded to ~/.libspeech on first use);
# model="path-or-url.onnx" picks another. `with` frees the model's memory on exit (or call close()).
# Calling it takes a list or a 1-D NumPy array (and returns the same kind) and lets other Python
# threads run meanwhile. num_threads: 1 (default), or 0 = one ONNX Runtime thread per hardware thread.
with libspeech.Denoiser("facebook") as denoiser:
clean = denoiser(resampled.to_numpy())
print(denoiser.readme()) # what the model is, who made it, its license (also: .model_path, .sha256)
# Every model is downloaded together with <model>.onnx.sha256 (fetched first, checked, then the model is
# hashed and compared) and <model>.onnx.readme. A cached model is verified on every load.
# ignore_cache=True downloads everything again. data/models.csv lists all models and their licenses.
denoiser = libspeech.Denoiser("gtcrn", ignore_cache=True)
path = libspeech.fetch_model("dpdfnet2.onnx") # just download + verify, returns the file path
text = libspeech.model_readme("silero-vad.onnx")
digest = libspeech.sha256_file(path) # also libspeech.sha256(data)
vad = libspeech.SileroVad()
vad.process(resampled.data(0))
for segment in vad.get_speech_timestamps():
print(f"speech from {segment.start_s:.2f}s to {segment.end_s:.2f}s")
C++
#include "libspeech/audio.h"
#include "libspeech/dsp/mfcc.h"
#include "libspeech/models/denoiser.h"
speech::io::audio audio;
audio.load("sample.wav");
auto resampled = audio.to_mono().resample(16000);
speech::dsp::mfcc::params params;
params.sample_rate = 16000;
speech::dsp::mfcc mfcc(params);
auto coefficients = mfcc.compute(resampled.data(0));
auto denoiser = speech::models::denoiser::create("facebook", "facebook_denoiser.onnx");
auto clean = denoiser->process(resampled.data(0)); // also: process(const float*, size_t)
denoiser->close(); // optional: frees the model now, not at destruction
See examples/ for complete, runnable programs.
Views for C++ (no copies, no allocations)
speech::span<T> (a pointer and a length; a C++17 stand-in for std::span) and speech::frame_view<T>
(a buffer cut into frames) bundle what the raw-buffer calls otherwise take as loose arguments. A
std::vector converts to a span automatically; the pointer forms of every call stay available.
#include "libspeech/dsp/stft.h"
speech::dsp::stft analysis(9, speech::dsp::window_type::hann, 128);
// Frames of a signal, as the stft cuts them (no copy), and a spectrogram frame by frame:
for (speech::span<const float> frame : analysis.frames(signal)) { /* N samples */ }
auto spec = analysis.spectrogram(signal.data(), signal.size(), /*onesided=*/true);
for (auto frame : spec.frames()) // one spectrum
for (std::complex<float> bin : frame) // one bin: two references, nothing allocated
energy += std::norm(bin);
// Straight into interleaved std::complex<float> (= NumPy complex64), then back:
const int frames = analysis.cal_time_length(signal.size()), bins = analysis.num_bins(true);
std::vector<std::complex<float>> out(frames * bins);
analysis.stft_onesided_into(signal, speech::frame_view<std::complex<float>>(out.data(), frames, bins));
auto back = analysis.istft(speech::frame_view<const std::complex<float>>(out.data(), frames, bins));
Complex data comes in two layouts, and both iterate without allocating. Interleaved storage
(complex64, std::complex<float>[]) is a plain reinterpret_cast (speech::as_complex()), so its
iterator yields real std::complex<float>&. Split planes (all real parts, then all imaginary parts,
as in complex_spectrogram) cannot be reinterpreted, so split_complex_span hands out a
two-reference proxy that converts to and from std::complex<float>.
Logging
libspeech is quiet by default: it only writes warnings and errors to stderr. Turn the detail up (or everything off) from Python, C++, or the environment:
import libspeech
libspeech.set_log_level("debug") # trace | debug | info | warning (default) | error | off
libspeech.get_log_level() # "debug"
#include "libspeech/utils/log.h"
speech::utils::set_log_level(speech::utils::log_level::off);
LIBSPEECH_LOG=debug python my_script.py # the starting level; set_log_level() overrides it
Lines look like 2026-10-09 12:00:00.123 [debug] (speech::dsp::FFT) Created FFT: ....
🧪 Testing
Tests are organized by language and module (speech_test_<language>_<module>),
all discoverable via cmake --build build --target help:
speech_test # everything
├── speech_test_cpp
│ ├── speech_test_cpp_dsp # speech::dsp (C++), no network/ONNX needed
│ └── speech_test_cpp_models # speech::models (C++)
└── speech_test_python
├── speech_test_python_audio # libspeech.Audio
├── speech_test_python_dsp # libspeech.Resample/FFT/STFT/MFCC/...
├── speech_test_python_numpy_api # NumPy in/out fast paths
├── speech_test_python_simd # SIMD backend selection and agreement
├── speech_test_python_librosa_compat # load/save/resample/STFT/MFCC vs librosa
└── speech_test_python_models # libspeech.Denoiser/SileroVad
The librosa cross-checks need the test extra (pip install "libspeech[test]" installs
librosa, soundfile, scipy and numpy); without them that module skips itself.
Run everything with cmake --build build --target speech_test, or just
ctest for the same suites without the extra build-tool chatter.
Docs & coverage
cmake .. -DBUILD_DOCS=ON && cmake --build . --target speech_docs # -> build/docs/out/index.html (C++ via Doxygen, Python via Sphinx)
Coverage follows the same layout as ctoon: one target per component, a merged total, and a dashboard tying the reports together.
cmake .. -DBUILD_PYTHON=ON -DBUILD_COVERAGE=ON # + `pip install coverage`, lcov/genhtml on PATH
cmake --build . --target speech_coverage # everything below, then the merge + dashboard
| Target | Covers | Output (under build/coverage/) |
|---|---|---|
speech_coverage_cpp_dsp |
speech::dsp (utest.h suite) |
cpp_dsp/ |
speech_coverage_cpp_models |
speech::models + download utils |
cpp_models/ |
speech_coverage_python |
the Python package's .py files (coverage.py) |
python/ |
speech_coverage_total |
lcov merge of all of the above | total/ |
Open build/coverage/index.html for the dashboard. Each component (and the
total) also leaves a plain coverage.lcov next to its HTML, which is what CI
uploads to Codecov. BUILD_COVERAGE is off by default: it instruments
speech_dsp/speech_models with --coverage, which you don't want in a
normal build. Without BUILD_PYTHON you just get the C++ components.
🔧 Architecture
libspeech is split into three independent C++ libraries (each with its own
CMake target/namespace/Python module), aggregated by an umbrella speech
library:
| Namespace | CMake target | Python module | Depends on |
|---|---|---|---|
speech::dsp |
speech_dsp |
speech_dsp_py |
nothing but a vendored subset of AudioFlux's C sources |
speech::io |
speech_io |
speech_io_py |
speech::dsp (for resampling), miniaudio |
speech::models |
speech_models |
speech_models_py |
ONNX Runtime, httpp (for downloading model weights) |
See checklist.md for the detailed, up-to-date state of
the project (what's done, what's in progress, known issues), and
audioflux_issues.md for a couple of real bugs
found in AudioFlux while vendoring it (with repro steps and fixes, in case
they're useful upstream).
SIMD and portability
Kernels that benefit from explicit SIMD (today the polyphase resampler, ~2.3x over its
portable twin on AVX2) have a portable C++ implementation plus vectorized twins that are
selected at run time from the CPU, never from build flags -- so one wheel or one default
CMake build is correct on every machine of its architecture and fast on the capable ones.
No -march=native, no per-ISA build variants. The real-input FFT behind STFT/MFCC is plain
portable C++ that the compiler vectorizes for the baseline ISA: a hand-targeted AVX2 clone
of it was measured (n_fft 64-8192) and was never faster, so it was dropped.
| Target | Fast path | Compilers | Notes |
|---|---|---|---|
| x86 / x86-64 | AVX2 + FMA (CPUID and OS YMM-state checked) | GCC, Clang, MSVC | MSVC path is written but not yet built in CI -- see below |
| ARM64 (Linux, macOS, Windows) | NEON | GCC, Clang, MSVC | |
| anything else (32-bit ARM, RISC-V, ...) | portable C++ | any C++17 compiler | the compiler may still auto-vectorize it |
import libspeech
libspeech.simd_backend() # 'avx2+fma' | 'neon' | 'generic'
libspeech.set_simd_enabled(False) # run-time switch (objects/calls created afterwards)
- Environment:
LIBSPEECH_SIMD=offforces the portable kernels (LIBSPEECH_DISABLE_AVX2=1still works). - All backends are cross-checked against each other and against independent references in
tests/dsp/test_fast_paths.cpp. The suite is run on x86-64 (GCC and Clang), 32-bit x86, AArch64 (under QEMU), and with SIMD disabled at run time. - MSVC: the AVX2 resampler and the CPUID/XGETBV detection are written against MSVC's intrinsics but
have not been compiled with
clyet (no Windows toolchain was available when this was written). If anything misbehaves there,LIBSPEECH_SIMD=offfalls back to the portable code at run time. - Layout for contributors: support is decided in the sources, not the build system.
src/dsp/simd_internal.hholds every architecture/compiler macro (LS_HAVE_X86_AVX2,LS_HAVE_ARM_NEON,LS_TARGET_AVX2, ...):#if LS_HAVE_X86_AVX2the AVX2 kernel is compiled and used when the CPU has it, otherwise the portable one is. Kernels never test__x86_64__/_MSC_VERdirectly.
🤝 Contributing
We welcome contributions! Please see CONTRIBUTING.md.
📄 License
This project is licensed under the Apache License 2.0 - see LICENSE and NOTICE. The ONNX models it downloads have their own licenses (see data/models.csv; the Facebook denoiser models are non-commercial, CC BY-NC 4.0).
Metadata
Release files for libspeech 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| libspeech-0.4.0.tar.gz | 390.5 kB | Without provenance | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| libspeech-0.4.0-cp312-abi3-win_amd64.whl | CPython 3.12 | abi3 | Windows x86-64 | Details |
| libspeech-0.4.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.12 | abi3 | Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 | Details |
| libspeech-0.4.0-cp312-abi3-macosx_13_0_universal2.whl | CPython 3.12 | abi3 | macOS 13.0+ universal2 (ARM64, x86-64) | Details |
| libspeech-0.4.0-cp311-cp311-win_amd64.whl | CPython 3.11 | CPython 3.11 | Windows x86-64 | Details |
| libspeech-0.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.11 | CPython 3.11 | Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 | Details |
| libspeech-0.4.0-cp311-cp311-macosx_13_0_universal2.whl | CPython 3.11 | CPython 3.11 | macOS 13.0+ universal2 (ARM64, x86-64) | Details |
| libspeech-0.4.0-cp310-cp310-win_amd64.whl | CPython 3.10 | CPython 3.10 | Windows x86-64 | Details |
| libspeech-0.4.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.10 | CPython 3.10 | Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 | Details |
| libspeech-0.4.0-cp310-cp310-macosx_13_0_universal2.whl | CPython 3.10 | CPython 3.10 | macOS 13.0+ universal2 (ARM64, x86-64) | Details |
| libspeech-0.4.0-cp39-cp39-win_amd64.whl | CPython 3.9 | CPython 3.9 | Windows x86-64 | Details |
| libspeech-0.4.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.9 | CPython 3.9 | Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 | Details |
| libspeech-0.4.0-cp39-cp39-macosx_13_0_universal2.whl | CPython 3.9 | CPython 3.9 | macOS 13.0+ universal2 (ARM64, x86-64) | Details |
Total release size: 146.1 MB
Release files / libspeech-0.4.0.tar.gz
| Download URL | libspeech-0.4.0.tar.gz |
|---|---|
| Size | 390.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d997bd69cf54f428227a1da0dca6072884a3714c45549fa3b66998b174a1eaa3
|
|
BLAKE2b-256 checksum How to use checksums |
5d307cffd5d2fa74d7cadcad8db6cf651e9f111a69acf8295bb95d61d2a31c2a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / libspeech-0.4.0-cp312-abi3-win_amd64.whl
| Download URL | libspeech-0.4.0-cp312-abi3-win_amd64.whl |
|---|---|
| Size | 5.8 MB |
| Tags | CPython 3.12 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
18678f0a493cc652fbd31e84a6c53fa3039c034d668626ddf834062e33a8f847
|
|
BLAKE2b-256 checksum How to use checksums |
3cbd72128a0a92f2dff24c5e646126d8ed7b13b5f774c3caf9284173ccf4ddb7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / libspeech-0.4.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | libspeech-0.4.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 9.2 MB |
| Tags | CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
b91e9f1adefa470001ac499f7c37ec3e7fc6ce266ce3908a6458796984f3e220
|
|
BLAKE2b-256 checksum How to use checksums |
d089825d4642ea51f99d03fe606a9b22040a6b0a8e2b88348bd70f13847ff5b1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / libspeech-0.4.0-cp312-abi3-macosx_13_0_universal2.whl
| Download URL | libspeech-0.4.0-cp312-abi3-macosx_13_0_universal2.whl |
|---|---|
| Size | 21.5 MB |
| Tags | CPython 3.12 abi3 macOS 13.0+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
a3eb608b62b870e3951cfde706175cbd5d0b3c20b550a091d62d7fd1ef268fa5
|
|
BLAKE2b-256 checksum How to use checksums |
afe83eff1d3f1c7a75960f5ab532fcfc6889df197a7be0a7d039069418dd5a47
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / libspeech-0.4.0-cp311-cp311-win_amd64.whl
| Download URL | libspeech-0.4.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 5.8 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
a8f164756f8bd97b59e1eb3c1c137017fc22587354747c8536dc51ca9dc313de
|
|
BLAKE2b-256 checksum How to use checksums |
ed5720a16fc612efc7c52ef45b33e17b4a392e2c98e725681cd29f440f3a9ac1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / libspeech-0.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | libspeech-0.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 9.3 MB |
| Tags | CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
28c1c08daed4b7a34f119669b7bd8972122255b9c931afd88f0ef6d3b7987757
|
|
BLAKE2b-256 checksum How to use checksums |
163e221fe62d10a7fbc8963eef5ac470733d76c7626544c146ff48c6a1f0a9e8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / libspeech-0.4.0-cp311-cp311-macosx_13_0_universal2.whl
| Download URL | libspeech-0.4.0-cp311-cp311-macosx_13_0_universal2.whl |
|---|---|
| Size | 21.5 MB |
| Tags | CPython 3.11 macOS 13.0+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
ffafb073f7fbb80740488c7577cb7cc5339ae660fa66b0bd4e61b6a0386a5876
|
|
BLAKE2b-256 checksum How to use checksums |
8f82b9e91e442717e941af1e6580d90c57eb7aa29901ef383c946c013ab41e1f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / libspeech-0.4.0-cp310-cp310-win_amd64.whl
| Download URL | libspeech-0.4.0-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 5.8 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
6ccd912beb467d61ed4edbf9ed176503819b4157987523aa52bbf6859798e277
|
|
BLAKE2b-256 checksum How to use checksums |
9836b80bf8e4d3cae15bda9d68e2289fff7643a027e11d8bbfaddd28925deff3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / libspeech-0.4.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | libspeech-0.4.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 9.3 MB |
| Tags | CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
23c56b44257f8f988abef92525c6cf6636a7afd6e4656200a8e6644079ea1b0c
|
|
BLAKE2b-256 checksum How to use checksums |
023d842ac88d9f607454c3667e987c34be17cd5f6557ac3b07b74eb11ce97142
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / libspeech-0.4.0-cp310-cp310-macosx_13_0_universal2.whl
| Download URL | libspeech-0.4.0-cp310-cp310-macosx_13_0_universal2.whl |
|---|---|
| Size | 21.5 MB |
| Tags | CPython 3.10 macOS 13.0+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
fa59ebe5fb9cfba540d5aac548cb711fba8c984c69789e506c4f8df97a132ac2
|
|
BLAKE2b-256 checksum How to use checksums |
cd98829453b88ebb2ac55586ede80e609804ad63c55ae04fcace68c7635c7d8c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / libspeech-0.4.0-cp39-cp39-win_amd64.whl
| Download URL | libspeech-0.4.0-cp39-cp39-win_amd64.whl |
|---|---|
| Size | 5.6 MB |
| Tags | CPython 3.9 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
7905c31f4336062fcd02db933e46fadf5cd0b8ac91eabfee030b2cc5bb09f5bd
|
|
BLAKE2b-256 checksum How to use checksums |
1817009f42964de5174e35aeb826243863bf4bd5ed824ac0139827255821929d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / libspeech-0.4.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | libspeech-0.4.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 9.2 MB |
| Tags | CPython 3.9 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
d445f2844106e77b1b46a03a2e1151c840f9bdcc49e9be684ccf971d7173dfbe
|
|
BLAKE2b-256 checksum How to use checksums |
8d072340d99601a019e3d24183966a191ca5fede8a47e1f96df0464d0dce25c6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / libspeech-0.4.0-cp39-cp39-macosx_13_0_universal2.whl
| Download URL | libspeech-0.4.0-cp39-cp39-macosx_13_0_universal2.whl |
|---|---|
| Size | 21.4 MB |
| Tags | CPython 3.9 macOS 13.0+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
dc0ef900f930d1d1e98084f1c55d00e34966909053b2b6d0c480e76f66afb8ec
|
|
BLAKE2b-256 checksum How to use checksums |
53cd5dc77c37c7c9267fb7d81e5eebf36b0fff89a2fc5accd44e3f0e3cb84ced
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Security for libspeech 0.4.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.