Primeiros passos
O speech-swift oferece processamento de fala por IA no dispositivo para macOS e iOS em Apple Silicon. Os modelos rodam localmente usando MLX (GPU Metal) e CoreML (Neural Engine).
Requisitos
- macOS 14+ (Sonoma ou posterior)
- Apple Silicon (séries M1, M2, M3, M4)
- Xcode 15.4+ / Swift 6.0+
- 8 GB de RAM no mínimo (16 GB recomendados para modelos maiores)
Instalação
Swift Package Manager
Adicione o speech-swift às dependências do seu Package.swift:
dependencies: [
.package(url: "https://github.com/soniqo/speech-swift", from: "0.0.9")
]
Depois adicione os módulos que você precisa ao seu target:
.target(
name: "MyApp",
dependencies: [
.product(name: "Qwen3ASR", package: "speech-swift"),
.product(name: "Qwen3TTS", package: "speech-swift"),
.product(name: "SpeechVAD", package: "speech-swift"),
// ... adicione quaisquer módulos que você precise
]
)
Módulos disponíveis
| Módulo | Descrição |
|---|---|
Qwen3ASR | Fala para texto (Qwen3-ASR) |
ParakeetASR | Fala para texto (Parakeet TDT, CoreML) |
Qwen3TTS | Texto para fala (Qwen3-TTS) |
CosyVoiceTTS | Texto para fala (CosyVoice3, multilíngue) |
KokoroTTS | Texto para fala (Kokoro-82M, CoreML, pronto para iOS) |
Qwen3Chat | Chat LLM no dispositivo (Qwen3.5-0.8B, MLX + CoreML) |
PersonaPlex | Fala para fala (PersonaPlex 7B) |
SpeechVAD | VAD (Silero + Pyannote), diarização, embeddings de falante |
SpeechEnhancement | Supressão de ruído (DeepFilterNet3, CoreML) |
AudioCommon | Protocolos compartilhados, I/O de áudio, downloader do HuggingFace |
Compilar a partir do código-fonte
Clone o repositório e compile:
git clone https://github.com/soniqo/speech-swift.git
cd speech-swift
make build
Importante
O make build compila a biblioteca de shaders Metal do MLX automaticamente. Sem ela, a inferência em GPU roda ~5x mais lenta devido à compilação JIT dos shaders.
Início rápido: transcrever áudio
CLI
# Transcrever um arquivo WAV
.build/release/audio transcribe recording.wav
API Swift
import Qwen3ASR
let model = try await Qwen3ASRModel.loadFromHub()
let result = try await model.transcribe(audioFile: "recording.wav")
print(result.text)
Os modelos são baixados automaticamente do HuggingFace no primeiro uso e armazenados em cache em ~/Library/Caches/qwen3-speech/.
Início rápido: texto para fala
CLI
# Gerar fala
.build/release/audio speak "Olá, mundo!" --output hello.wav
API Swift
import Qwen3TTS
let model = try await Qwen3TTSModel.loadFromHub()
let audio = try await model.speak("Hello, world!")
try audio.write(to: "hello.wav")
Downloads de modelos
Todos os modelos são baixados do HuggingFace no primeiro uso. Tamanhos aproximados:
| Modelo | Tamanho | Uso de RAM |
|---|---|---|
| Qwen3-ASR 0.6B (4-bit) | 680 MB | ~2,2 GB pico |
| Qwen3-ASR 0.6B (8-bit) | 1.0 GB | ~2,5 GB pico |
| Qwen3-ASR 1.7B (4-bit) | 2.1 GB | ~4 GB pico |
| Parakeet-TDT (CoreML INT8) | 500 MB | ~600 MB pico |
| Qwen3-TTS 0.6B (4-bit) | 1.7 GB | ~2 GB pico |
| Qwen3-TTS 1.7B (4-bit) | 3.2 GB | ~4 GB pico |
| CosyVoice3 (LLM 4-bit) | 1.2 GB | ~1,5 GB pico |
| Kokoro-82M (CoreML INT8) | 89 MB | ~200 MB pico |
| Qwen3.5-Chat 0.8B (INT4 MLX) | 418 MB | ~700 MB pico |
| Qwen3.5-Chat 0.8B (INT8 CoreML) | 981 MB | ~1,2 GB pico |
| PersonaPlex 7B (8-bit) recomendado | 9.1 GB | ~11 GB pico |
| PersonaPlex 7B (4-bit) | 4.9 GB | ~6,5 GB pico |
| Pyannote VAD | 5.7 MB | ~20 MB pico |
| Silero VAD v5 | 1.2 MB | ~5 MB pico |
| WeSpeaker ResNet34 | 25 MB | ~50 MB pico |
| DeepFilterNet3 (FP16) | 4.2 MB | ~10 MB pico |
Próximos passos
- Referência da CLI — todos os comandos e opções disponíveis
- Guia do Qwen3-ASR — documentação detalhada de fala para texto
- Guia do Qwen3-TTS — documentação detalhada de texto para fala
- API e protocolos — protocolos e tipos compartilhados