Начало работы

speech-swift обеспечивает обработку речи ИИ на устройстве для macOS и iOS на Apple Silicon. Модели работают локально через MLX (Metal GPU) и CoreML (Neural Engine).

Требования

Установка

Homebrew (CLI)

Самый быстрый способ попробовать speech-swift на macOS. Устанавливает одновременно CLI speech и HTTP/WebSocket-сервер speech-server (совместимый с OpenAI эндпоинт /v1/realtime). Требуется нативный ARM-Homebrew (/opt/homebrew).

brew install speech

После установки оба бинарника доступны в вашем PATH:

speech transcribe recording.wav
speech speak "Hello, world!" --output hello.wav
speech-server --port 8080            # локальный HTTP / WebSocket сервер

Swift Package Manager

Добавьте speech-swift в зависимости Package.swift:

dependencies: [
    .package(url: "https://github.com/soniqo/speech-swift", branch: "main")
]

Затем добавьте нужные модули в ваш таргет:

.target(
    name: "MyApp",
    dependencies: [
        .product(name: "Qwen3ASR", package: "speech-swift"),
        .product(name: "Qwen3TTS", package: "speech-swift"),
        .product(name: "SpeechVAD", package: "speech-swift"),
        // ... добавьте нужные модули
    ]
)

Доступные модули

МодульОписание
Qwen3ASRРаспознавание речи (Qwen3-ASR)
ParakeetASRРаспознавание речи (Parakeet TDT, CoreML)
Qwen3TTSСинтез речи (Qwen3-TTS)
CosyVoiceTTSСинтез речи (CosyVoice3, многоязычный)
KokoroTTSСинтез речи (Kokoro-82M, CoreML, готов для iOS)
Qwen3ChatЛокальный LLM-чат (Qwen3.5-0.8B, MLX + CoreML)
PersonaPlexРечь в речь (PersonaPlex 7B)
SpeechVADVAD (Silero + Pyannote), диаризация, эмбеддинги спикеров
SpeechEnhancementПодавление шума (DeepFilterNet3, CoreML)
AudioCommonОбщие протоколы, аудио I/O, загрузчик HuggingFace

Сборка из исходников

Клонируйте репозиторий и соберите:

git clone https://github.com/soniqo/speech-swift.git
cd speech-swift
make build
Важно

make build автоматически компилирует библиотеку Metal-шейдеров MLX. Без неё GPU-инференс работает примерно в 5 раз медленнее из-за JIT-компиляции шейдеров.

Быстрый старт: транскрипция аудио

CLI

# Транскрибировать WAV-файл
.build/release/speech transcribe recording.wav

Swift API

import Qwen3ASR

let model = try await Qwen3ASRModel.fromPretrained()
// audioSamples: [Float] PCM at 16 kHz (e.g. decoded from a WAV)
let text = model.transcribe(audio: audioSamples, sampleRate: 16000)
print(text)

Модели автоматически скачиваются с HuggingFace при первом использовании и кэшируются в ~/Library/Caches/qwen3-speech/.

Быстрый старт: синтез речи

CLI

# Сгенерировать речь
.build/release/speech speak "Hello, world!" --output hello.wav

Swift API

import Qwen3TTS
import AudioCommon

let model = try await Qwen3TTSModel.fromPretrained()
let audio = model.synthesize(text: "Hello, world!", language: "english")
try WAVWriter.write(samples: audio, sampleRate: 24000, to: URL(filePath: "hello.wav"))

Загрузка моделей

Все модели скачиваются с HuggingFace при первом использовании. Примерные размеры:

МодельРазмерИспользование RAM
Qwen3-ASR 0.6B (4-bit MLX)680 MB~1.0 GB peak
Qwen3-ASR 0.6B (8-bit MLX)1.0 GB~1.3 GB peak
Qwen3-ASR 0.6B (CoreML INT8)180 MB~1.4 GB peak
Qwen3-ASR 1.7B (4-bit MLX)2.1 GB~3 GB peak
Qwen3-ASR 1.7B (8-bit MLX)3.2 GB~2.7 GB peak
Parakeet-TDT v3 (CoreML INT8)500 MB~900 MB peak
Omnilingual CTC 300M (4-bit MLX)193 MB~400 MB peak
Omnilingual CTC 300M (CoreML INT8)312 MB~550 MB peak
Qwen3-TTS 0.6B (4-bit)1.7 ГБ~2 ГБ пиковое
Qwen3-TTS 1.7B (4-bit)3.2 ГБ~4 ГБ пиковое
CosyVoice3 (4-bit LLM)1.2 ГБ~1.5 ГБ пиковое
Kokoro-82M (CoreML INT8)89 МБ~200 МБ пиковое
Qwen3.5-Chat 0.8B (INT4 MLX)418 МБ~700 МБ пиковое
Qwen3.5-Chat 0.8B (INT8 CoreML)981 МБ~1.2 ГБ пиковое
PersonaPlex 7B (8-bit) рекомендуется9.1 ГБ~11 ГБ пиковое
PersonaPlex 7B (4-bit)4.9 ГБ~6.5 ГБ пиковое
Pyannote VAD5.7 МБ~20 МБ пиковое
Silero VAD v51.2 МБ~5 МБ пиковое
WeSpeaker ResNet3425 МБ~50 МБ пиковое
DeepFilterNet3 (FP16)4.2 МБ~10 МБ пиковое

Следующие шаги