Empezar
¿Prefieres una API gestionada? La misma transcripción, síntesis y clonación como servicio — compatible con OpenAI y ElevenLabs. soniqo.audio/cloud →
Instala la CLI speech para transcribir y generar audio en tu Mac con Apple Silicon. Usa el SDK de Swift para añadir procesamiento de voz a tus aplicaciones de macOS e iOS.
Requisitos de la CLI
- macOS 15+ (Sequoia o posterior)
- Apple Silicon (arm64)
- 8 GB de RAM mínimo (16 GB recomendado para modelos más grandes)
Instalar la CLI
Homebrew (CLI)
Usa Homebrew nativo para ARM (/opt/homebrew) para instalar speech y el servidor HTTP/WebSocket speech-server.
brew install speech
speech --help
Primera tarea: transcribir un archivo M4A
Descarga la grabación de ejemplo y transcríbela en la terminal:
Conéctate a internet para la primera ejecución. El modelo seleccionado se descarga desde HuggingFace y queda en la caché de tu Mac. Tras la configuración, puedes usarlo para transcribir grabaciones locales sin conexión.
curl -fL https://soniqo.audio/audio/samples/cli/transcription-sample.m4a -o transcription-sample.m4a
speech transcribe transcription-sample.m4a --engine parakeet
Continuar con la guía de M4A a texto.
Inicio rápido: texto a voz
speech speak "Hello, world!" --output hello.wav
Ejecutar una API de voz local
Inicia el servidor HTTP/WebSocket para atender solicitudes locales a la API:
speech-server --port 8080
SDK de Swift
Añade los módulos de Swift a tu aplicación para macOS 15+ o iOS 18+ con Swift Package Manager.
Swift Package Manager
Añade speech-swift a las dependencias de tu Package.swift:
dependencies: [
.package(url: "https://github.com/soniqo/speech-swift", branch: "main")
]
Luego añade los módulos que necesites a tu target:
.target(
name: "MyApp",
dependencies: [
.product(name: "Qwen3ASR", package: "speech-swift"),
.product(name: "Qwen3TTS", package: "speech-swift"),
.product(name: "SpeechVAD", package: "speech-swift"),
// ... add any modules you need
]
)
Módulos disponibles
| Módulo | Descripción |
|---|---|
Qwen3ASR | Voz a texto (Qwen3-ASR) |
WhisperASR | voz a texto (Whisper Large-v3 Turbo, CoreML) |
ParakeetASR | Voz a texto (Parakeet TDT, CoreML) |
Qwen3TTS | Texto a voz (Qwen3-TTS) |
CosyVoiceTTS | Texto a voz (CosyVoice3, multilingüe) |
KokoroTTS | Texto a voz (Kokoro-82M, CoreML, listo para iOS) |
Qwen3Chat | Chat LLM en el dispositivo (Qwen3.5-0.8B, MLX + CoreML) |
PersonaPlex | Voz a voz (PersonaPlex 7B) |
SpeechVAD | VAD (Silero + Pyannote), diarización, embeddings de hablante |
SpeechEnhancement | Supresión de ruido (DeepFilterNet3, CoreML) |
AudioCommon | Protocolos compartidos, E/S de audio, descargador de HuggingFace |
Transcribir audio con Swift
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)
Generar voz con Swift
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"))
Compilar desde el código fuente
Para compilar desde el código fuente, instala Xcode 16.3+ con Metal Toolchain y Swift 6+. Clona el repositorio, compila la CLI y comprueba el ejecutable del directorio de trabajo:
git clone https://github.com/soniqo/speech-swift.git
cd speech-swift
make build
.build/release/speech --help
make build compila la librería de shaders MLX Metal automáticamente. Sin ella, la inferencia en GPU se ejecuta ~5x más lenta debido a la compilación JIT de shaders.
Los shaders se compilan para macOS 15.0 y Metal 3.2 por defecto, incluso con SDK más recientes. En compilaciones personalizadas, MACOSX_DEPLOYMENT_TARGET y MLX_METAL_LANGUAGE_VERSION cambian estos valores; destinos superiores pueden excluir sistemas antiguos. Los cambios del compilador, SDK, opciones, script o fuentes invalidan la caché. Si falla la compilación o el enlace, se conservan la biblioteca anterior y el hash de caché.
Descargas de modelos
Los modelos se descargan automáticamente desde HuggingFace en el primer uso y se almacenan en ~/Library/Caches/qwen3-speech/.
Todos los modelos se descargan desde HuggingFace en el primer uso. Tamaños aproximados:
| Modelo | Tamaño | Uso de 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 |
| Whisper Large-v3 Turbo (CoreML FP16) | 1.6 GB | ~384 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 GB | ~2 GB pico |
| Qwen3-TTS 1.7B (4-bit) | 3.2 GB | ~4 GB pico |
| CosyVoice3 (4-bit LLM) | 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 pasos
- Continuar con la guía de M4A a texto
- Referencia de CLI — todos los comandos y opciones disponibles
- Guía de Qwen3-ASR — documentación detallada de voz a texto
- Guía de Qwen3-TTS — documentación detallada de texto a voz
- API y protocolos — protocolos y tipos compartidos