Skip to content

Releases: soniqo/speech-swift

v0.0.26

Choose a tag to compare

@ivan-digital ivan-digital released this 17 Aug 08:00

Fixes two defects in the full-duplex VoiceChat CLI.

--no-aec captured no audio and hung. The playback graph was attached after engine.start(), an ordering only AUVoiceProcessingIO tolerates because it is a combined I/O unit that pulls audio regardless. With voice processing disabled the input tap never fired, so the session reported frames 0 and never exited, since frame-driven limits like --max-seconds only advance once frames arrive. The playback graph is now attached before starting when AEC is off; the enabled path is unchanged.

Tool calls were unbounded per user turn. A checkpoint that fell into a repetition pattern could issue dozens of successful calls in a row — one observed session searched reminders for "8 PM", "9 PM", and onward past "36 PM" before crashing. Repeat protection was write-only and the function-start gate arms only on failures, so nothing bounded successful reads. Every tool is now limited to five calls per accepted user turn, resetting on fresh acoustic activity, and returns a structured call_budget_exhausted result beyond it.

v0.0.25

Choose a tag to compare

@ivan-digital ivan-digital released this 16 Aug 09:22
13643ab

Highlights

  • Adds speech voice-chat, a local full-duplex Soniqo VoiceChat demo for Nemotron VoiceChat 11B INT5 with native MCP tool calling, Apple Reminders example configuration, human-readable real-time metrics, and optional debug timelines.
  • Includes the VoiceChat turn-taking, overload recovery, asynchronous tool execution, audio-continuity, and regression coverage developed for the live CLI demo.
  • Pins matching stable MLX dependencies and hardens clean release/Homebrew builds against moving upstream branches and stale SwiftPM caches.

The v0.0.24 binary packaging attempt was superseded by this release.

What's Changed

New Contributors

Full Changelog: v0.0.23...v0.0.25

v0.0.24

Choose a tag to compare

@ivan-digital ivan-digital released this 16 Aug 08:19
a74e177

Important

Superseded by v0.0.25. The v0.0.24 packaging run failed and this release has no binary asset. Use v0.0.25 instead.

Highlights

  • Adds the Nemotron VoiceChat 11B full-duplex MLX runtime and Soniqo terminal voice-chat demo, with model-native turn taking, configurable MCP tools, Apple Reminders integration, and structured latency and acoustic-quality benchmarks.
  • Adds MOSS, Cohere, Voxtral, Canary, and native Nemotron speech-recognition paths, plus timestamped audio capture and LocalVQE acoustic echo cancellation.
  • Adds the CSM speech runtime, an MLX DeepFilterNet3 engine, SpeechBrain ECAPA language identification, and substantial Qwen and Gemma inference performance and reliability improvements.

What's Changed

New Contributors

Full Changelog: v0.0.23...v0.0.24

v0.0.23

Choose a tag to compare

@ivan-digital ivan-digital released this 18 Jul 06:44
c1aa219

Highlights

  • Adds an OpenAI-compatible POST /v1/audio/speech endpoint to speech-server, supporting WAV and raw PCM output for drop-in local TTS integrations.
  • Adds incremental Sortformer streaming, Nemotron emission-aligned word timestamps, and the ReDimNet2-B6 speaker identity encoder.
  • Improves cached Whisper model startup.

What's Changed

Full Changelog: v0.0.22...v0.0.23

v0.0.22

Choose a tag to compare

@ivan-digital ivan-digital released this 14 Jul 22:30
335a68c

DeepFilterNet3 quality

DeepFilterNet3 speech enhancement now matches the reference libdf DSP conventions while retaining the compact Core ML model: 8-bit palettized weights with FP16 compute. On the documented VoiceBank-DEMAND 20-clip benchmark, the Swift path reaches PESQ-WB 3.097, STOI 0.964, and SI-SDR 19.12 dB.

What's Changed

Read more

v0.0.21

Choose a tag to compare

@ivan-digital ivan-digital released this 17 Jun 16:14
7609977

What's Changed

Fix

  • Parakeet TDT CoreML — M5 ANE crash (#314, refs #313). The aufklarer/Parakeet-TDT-v3-CoreML-INT8 repo rebuilt with a multi-encoder iOS18 layout (encoder.mlmodelc 30s + encoder_5s.mlmodelc + encoder_15s.mlmodelc); the prior EnumeratedShapes iOS17 build SIGSEGV'd in bnns::GraphCompile on M5 ANE. Single-shape -30s and -iOS-5s repos were unaffected and continue to ship unchanged.

New

  • encoderVariant: parameter on ParakeetASRModel.fromPretrained. Pick a shape-specific encoder from the multi-encoder repo for short voice-pipeline chunks:
    let model = try await ParakeetASRModel.fromPretrained(
        modelId: "aufklarer/Parakeet-TDT-v3-CoreML-INT8",
        encoderVariant: "5s")
    nil (default) keeps the previous encoder.mlmodelc path so single-shape repos work unchanged.

Performance

  • macOS now prefers .cpuAndNeuralEngine with .cpuAndGPU fallback (was pinned to GPU only because of the historical ANE crash class). M5 Pro warm encoder forward: 8 ms at 5s / 24 ms at 15s / 74 ms at 30s, all on ANE. ~540 MB less peak RSS than GPU on the 30s shape.
  • WER unchanged on LibriSpeech test-clean n=200: 2.37% / 116× RTF / 916 MB peak, matching the published baseline.

CLI

brew upgrade speech   # once homebrew-core formula bumps to v0.0.21

# or build from source
git clone --branch v0.0.21 https://github.com/soniqo/speech-swift.git
cd speech-swift && make build
./.build/release/speech transcribe meeting.wav --engine parakeet

Full Changelog: v0.0.20...v0.0.21

v0.0.20

Choose a tag to compare

@ivan-digital ivan-digital released this 04 Jun 16:30
27cef95

What's Changed

New

  • Nemotron-3.5 ASR Streaming (multilingual) — 40 language-locales, native punctuation and capitalization, cache-aware FastConformer-RNN-T (600 M) on the Apple Neural Engine. New NemotronStreamingASR target. Default model is the CoreML INT8 bundle (612 MB, RTF ≈ 0.07 on M5 Pro). Language is a BCP-47 tag (en-US, de-DE, ja-JP, ...). #294
  • English-only Nemotron bundle still supported through the same target — the runtime introspects the encoder's input description for language_mask and adapts. Older bundles continue to work without code changes. #295

Performance & quality

  • Qwen3-ASR CoreML encoder rebuild — chunked-attention encoder + bench scaffold for cross-engine ASR comparison (Qwen3-ASR, Parakeet TDT, Nemotron, Whisper). #292
  • Parakeet TDT CoreML — default to a single fixed-shape 30 s export (drop EnumeratedShapes) to fix ANE-compile hangs on iOS. #290

Docs

  • CoreML encoder interface description refreshed; M2 Max baselines retired in favour of current M-series numbers. #293

CI

  • CoreML targets pinned to CPU+GPU compute units in CI to avoid ANE-compile hangs. #286 #287 #289

CLI

brew upgrade soniqo/tap/speech

speech transcribe recording.wav --engine nemotron --language en-US
speech transcribe meeting.wav   --engine nemotron --language de-DE
speech transcribe interview.wav --engine nemotron --language ja-JP

--engine nemotron defaults to the multilingual CoreML INT8 bundle from aufklarer/Nemotron-3.5-ASR-Streaming-0.6B-CoreML-INT8 (downloaded on first use, cached under ~/Library/Caches/qwen3-speech/).

v0.0.19

Choose a tag to compare

@ivan-digital ivan-digital released this 28 May 12:25
10aef25

What's Changed

New

  • HTDemucs (Demucs v4) — higher-quality music source separation, +3.01 dB SDR over Open-Unmix (largest gains on bass/drums). speech separate --engine htdemucs. #288
  • OpenAI-compatible transcription/v1/audio/transcriptions server endpoint. #273
  • Qwen3-TTS on CoreML — full Apple Neural Engine routing + chunked decode. #269

Performance & quality

  • 7× faster CoreML ASR — split + batched-prefill decoder, ANE-safe. #282
  • Mastering-grade resampler — drains the filter tail, exact output length, phase-aligned stereo; mastering SRC for music/upsampling, standard for speech. #284
  • Qwen3-TTS bf16 / non-quantized support + ICL stability. #272
  • CosyVoice bf16 bundle support. #280

Fixes

  • Abort wedged Hugging Face downloads instead of hanging. #283
  • Stride-aware, NaN-safe argmax in the CoreML ASR decoder. #278

CLI

speech separate song.wav --engine htdemucs    # Demucs v4 (higher quality)
speech separate song.wav                       # UMX (default)

v0.0.18

Choose a tag to compare

@ivan-digital ivan-digital released this 25 May 15:32
9d355b5

What's Changed

  • StableAudio3MusicGen: Stable Audio 3 Medium INT8 as the new default music-gen engine for `speech compose`. Bit-perfect parity with Stability AI's pure-MLX Python reference, ~16× realtime, stereo 44.1 kHz. MAGNeT stays available via `--engine magnet`. #270

CLI

```bash
speech compose "lofi house loop" # SA3 (default)
speech compose "ambient pad" --engine magnet # old engine
speech compose "..." --sa3-variant medium-int4 --seconds 30
```

v0.0.17

Choose a tag to compare

@ivan-digital ivan-digital released this 24 May 06:01
6af1620

What's Changed

  • release: ship all .bundle resources (fixes compose/magnet on brew) by @ivan-digital in #267

Full Changelog: v0.0.16...v0.0.17