Архитектура

speech-swift организован как модульный Swift-пакет с общими протоколами, независимыми модулями моделей и единым CLI. Весь инференс выполняется на устройстве через MLX (Metal GPU) или CoreML (Neural Engine).

Граф зависимостей модулей

                    ┌──────────┐
                    │ AudioCLI │  (точка входа)
                    └────┬─────┘
                         │
                  ┌──────┴──────┐
                  │ AudioCLILib │  (команды)
                  └──────┬──────┘
                         │
       ┌─────────┬───────┼───────┬──────────┬──────────────┐
       │         │       │       │          │              │
  ┌────┴───┐ ┌──┴──┐ ┌──┴──┐ ┌─┴────┐ ┌───┴────┐ ┌──────┴───────┐
  │Qwen3ASR│ │Qwen3│ │Cosy │ │Perso-│ │Speech- │ │  Speech-     │
  │Parakeet│ │ TTS │ │Voice│ │naPlex│ │  VAD   │ │Enhancement   │
  └────┬───┘ └──┬──┘ └──┬──┘ └──┬───┘ └───┬───┘ └──────┬───────┘
       │        │       │       │         │             │
       └────────┴───────┼───────┴─────────┘             │
                        │                               │
                 ┌──────┴──────┐                        │
                 │ Qwen3Common │  (общие слои)          │
                 └──────┬──────┘                        │
                        │                               │
                 ┌──────┴──────┐                        │
                 │ AudioCommon │ ◄──────────────────────┘
                 └─────────────┘  (протоколы, аудио I/O)

MOSS Transcribe Diarize

MossTranscribe возвращает сегменты с говорящими и временными метками через нативные CoreML- и MLX-бэкенды. CoreML использует фиксированное состояние на 1 024 токена для коротких записей. MLX использует динамический контекст на 131 072 токена, affine INT5/INT8-веса декодера и необязательные FP16/INT8 KV-кэши. Оба рантайма офлайн и авторегрессионные, без потокового вывода.

VoiceChat 11B

Задача и ссылка: дуплексный speech-to-speech; SALM-Duplex: Efficient and Direct Duplex Modeling for Speech-to-Speech Language Model (Interspeech 2025), указанный в upstream-карточке VoiceChat NVIDIA.

Полный рантайм, M5 Pro 48 ГБ, Release, live-такт 80 мс: INT5 с защищёнными головами даёт пиковый RSS около 8.69 GB; три контролируемых RTF всего пайплайна составили 0.96, 0.96 и 0.99. Оптимизированная INT8 ещё не перемерена.

VoiceChat реализует полный нативный MLX-тракт аудио-в-аудио: каузальное восприятие FastConformer, дуплексные текстовый/функциональный каналы Nemotron-H, автономный текстово-обусловленный декодер EAR-TTS с восемью итерациями MaskGIT и нейронный кодек 22,05 кГц. Потоковый режим хранит ограниченные кэши внимания и каузальной свёртки для каждого слоя, а стабильное восьмикадровое live-окно кодека использует скомпилированный граф. Каждый входной кадр 80 мс создаёт языковое решение, 31 RVQ-код и ровно 1 764 выходных отсчёта. Загрузчик требует полный bundle encoder/ + llm/ + tts/ и отвергает старые экспорты только для понимания. INT5 теперь удерживает средний RTF ниже 1 на протестированном M5 Pro, хотя запас p95 на кадр остаётся небольшим.

Бэкенды инференса

БэкендОборудованиеМодели
MLX Metal GPU Qwen3-ASR, Qwen3-TTS, CosyVoice3, IndexTTS2, Qwen3.5-Chat, PersonaPlex, VoiceChat 11B, Omnilingual ASR (300M / 1B / 3B / 7B), Cohere Transcribe 2B, Voxtral Mini 3B, Pyannote, Silero VAD, WeSpeaker, MOSS Transcribe Diarize, SpeechBrain ECAPA LID
CoreML Neural Engine Энкодер Qwen3-ASR (гибрид), Parakeet TDT, потоковый Parakeet EOU, Omnilingual ASR 300M, Kokoro-82M, Qwen3.5-Chat (опционально), диаризация Sortformer, DeepFilterNet3, Silero VAD (опционально), WeSpeaker (опционально), MOSS Transcribe Diarize, SpeechBrain ECAPA LID
Accelerate CPU (SIMD) Предобработка аудио (STFT, мел, FFT), обработка сигналов

Формат весов моделей

MLX-модели используют формат safetensors с 4-битной или 8-битной квантизацией (размер группы 64). CoreML-модели используют скомпилированный формат .mlmodelc. Скрипты конвертации в scripts/ конвертируют из чекпоинтов PyTorch.

Для Cohere и Voxtral также доступны пакеты MLX с аффинным INT5. MLX не поддерживает аффинный INT7; поддерживаемый вариант повышенного качества — INT8.

МодельПараметрыКвантизацияРазмер на диске
Qwen3-ASR 0.6B (MLX)~600M4-bit / 8-bit680 МБ / 1.0 ГБ
Qwen3-ASR 0.6B (CoreML)~186M (энкодер)INT8~180 МБ
Qwen3-ASR 1.7B (MLX)~1.7B4-bit / 8-bit2.1 ГБ / 3.2 ГБ
Parakeet-TDT 0.6B (CoreML)~600MINT8500 МБ
Whisper Large-v3 Turbo (CoreML)809MFP161.6 GB
MOSS Transcribe Diarize 0.9B (MLX)908.5MFP16 audio + INT5 / INT8 decoder987.0 MiB / 1,200.1 MiB
MOSS Transcribe Diarize 0.9B (CoreML)~900MFP16 / INT8 block-321.7 GB / 1.2 GB
Parakeet-EOU 120M (CoreML)~120MINT8~120 МБ
Omnilingual-ASR-CTC 300M (CoreML)326MINT8312 МБ
Omnilingual-ASR-CTC 300M (MLX)326M4-bit / 8-bit193 МБ / 342 МБ
Omnilingual-ASR-CTC 1B (MLX)1.01B4-bit / 8-bit549 МБ / 1006 МБ
Omnilingual-ASR-CTC 3B (MLX)~3B4-bit / 8-bit1.71 ГБ / 3.16 ГБ
Omnilingual-ASR-CTC 7B (MLX)~7B4-bit / 8-bit3.55 ГБ / 6.63 ГБ
Cohere Transcribe 2B (MLX)2BFP16 / INT5 / INT83.85 / 1.62 / 2.25 GiB
Voxtral Mini 3B 2507 (MLX)3BFP16 / INT5 / INT88.71 / 3.77 / 5.18 GiB
Qwen3-ForcedAligner 0.6B (MLX)~600M4-bit / 8-bit979 МБ / 1.4 ГБ
Qwen3-ForcedAligner 0.6B (CoreML)~600MINT4 / INT8630 МБ / 1.0 ГБ
Qwen3-TTS 0.6B (MLX)~600M4-bit / 8-bit1.7 ГБ / 2.4 ГБ
Qwen3-TTS 1.7B (MLX)~1.7B4-bit / 8-bit3.2 ГБ / 4.8 ГБ
CosyVoice3 0.5B (MLX)~500M4-bit LLM~1.2 ГБ
IndexTTS2 expanded bundle (MLX)1.5B-classFP16 + auxiliary models~4.8 GB
Kokoro-82M (CoreML)82MINT8 (1 bucket)~89 МБ
Qwen3.5-Chat 0.8B (MLX)~800MINT4418 МБ
Qwen3.5-Chat 0.8B (CoreML)~800MINT8981 МБ
PersonaPlex 7B (MLX)~7B4-bit / 8-bit4.9 ГБ / 9.1 ГБ
VoiceChat 11B (MLX)~11BINT5 / INT88.56 GB / 12.11 GB
Pyannote VAD (MLX)~1.49Mfloat32~5.7 МБ
Silero VAD v5~309Kfloat32~1.2 МБ (MLX и CoreML)
WeSpeaker ResNet34~6.6Mfloat32~25 МБ (MLX и CoreML)
SpeechBrain ECAPA VoxLingua10721.25MFP16~40.6 MiB (MLX) / ~40.8 MiB (CoreML)
ReDimNet2-B612.3Mfloat16~25 МиБ (CoreML)
Pyannote Community-1 (CoreML)8.35Mfloat32 + native VBx~32 MB
Sortformer (CoreML)float16~50 МБ
DeepFilterNet3 (CoreML)~2.1MFP16~4.2 МБ
LocalVQE v1.4-AEC (CoreML + C++)200K + 2 742FP16 + FP32~732 КБ

Оптимизации производительности

Обработка аудио

Весь аудио I/O использует PCM Float32. Внутренний ресемплинг выполняет конвертацию форматов:

МодельОжидаемая частотаФормат
Qwen3-ASR16 кГцМоно Float32
Cohere Transcribe 2B16 kHzMono Float32
Voxtral Mini 3B16 kHzMono Float32
Qwen3-TTS24 кГц на выходеМоно Float32
CosyVoice324 кГц на выходеМоно Float32
Kokoro-82M24 кГц на выходеМоно Float32
PersonaPlex24 кГц I/OМоно Float32
Pyannote VAD16 кГцМоно Float32
Silero VAD16 кГцМоно Float32
WeSpeaker16 кГцМоно Float32
SpeechBrain ECAPA LID16 kHzMono Float32
ReDimNet2-B616 кГцМоно Float32
DeepFilterNet348 кГцМоно Float32

Структура исходников

Sources/
  AudioCommon/            Общие протоколы, аудио I/O, захват системного
                          вывода (SystemAudioTap), загрузчик HuggingFace,
                          SentencePieceModel (ридер protobuf)
  MLXCommon/              Утилиты MLX: загрузка весов, хелперы QuantizedLinear,
                          хелпер SDPA multi-head attention, metal budget
  Qwen3Common/            Общие компоненты моделей (KV cache, RoPE, квантизация)
  Qwen3ASR/               Qwen3-ASR распознавание речи
  ParakeetASR/            Parakeet TDT распознавание речи (CoreML)
  ParakeetStreamingASR/   Parakeet EOU 120M потоковая диктовка (CoreML)
  OmnilingualASR/         Meta wav2vec2 + CTC, 1 672 языка
                          (CoreML 300M + MLX 300M / 1B / 3B / 7B)
  CohereTranscribeASR/  Cohere Transcribe 2B speech-to-text (MLX)
  VoxtralASR/            Voxtral Mini 3B speech-to-text (MLX)
  Qwen3TTS/               Qwen3-TTS синтез речи
  CosyVoiceTTS/           CosyVoice3 синтез речи
  KokoroTTS/              Kokoro-82M синтез речи (CoreML)
  Qwen3Chat/              Qwen3.5-0.8B on-device LLM-чат (MLX + CoreML)
  PersonaPlex/            PersonaPlex речь в речь
  SpeechVAD/              VAD (Silero + Pyannote), диаризация, эмбеддинги спикеров
  SpeechLanguageID/       Определение языка речи (SpeechBrain ECAPA, MLX + CoreML, 107 меток)
  SpeechEnhancement/      DeepFilterNet3 подавление шума (CoreML)
  SourceSeparation/       Open-Unmix HQ / UMX-L + HTDemucs (Demucs v4) music source separation (MLX, 4 stems)
  MAGNeTMusicGen/         MAGNeT text-to-music generation (MLX, 30 s @ 32 kHz, INT4/INT8)
  VoxCPM2TTS/             VoxCPM2 text-to-speech (MLX, 48 kHz, voice cloning + voice design)
  IndexTTS2TTS/           IndexTTS2 voice cloning (MLX, semantic GPT + emotion/tempo/pause control + S2Mel + BigVGAN)
  VibeVoiceTTS/           VibeVoice long-form / multi-speaker TTS (MLX, EN/ZH)
  MADLADTranslation/      MADLAD-400 many-to-many translation (MLX, 400+ languages)
  AudioCLILib/            Реализации команд CLI
  AudioCLI/               Точка входа CLI

scripts/              Конвертация моделей (PyTorch → MLX/CoreML), бенчмаркинг
Tests/                Юнит- и интеграционные тесты
Examples/             Демо-приложения (PersonaPlexDemo, SpeechDemo)