Bắt đầu

speech-swift cung cấp khả năng xử lý giọng nói bằng AI trên thiết bị cho macOS và iOS chạy trên Apple Silicon. Các mô hình chạy cục bộ thông qua MLX (Metal GPU) và CoreML (Neural Engine).

Yêu cầu

Cài đặt

Homebrew (CLI)

Cách nhanh nhất để dùng thử speech-swift trên macOS. Cài đặt cả CLI speech và máy chủ HTTP/WebSocket speech-server (endpoint /v1/realtime tương thích OpenAI). Yêu cầu Homebrew ARM gốc (/opt/homebrew).

brew install speech

Sau khi cài đặt, cả hai tệp thực thi đều có sẵn trong PATH của bạn:

speech transcribe recording.wav
speech speak "Hello, world!" --output hello.wav
speech-server --port 8080            # máy chủ HTTP / WebSocket cục bộ

Swift Package Manager

Thêm speech-swift vào các phụ thuộc trong Package.swift của bạn:

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

Sau đó thêm các module bạn cần vào 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
    ]
)

Các module có sẵn

ModuleMô tả
Qwen3ASRGiọng nói thành văn bản (Qwen3-ASR)
ParakeetASRGiọng nói thành văn bản (Parakeet TDT, CoreML)
Qwen3TTSVăn bản thành giọng nói (Qwen3-TTS)
CosyVoiceTTSVăn bản thành giọng nói (CosyVoice3, đa ngôn ngữ)
KokoroTTSVăn bản thành giọng nói (Kokoro-82M, CoreML, sẵn sàng cho iOS)
Qwen3ChatChat LLM trên thiết bị (Qwen3.5-0.8B, MLX + CoreML)
PersonaPlexGiọng nói tới giọng nói (PersonaPlex 7B)
SpeechVADVAD (Silero + Pyannote), phân tách người nói, embedding người nói
SpeechEnhancementKhử nhiễu (DeepFilterNet3, CoreML)
AudioCommonGiao thức dùng chung, I/O âm thanh, trình tải HuggingFace

Biên dịch từ mã nguồn

Sao chép kho mã và biên dịch:

git clone https://github.com/soniqo/speech-swift.git
cd speech-swift
make build
Quan trọng

make build sẽ tự động biên dịch thư viện shader MLX Metal. Nếu không có nó, suy luận trên GPU chạy chậm hơn ~5 lần do phải biên dịch shader theo kiểu JIT.

Khởi động nhanh: chuyển âm thanh thành văn bản

CLI

# Chuyển một tệp WAV thành văn bản
.build/release/speech transcribe recording.wav

API 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)

Các mô hình được tải tự động từ HuggingFace ở lần dùng đầu tiên và lưu trong ~/Library/Caches/qwen3-speech/.

Khởi động nhanh: văn bản thành giọng nói

CLI

# Tạo giọng nói
.build/release/speech speak "Hello, world!" --output hello.wav

API 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"))

Tải mô hình

Tất cả các mô hình đều được tải từ HuggingFace ở lần dùng đầu tiên. Kích thước ước tính:

Mô hìnhKích thướcSử dụng 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 GB~2 GB đỉnh
Qwen3-TTS 1.7B (4-bit)3.2 GB~4 GB đỉnh
CosyVoice3 (4-bit LLM)1.2 GB~1.5 GB đỉnh
Kokoro-82M (CoreML INT8)89 MB~200 MB đỉnh
Qwen3.5-Chat 0.8B (INT4 MLX)418 MB~700 MB đỉnh
Qwen3.5-Chat 0.8B (INT8 CoreML)981 MB~1.2 GB đỉnh
PersonaPlex 7B (8-bit) khuyến nghị9.1 GB~11 GB đỉnh
PersonaPlex 7B (4-bit)4.9 GB~6.5 GB đỉnh
Pyannote VAD5.7 MB~20 MB đỉnh
Silero VAD v51.2 MB~5 MB đỉnh
WeSpeaker ResNet3425 MB~50 MB đỉnh
DeepFilterNet3 (FP16)4.2 MB~10 MB đỉnh

Bước tiếp theo