เริ่มต้น
speech-swift มอบความสามารถในการประมวลผลเสียงพูดด้วย AI แบบบนอุปกรณ์สำหรับ macOS และ iOS บน Apple Silicon โมเดลทำงานในเครื่องโดยใช้ MLX (Metal GPU) และ CoreML (Neural Engine)
ข้อกำหนด
- macOS 15+ (Sequoia หรือใหม่กว่า)
- Apple Silicon (ตระกูล M1, M2, M3, M4)
- Xcode 15.4+ / Swift 6.0+
- RAM อย่างน้อย 8 GB (แนะนำ 16 GB สำหรับโมเดลขนาดใหญ่)
การติดตั้ง
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) |
Qwen3Chat | LLM chat บนอุปกรณ์ (Qwen3.5-0.8B, MLX + CoreML) |
PersonaPlex | เสียงพูดสู่เสียงพูด (PersonaPlex 7B) |
SpeechVAD | VAD (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 VAD | 5.7 MB | ~20 MB สูงสุด |
| Silero VAD v5 | 1.2 MB | ~5 MB สูงสุด |
| WeSpeaker ResNet34 | 25 MB | ~50 MB สูงสุด |
| DeepFilterNet3 (FP16) | 4.2 MB | ~10 MB สูงสุด |
ขั้นตอนถัดไป
- อ้างอิง CLI — คำสั่งและตัวเลือกทั้งหมดที่มี
- คู่มือ Qwen3-ASR — เอกสารโดยละเอียดเกี่ยวกับการถอดเสียงเป็นข้อความ
- คู่มือ Qwen3-TTS — เอกสารโดยละเอียดเกี่ยวกับข้อความเป็นเสียงพูด
- API และโปรโตคอล — โปรโตคอลและประเภทข้อมูลที่ใช้ร่วมกัน