TranscribeCppSharp 0.3.1
dotnet add package TranscribeCppSharp --version 0.3.1
NuGet\Install-Package TranscribeCppSharp -Version 0.3.1
<PackageReference Include="TranscribeCppSharp" Version="0.3.1" />
<PackageVersion Include="TranscribeCppSharp" Version="0.3.1" />
<PackageReference Include="TranscribeCppSharp" />
paket add TranscribeCppSharp --version 0.3.1
#r "nuget: TranscribeCppSharp, 0.3.1"
#:package TranscribeCppSharp@0.3.1
#addin nuget:?package=TranscribeCppSharp&version=0.3.1
#tool nuget:?package=TranscribeCppSharp&version=0.3.1
TranscribeCppSharp
.NET bindings for transcribe.cpp: load GGUF speech-to-text models and transcribe audio (16 kHz mono float PCM) from C#.
Two ways to use it:
- A command-line tool —
dotnet tool install -g TranscribeCppSharp.Cligives youtranscribe, which downloads a curated model on first use and prints or exports the transcript. See Command-line tool. - A .NET library — the
TranscribeCppSharpwrapper (plus the native runtime package for your platform) for C# code. See Installation and Quick Start.
Installation
The wrapper is platform-agnostic and ships no native binaries. A minimal install is the wrapper plus the native runtime package for your platform:
dotnet add package TranscribeCppSharp
dotnet add package TranscribeCppSharp.Native.linux-x64 # pick your platform
If you would rather not pick a platform (or want one package that works everywhere), install the bundle meta-package instead — it pulls the wrapper and every native runtime:
dotnet add package TranscribeCppSharp.Bundle
Native runtime packages:
- Linux (x64):
TranscribeCppSharp.Native.linux-x64 - Linux (ARM64):
TranscribeCppSharp.Native.linux-arm64 - Windows (x64):
TranscribeCppSharp.Native.win-x64 - macOS (ARM64):
TranscribeCppSharp.Native.osx-arm64 - macOS (x64):
TranscribeCppSharp.Native.osx-x64
Note: For Linux Alpine (musl) or other platforms, please refer to the Building from source section. Like Using CUDA, a custom native build is picked up automatically when placed in the app output directory.
The wrapper resolves libtranscribe automatically in plain dotnet run scenarios (no <RuntimeIdentifier> needed): it searches the app output directory — including the runtimes/<rid>/native/ layout where .NET places runtime-package binaries — and the NuGet global packages folder. If the native library is still missing at runtime (e.g. you forgot the runtime package), the wrapper throws a DllNotFoundException that lists the exact package to add for your platform (e.g. dotnet add package TranscribeCppSharp.Native.linux-x64) and the paths it searched. It does not silently produce a misleading error.
Command-line tool
transcribe is the fastest way to try this project: it needs no code, no
project file, and no manual model handling.
dotnet tool install -g TranscribeCppSharp.Cli
The tool is published per platform (win-x64, linux-x64, linux-arm64, osx-x64, osx-arm64), and the native runtime for your platform is embedded in the package, so nothing native is downloaded at first run. It needs the .NET 10 runtime.
Transcribe a file
transcribe jfk.wav --model whisper-tiny
The model is fetched from HuggingFace on first use (42 MB for that alias),
verified by sha256 and cached. Aliases carry a pinned revision, so later runs
reuse the cache and need no network. Console output below, with the
ggml_*/load_backend native log lines and the two timing lines (per-window
progress and the real-time factor, which depend on your hardware) omitted. The
device name is a placeholder; decimal separators follow your locale:
audio : 176 000 samples = 11,0s @ 16kHz mono
model : whisper/whisper-tiny
compute: Vulkan0 on NVIDIA RTX 4090 [requested: auto]
diarization supported: False
window: 300s (model max audio 0s)
=== window 1 @ 00:00.0 (176 000 samples) ===
lang : aborted: False truncated: False
full : And so my fellow Americans ask not what your country can do for you, ask what you can do for your country.
=== summary ===
windows: 1
Compute: the GPU is used by default
transcribe runs on the GPU whenever one initializes — no flag needed. The
compute: line above reports the backend the model actually landed on (from
the native transcribe_model_backend), so you can see it rather than assume it.
The default is the upstream AUTO policy: every discrete GPU is probed before
the integrated ones, and the CPU is the last-resort fallback. A machine with no
usable GPU still works; the line then says so explicitly.
To pin it, or to force a backend:
transcribe jfk.wav --list-devices # what this build/machine can see
transcribe jfk.wav --backend cpu # strict CPU, no GPU
transcribe jfk.wav --backend cuda # require CUDA (errors if unavailable)
transcribe jfk.wav --device 1 # that exact device, from the list
--list-devices output (the columns and layout are the real format; the devices
shown are illustrative, not a specific machine):
index kind type memory device
0 vulkan GPU 8.0 GB NVIDIA RTX 4090
1 vulkan IGPU 11.4 GB Intel Iris Xe
2 cpu CPU 31.2 GB AMD Ryzen 9 7950X
--backend accepts auto (default), cpu, cpu-accel, metal, vulkan,
cuda, rocm. A forced backend or device is never silently retried
elsewhere: if it is unavailable, or does not match, the run fails with a clear
message. The bundled runtimes include Vulkan (Windows/Linux) and Metal (macOS);
CUDA needs your own build (see Using CUDA). Whether the GPU is
faster depends on the model, the audio length and your hardware — the tool
reports the device it used and the measured time, it does not promise a
speed-up.
Choose a model
The model argument accepts three forms:
transcribe audio.wav --model whisper-tiny # curated alias (72 across all families)
transcribe audio.wav --model whisper-tiny --quant Q8_0
transcribe audio.wav /path/to/my-model.gguf # local file, fully offline
transcribe audio.wav handy-computer/parakeet-tdt-0.6b-v3-gguf/parakeet-tdt-0.6b-v3-Q5_K_M.gguf
--list-models prints every alias with its quantization, license and size, and
flags non-commercial licenses; --model-info <alias> gives the full record
(pinned revision, sha256, license URL). Excerpts:
$ transcribe --list-models
alias quant license size
breeze-asr-25 Q5_K_M apache-2.0 1106 MB
canary-1b Q5_K_M cc-by-nc-4.0 ! 798 MB
parakeet-tdt-0.6b-v3 Q5_K_M cc-by-4.0 523 MB
whisper-large-v3-turbo Q5_K_M apache-2.0 590 MB
…
! = non-commercial license; verify before any commercial use.
$ transcribe --model-info whisper-tiny
whisper-tiny
repo : handy-computer/whisper-tiny-gguf
revision : 2678cc66038359b97c8e6fd6454c56fc9006d571
quant : Q5_K_M
file : whisper-tiny-Q5_K_M.gguf
size : 42 MB
license : apache-2.0
license url: https://huggingface.co/handy-computer/whisper-tiny-gguf
Any GGUF that transcribe.cpp supports works through the generic
<owner>/<repo>/<file.gguf>[@<revision>] form, so the alias list is a
convenience, not a limit. Two differences from an alias: the license is unknown
(only the model card is linked) and, unless you pin @<revision>, the current
revision is looked up on HuggingFace on every run — the cache is still used,
but the run is not offline. Models are cached under
$XDG_CACHE_HOME/TranscribeCppSharp/models (%LOCALAPPDATA% on Windows,
~/Library/Caches on macOS); weights are never bundled with the tool. See
Model licenses before using a model commercially.
Export the transcript
--out writes the transcript to a file; --format picks the shape:
--format |
Output |
|---|---|
plain (default) |
header comments + timestamped lines |
vtt |
WebVTT, with speaker cues |
json |
{"language", "text", "segments":[{start,end,speaker,text}]} |
transcribe jfk.wav --model whisper-tiny --out jfk.vtt --format vtt
WEBVTT
NOTE source: /audio/jfk.wav
NOTE audio 00:00:11 model whisper/whisper-tiny lang en diarize on window 300s generated 2026-01-01 09:00:00
00:00:00.000 --> 00:00:10.500
<v Speaker 0>And so my fellow Americans ask not what your country can do for you, ask what you can do for your country.</v>
NOTE done 2026-01-01 09:00:00
Real output, with the input path and timestamps replaced by placeholders. The
NOTE source line records the absolute path of the input file, as does the
# source header of the plain format.
--format json writes the language, the full text and the segments, with times
in seconds:
{
"language": "en",
"text": "And so my fellow Americans ask not what your country can do for you, ask what you can do for your country.",
"segments": [
{"start":0,"end":10.5,"speaker":0,"text":"And so my fellow Americans ask not what your country can do for you, ask what you can do for your country."}
]
}
Long audio and speaker diarization
Audio longer than one window is split with a 1 s overlap and deduplicated;
--chunk sets the window size in seconds (default 300, lowered automatically if
the model reports a smaller maximum).
Diarization is on by default and the default model is moss-transcribe-diarize
(667 MB), which attributes each segment to a speaker. Use --no-diarize to turn
it off. Speaker attribution only happens with a diarization-capable model: on
other models (Whisper, Parakeet, …) the native library prints a warning and
every segment is reported as Speaker 0.
Audio input
16 kHz mono 16-bit WAV is read directly. Any other format (ogg, mp3, m4a, …) is
decoded by shelling out to ffmpeg, which must be installed and on PATH.
Convert it yourself if you prefer:
ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav
All options
$ transcribe --help
Transcribe audio with a speech-to-text model. Supports every model family
that transcribe.cpp supports (Whisper, Moonshine, Parakeet, Canary, GigaAM,
Voxtral, Qwen3-ASR, MOSS diarization, …).
Usage: transcribe <audio> [model] [options]
<audio> WAV (16 kHz mono 16-bit) read directly; any other
format (ogg, mp3, m4a, …) is decoded with ffmpeg
(must be installed)
[model] a model file path, a known alias (default:
moss-transcribe-diarize), or a HuggingFace spec
'<owner>/<repo>/<file.gguf>[@<revision>]'.
Aliases and any other supported GGUF are downloaded
from HuggingFace on first use and cached.
--model <m> same as the [model] argument
--quant <q> quantization for a known alias (e.g. Q4_K_M, Q5_K_M,
Q8_0, F16); default is per model (see --list-models)
--list-models list the known model aliases and exit
--model-info <alias> show details (revision, size, license) for one alias
--lang <code> language code for the decoder (default: en)
--chunk <sec> max per-transcription window in seconds (default: 300);
long audio is split with 1 s overlap and deduplicated
--no-diarize disable speaker diarization
--out <file> write the transcript to a file; format controlled
by --format (plain/vtt/json)
--format <fmt> transcript file format: plain (default, timestamped
lines), vtt (WebVTT, speaker cues) or json
(whisper-style segments)
--help show this help
What the CLI does not do
Stated plainly, so nothing is implied:
- One file per run. No batch or directory input.
- No interactive/streaming mode. Each window is transcribed to completion; see Real-Time Streaming for the incremental API.
- Blocking. Transcription runs on the calling thread, as in the native library (Concurrency Model).
- Not covered by CI end to end. The CI pipeline builds and packs the tool,
and unit-tests its device-selection policy, but never runs a real
transcription through it (no GPU on the runners); the automated integration
tests exercise the library, not
transcribe.
Quick Start
Basic Transcription
Model.Load initializes the compute backends automatically on first use, but you can (and for custom setups, should) do it explicitly with Backends.InitDefault():
Backends.InitDefault(); // optional: automatic in Model.Load, but explicit is clearer
var modelPath = TestConfig.ModelPath; // your GGUF model file, e.g. "test-models/ggml-tiny.bin"
var audioPath = TestConfig.AudioPath; // your WAV audio file, e.g. "test-audio/jfk.wav"
using var model = Model.Load(modelPath, p => p.WithBackend(BackendRequest.BackendCpu));
using var session = model.CreateSession();
var pcm = PcmExtensions.ReadWavToPcm(audioPath);
var transcript = session.Run(pcm);
Batch Processing
Backends.InitDefault(); // optional: automatic in Model.Load, but explicit is clearer
var modelPath = TestConfig.ModelPath; // your GGUF model file, e.g. "test-models/ggml-tiny.bin"
var audioPath = TestConfig.AudioPath; // your WAV audio file, e.g. "test-audio/jfk.wav"
using var model = Model.Load(modelPath, p => p.WithBackend(BackendRequest.BackendCpu));
using var session = model.CreateSession();
var pcm1 = PcmExtensions.ReadWavToPcm(audioPath);
var pcm2 = PcmExtensions.ReadWavToPcm(audioPath);
var results = Batch.Run(session, new[] { pcm1, pcm2 });
Real-Time Streaming
stream.Begin();
int chunkSize = 16000; // 1 second
for (int i = 0; i < pcm.Length; i += chunkSize)
{
int length = Math.Min(chunkSize, pcm.Length - i);
var chunk = pcm.AsSpan(i, length);
stream.Feed(chunk);
}
stream.Complete();
var text = stream.GetCurrentText();
Features
- Command-Line Tool:
transcribetranscribes a file with 72 curated models across every family transcribe.cpp supports, on the GPU by default, with speaker diarization and plain/WebVTT/JSON export. See Command-line tool. - Multi-Model: Loads GGUF models for the model families supported by transcribe.cpp (Whisper, Moonshine, Parakeet, Canary, GigaAM, and others — 16 families upstream).
- Hardware Acceleration: The bundled runtimes include CPU, Vulkan (Windows/Linux) and Metal (macOS) backends. See Using CUDA for NVIDIA GPUs.
- Modern .NET: Uses
LibraryImportfor interop andSafeHandlefor native resource lifetime. - Flexible APIs:
- High-Level Wrapper: Intuitive C# API for rapid development.
- Low-Level Interop: Direct access to the native C API when needed.
- Streaming & Batch: Support for incremental streaming transcription and batch processing.
- Cross-Platform: Pre-compiled native runtimes are packaged for Windows, Linux, and macOS (x64 and ARM64). Build and test run on Linux, macOS and Windows in CI.
Using CUDA
The NuGet packages do not bundle a CUDA runtime (the bundled binaries are CPU + Vulkan on Windows/Linux and Metal on macOS). The upstream releases do include CUDA archives, but shipping and supporting CUDA builds is out of scope for this packaging layer — so to use an NVIDIA GPU you provide your own CUDA build of transcribe.cpp and place it next to your app; the wrapper prefers native binaries in the app output directory over the packaged ones.
Download the upstream CUDA archive for your platform (this project is bound to transcribe.cpp v0.2.4):
- Linux x64:
transcribe-native-0.2.4-linux-x86_64-cuda.tar.gz - Windows x64:
transcribe-native-0.2.4-windows-x86_64-cuda.tar.gz
from the transcribe.cpp v0.2.4 release.
- Linux x64:
Extract it and copy
libtranscribe.so(Linux) ortranscribe.dll(Windows) — plus the siblinglibggml*.so/ggml*.dllfiles — into your app's output directory (where your.dll/.exeis produced).Request the CUDA backend at load time:
using var model = Model.Load("model.gguf", p => p .WithBackend(BackendRequest.BackendCuda)); // Exact device: enumerate and pass the handle (omit for automatic selection) var cuda = Backends.EnumerateDevices().First(d => d.Kind == "cuda"); using var modelOnGpu = Model.Load("model.gguf", p => p.WithDevice(cuda));You can verify CUDA is actually available in the current build with
BackendAvailable(BackendRequest.BackendCuda). If no CUDA build is installed, that returnsfalseand aBackendCudarequest will fail withErrBackend.
Concurrency Model
All transcription calls (Session.Run, Batch.Run, etc.) are blocking. This mirrors the native library, whose C API is fully synchronous (no async entry points); the wrapper does not add a "fake" async-over-sync layer on top.
Recommended Patterns
- Desktop/CLI Apps: Run transcription on a background thread using
Task.Run()to keep the UI responsive. - Web APIs (ASP.NET Core): Use a pool of
Sessionobjects combined with aSemaphoreSlimto limit concurrent native calls and prevent thread pool starvation.
// Example: Pooling sessions in a service
private readonly SemaphoreSlim _semaphore = new(Environment.ProcessorCount);
public async Task<string> TranscribeAsync(float[] pcm)
{
await _semaphore.WaitAsync();
try {
return await Task.Run(() => _session.Run(pcm).FullText);
} finally {
_semaphore.Release();
}
}
Architecture
The project is divided into several layers, each with a distinct responsibility:
TranscribeCppSharp.Native.*(Runtimes): Platform-specific packages containing the pre-compiled nativelibtranscribebinaries.TranscribeCppSharp.Interop(Low-level): Auto-generated P/Invoke declarations usingLibraryImport.TranscribeCppSharp(High-level): Idiomatic C# abstraction layer providingIDisposableresources and typed exceptions.TranscribeCppSharp.Cli(Command-line tool): Thetranscribe.NET tool, a consumer of the high-level wrapper. It adds model resolution/download/caching, windowing and transcript export on top of it.Generator(Tool): Ensures C# bindings stay in sync with the upstream native API by parsing Rust FFI definitions.
Native Library Loading
A DllImportResolver registered in the Interop layer finds libtranscribe in the app output directory (including the runtimes/<rid>/native/ layout), the NuGet global packages folder, or lets the runtime's default resolution (.deps.json runtime targets) handle it — without requiring LD_LIBRARY_PATH. Its libggml* dependencies are loaded from the same directory by the native loader.
Error Handling
The high-level wrapper throws TranscribeException when a native call fails. You can filter by StatusCode to handle specific errors.
Note: See the Status enum in the TranscribeCppSharp.Interop namespace for the full list of error codes.
Model Capabilities
Query what a loaded model supports:
Backends.InitDefault(); // optional: automatic in Model.Load, but explicit is clearer
var modelPath = TestConfig.ModelPath; // your GGUF model file, e.g. "test-models/ggml-tiny.bin"
using var model = Model.Load(modelPath, p => p.WithBackend(BackendRequest.BackendCpu));
var supportsPnc = model.Supports(Feature.FeaturePnc);
var caps = model.GetCapabilities();
Thread Safety
The native library and this wrapper are not thread-safe by default. The relevant rules:
- Concurrent compute is limited: at most one
Session.Run,Batch.Run, or active stream may be in flight across all sessions of the same model at a time. Sessions share the model's backend instances and some per-family state, so overlapping runs on the same model race (per the upstream library: corrupted decodes on CPU, command-buffer failures on Metal). This is a known limitation of the upstream native library in 0.x, documented in its public header (see "KNOWN 0.x LIMITATION — concurrent COMPUTE"), not something this wrapper imposes or can lift.- For parallel transcription, load one model per worker (each worker gets its own
Model, hence its own backend instances). - Serialized use of many sessions on one model (e.g. a session pool behind a mutex) is fully supported.
- For parallel transcription, load one model per worker (each worker gets its own
Model: believed thread-safe for creating sessions — you can create multipleSessionobjects from a singleModelinstance across different threads, as long as their runs do not overlap (see the concurrent-compute limit above). Not covered by concurrency tests yet.Session: Not thread-safe. A session maintains internal state (KV cache) for transcription. Do not run two operations on the same session concurrently; serialize them or use separate sessions.Batch: Not thread-safe. Calls into the provided session internally. Use separate sessions for concurrent batch processing.StreamSession: Not thread-safe. It is a view over aSessionand shares its state.
Dispose discipline: dispose explicitly (
using/Dispose()) — do not rely on the GC finalizer for cleanup. The native contract requires the model to outlive its sessions, and while aSessionkeeps its parentModelalive for the session's lifetime, the order in which finalizers run during GC-only collection is not guaranteed. Dispose theStreamSession/Sessionbefore theirModel(theusing var model; using var session;declaration order does this). This is consistent with the upstream requirement thattranscribe_model_freebe called only after all derived contexts are freed.
Memory and disk usage depend on the model file, quantization, and backend you use. These are not documented here; refer to the model documentation and transcribe.cpp for accurate numbers.
Versioning & Compatibility
Two version numbers are in play, decoupled on purpose:
TranscribeCppSharp(this wrapper) follows Semantic Versioning (SemVer) for its own C# API. Breaking API changes bump the major/minor version of the wrapper. The user-facing packagesTranscribeCppSharp.Bundle(meta-package) andTranscribeCppSharp.Cli(thetranscribetool) follow the wrapper's version too.TranscribeCppSharp.Interopand theTranscribeCppSharp.Native.*runtime packages are versioned to match the upstreamtranscribe.cppversion they bind to (e.g.0.2.4= transcribe.cpp v0.2.4). They track the ABI, not the wrapper's API.
So TranscribeCppSharp 0.3.1 depends on TranscribeCppSharp.Interop 0.2.4; TranscribeCppSharp.Bundle 0.3.1 pulls a wrapper and the native runtime packages of the matching upstream version. A later upstream release will ship as a new Interop/Native version without necessarily changing the wrapper's own version. The correspondence between a wrapper release and the upstream version it targets is recorded in CHANGELOG.md.
Attribution
This project is a packaging and binding effort only — the underlying library is not my work:
- The native library (
transcribe.cpp) is developed and owned by the transcribe.cpp authors (MIT License). - The bundled native components (ggml, etc.) are owned by their respective authors; their MIT license texts are distributed alongside the binaries in the
TranscribeCppSharp.Native.*packages. - I did not author the native library and claim no credit for it. This repository only adds:
- A C# interop layer (auto-generated P/Invoke bindings via
LibraryImport). - A high-level C# wrapper (
IDisposableresources, typed exceptions). - A command-line tool (
transcribe) and the model manifest it resolves against. - Pre-built native binaries packaged for .NET consumption.
- A C# interop layer (auto-generated P/Invoke bindings via
The transcribe.cpp project is an independent upstream project; bug reports about the native library itself should go to its repository.
Development
Prerequisites
- .NET 10.0 or later.
- Native libraries (can be fetched using the provided script).
Building and Testing
# Download native libraries for your current platform
dotnet run --project tools/FetchNative
# Run unit and integration tests
./scripts/run-integration-tests.sh
# Opt-in: also fetch the MOSS diarization model (~617 MB) and run the
# speaker-attribution test
WITH_DIARIZATION_MODEL=1 ./scripts/run-integration-tests.sh
# Run the smoke test sample
dotnet run --project samples/SmokeTest -- model.gguf audio.wav
# Run the CLI from source (see "Command-line tool" for the installed tool).
# WAV is read directly; other formats (ogg, mp3, …) are decoded with ffmpeg.
dotnet run --project src/TranscribeCppSharp.Cli -- audio.ogg
Both need tools/FetchNative to have run first, so the native libraries are in
the output directory.
Building from source
The Native.* packages redistribute exactly what upstream transcribe.cpp publishes in its releases — nothing more. This project is a packaging/binding layer, not a binary provider: it does not compile musl, CUDA, or other variant builds. If a variant you need is not in the upstream release, building it yourself is on you.
You need to build from source when:
- You are using Alpine Linux (which uses
muslinstead ofglibc, making the pre-built Linux binaries incompatible). Upstream transcribe.cpp does not ship musl builds, so there is noNative.*package to install for this case. - You need to support a non-standard architecture or custom OS.
- You want to enable specific hardware optimizations not included in the default build.
Steps:
- Clone transcribe.cpp.
- Build the native library using
cmake(ensureBUILD_SHARED_LIBS=ON). On Alpine, build inside the distro so the resulting library links againstmusl. - Copy the resulting
libtranscribe.so(or.dll/.dylib) — and the siblinglibggml*.sofiles it loads — into your application's output directory. As with Using CUDA, the wrapper prefers native binaries in the app output directory over the packaged ones, so noLD_LIBRARY_PATHis needed. The C# interop contract is unchanged: only the native binaries differ, not the P/Invoke signatures.
Governance
Security
To report a security vulnerability, please use the GitHub Security Advisory feature.
License
This project is licensed under the MIT License (matching transcribe.cpp).
Model licenses
The MIT license covers this wrapper and the bundled native library, not the models you load with it. GGUF models come from different ecosystems with different licenses — some are permissive (MIT, Apache-2.0), some are non-commercial (e.g. CC-BY-NC-4.0 for some Parakeet/Canary variants). This project does not bundle or redistribute models, and it does not verify or curate their licenses.
Before using a model in a commercial product, check the license on the page you download it from (typically Hugging Face). The upstream transcribe.cpp docs describe each supported family and where its models come from; that is the source of truth, not this README.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- TranscribeCppSharp.Interop (>= 0.2.4)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on TranscribeCppSharp:
| Package | Downloads |
|---|---|
|
TranscribeCppSharp.Bundle
Convenience meta-package: the TranscribeCppSharp wrapper plus the native transcribe.cpp binaries for every supported platform. Install this to get running on any OS; for a minimal footprint install TranscribeCppSharp plus the matching TranscribeCppSharp.Native.<rid> package instead. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.3.1 | 0 | 9/26/2026 |
| 0.3.1-preview.185 | 0 | 9/26/2026 |
| 0.3.1-preview.183 | 0 | 9/26/2026 |
| 0.3.0 | 69 | 9/23/2026 |
| 0.3.0-preview.182 | 0 | 9/26/2026 |
| 0.3.0-preview.181 | 0 | 9/26/2026 |
| 0.3.0-preview.180 | 0 | 9/26/2026 |
| 0.3.0-preview.179 | 0 | 9/26/2026 |
| 0.3.0-preview.178 | 0 | 9/26/2026 |
| 0.3.0-preview.176 | 39 | 9/23/2026 |
| 0.3.0-preview.174 | 39 | 9/23/2026 |
| 0.2.0-preview.173 | 38 | 9/23/2026 |
| 0.2.0-preview.172 | 35 | 9/23/2026 |
| 0.2.0-preview.171 | 36 | 9/23/2026 |
| 0.2.0-preview.170 | 33 | 9/23/2026 |
| 0.2.0-preview.168 | 40 | 9/23/2026 |
| 0.2.0-preview.167 | 48 | 9/16/2026 |
| 0.2.0-preview.166 | 53 | 9/16/2026 |
| 0.2.0-preview.165 | 48 | 9/16/2026 |
| 0.2.0-preview.164 | 42 | 9/16/2026 |