เริ่มต้น

speech-swift มอบความสามารถในการประมวลผลเสียงพูดด้วย AI แบบบนอุปกรณ์สำหรับ macOS และ iOS บน Apple Silicon โมเดลทำงานในเครื่องโดยใช้ MLX (Metal GPU) และ CoreML (Neural Engine)

ข้อกำหนด

การติดตั้ง

Homebrew (CLI)

วิธีที่เร็วที่สุดในการทดลองใช้ speech-swift บน macOS ติดตั้งทั้ง CLI speech และเซิร์ฟเวอร์ HTTP/WebSocket speech-server (endpoint /v1/realtime ที่เข้ากันได้กับ OpenAI) ต้องใช้ ARM Homebrew แบบเนทีฟ (/opt/homebrew)

brew install soniqo/tap/speech

หลังการติดตั้ง ไฟล์ปฏิบัติการทั้งสองจะอยู่ใน PATH ของคุณ:

speech transcribe recording.wav
speech speak "Hello, world!" --output hello.wav
speech-server --port 8080            # เซิร์ฟเวอร์ HTTP / WebSocket ในเครื่อง

Swift Package Manager

เพิ่ม speech-swift เข้าไปในรายการ dependencies ของ Package.swift:

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

จากนั้นเพิ่มโมดูลที่คุณต้องการเข้าไปใน 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
    ]
)

โมดูลที่มีให้ใช้งาน

โมดูลคำอธิบาย
Qwen3ASRเสียงพูดเป็นข้อความ (Qwen3-ASR)
ParakeetASRเสียงพูดเป็นข้อความ (Parakeet TDT, CoreML)
Qwen3TTSข้อความเป็นเสียงพูด (Qwen3-TTS)
CosyVoiceTTSข้อความเป็นเสียงพูด (CosyVoice3, หลายภาษา)
KokoroTTSข้อความเป็นเสียงพูด (Kokoro-82M, CoreML, พร้อมใช้บน iOS)
Qwen3ChatLLM chat บนอุปกรณ์ (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 จะคอมไพล์ไลบรารี shader ของ MLX Metal ให้อัตโนมัติ หากไม่มี การ inference บน GPU จะช้าลงประมาณ 5 เท่าเนื่องจากต้องคอมไพล์ shader แบบ JIT

เริ่มต้นอย่างรวดเร็ว: ถอดเสียงเป็นข้อความ

CLI

# ถอดเสียงไฟล์ WAV
.build/release/speech transcribe recording.wav

Swift API

import Qwen3ASR

let model = try await Qwen3ASRModel.loadFromHub()
let result = try await model.transcribe(audioFile: "recording.wav")
print(result.text)

โมเดลจะถูกดาวน์โหลดอัตโนมัติจาก HuggingFace ในการใช้งานครั้งแรก และเก็บแคชไว้ใน ~/Library/Caches/qwen3-speech/

เริ่มต้นอย่างรวดเร็ว: ข้อความเป็นเสียงพูด

CLI

# สังเคราะห์เสียงพูด
.build/release/speech speak "Hello, world!" --output hello.wav

Swift API

import Qwen3TTS

let model = try await Qwen3TTSModel.loadFromHub()
let audio = try await model.speak("Hello, world!")
try audio.write(to: "hello.wav")

การดาวน์โหลดโมเดล

โมเดลทั้งหมดถูกดาวน์โหลดจาก HuggingFace ในการใช้งานครั้งแรก ขนาดโดยประมาณ:

โมเดลขนาดการใช้ RAM
Qwen3-ASR 0.6B (4-bit)680 MB~2.2 GB สูงสุด
Qwen3-ASR 0.6B (8-bit)1.0 GB~2.5 GB สูงสุด
Qwen3-ASR 1.7B (4-bit)2.1 GB~4 GB สูงสุด
Parakeet-TDT (CoreML INT8)500 MB~600 MB สูงสุด
Qwen3-TTS 0.6B (4-bit)1.7 GB~2 GB สูงสุด
Qwen3-TTS 1.7B (4-bit)3.2 GB~4 GB สูงสุด
CosyVoice3 (4-bit LLM)1.2 GB~1.5 GB สูงสุด
Kokoro-82M (CoreML INT8)89 MB~200 MB สูงสุด
Qwen3.5-Chat 0.8B (INT4 MLX)418 MB~700 MB สูงสุด
Qwen3.5-Chat 0.8B (INT8 CoreML)981 MB~1.2 GB สูงสุด
PersonaPlex 7B (8-bit) แนะนำ9.1 GB~11 GB สูงสุด
PersonaPlex 7B (4-bit)4.9 GB~6.5 GB สูงสุด
Pyannote VAD5.7 MB~20 MB สูงสุด
Silero VAD v51.2 MB~5 MB สูงสุด
WeSpeaker ResNet3425 MB~50 MB สูงสุด
DeepFilterNet3 (FP16)4.2 MB~10 MB สูงสุด

ขั้นตอนถัดไป