เริ่มต้น

Soniqo Cloud

อยากใช้ API แบบโฮสต์? การถอดความ สังเคราะห์ และโคลนแบบเดียวกันในรูปแบบบริการที่จัดการให้ — เข้ากันได้กับ OpenAI และ ElevenLabs soniqo.audio/cloud →

ติดตั้ง CLI speech เพื่อถอดเสียงและสร้างเสียงบน Mac ที่ใช้ Apple Silicon ใช้ Swift SDK เพื่อเพิ่มการประมวลผลเสียงพูดในแอป macOS และ iOS

ข้อกำหนดของ CLI

ติดตั้ง CLI

Homebrew (CLI)

ใช้ Homebrew รุ่น ARM แบบเนทีฟ (/opt/homebrew) เพื่อติดตั้ง speech และเซิร์ฟเวอร์ HTTP/WebSocket speech-server

brew install speech
speech --help

งานแรก: ถอดเสียงไฟล์ M4A

ดาวน์โหลดไฟล์บันทึกตัวอย่าง แล้วถอดเสียงในเทอร์มินัล:

เชื่อมต่ออินเทอร์เน็ตในการเรียกใช้ครั้งแรก โมเดลที่เลือกจะดาวน์โหลดจาก HuggingFace และเก็บไว้ในแคชบน Mac หลังตั้งค่าเสร็จ คุณสามารถใช้โมเดลนั้นถอดเสียงไฟล์ในเครื่องได้แบบออฟไลน์

curl -fL https://soniqo.audio/audio/samples/cli/transcription-sample.m4a -o transcription-sample.m4a
speech transcribe transcription-sample.m4a --engine parakeet

อ่านต่อในคู่มือแปลง M4A เป็นข้อความ.

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

speech speak "Hello, world!" --output hello.wav

เรียกใช้ API เสียงพูดในเครื่อง

เริ่มเซิร์ฟเวอร์ HTTP/WebSocket เพื่อรับคำขอ API ภายในเครื่อง:

speech-server --port 8080

Swift SDK

เพิ่มโมดูล Swift ในแอปสำหรับ macOS 15+ หรือ iOS 18+ ด้วย Swift Package Manager

Swift Package Manager

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

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

จากนั้นเพิ่มโมดูลที่คุณต้องการเข้าไปใน 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)
WhisperASRถอดเสียงเป็นข้อความ (Whisper Large-v3 Turbo, CoreML)
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

ถอดเสียงด้วย 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)

สร้างเสียงพูดด้วย 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"))

การคอมไพล์จากซอร์สโค้ด

หากต้องการคอมไพล์จากซอร์ส ให้ติดตั้ง Xcode 16.3+ พร้อม Metal Toolchain และ Swift 6+ โคลนคลังโค้ด คอมไพล์ CLI แล้วตรวจสอบไฟล์เรียกใช้ในไดเรกทอรีซอร์ส:

git clone https://github.com/soniqo/speech-swift.git
cd speech-swift
make build
.build/release/speech --help
สำคัญ

make build จะคอมไพล์ไลบรารี shader ของ MLX Metal ให้อัตโนมัติ หากไม่มี การ inference บน GPU จะช้าลงประมาณ 5 เท่าเนื่องจากต้องคอมไพล์ shader แบบ JIT

การสร้างเชดเดอร์กำหนดเป้าหมายเริ่มต้นเป็น macOS 15.0 และ Metal 3.2 แม้จะใช้ SDK ที่ใหม่กว่า สำหรับการสร้างแบบกำหนดเอง MACOSX_DEPLOYMENT_TARGET และ MLX_METAL_LANGUAGE_VERSION ใช้เปลี่ยนค่าเหล่านี้ได้ โดยเป้าหมายที่สูงขึ้นอาจไม่รองรับระบบรุ่นเก่า การเปลี่ยนคอมไพเลอร์ SDK แฟล็ก สคริปต์ หรือซอร์สจะทำให้แคชใช้ไม่ได้ หากการคอมไพล์หรือการลิงก์ล้มเหลว ไลบรารีและค่าแฮชของแคชเดิมจะยังคงอยู่

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

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

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

โมเดลขนาดการใช้ 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 สูงสุด
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 สูงสุด

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