はじめに
ホスティング API がお好みなら、同じ文字起こし・合成・クローンをマネージドサービスとして提供 — OpenAI / ElevenLabs 互換です。 soniqo.audio/cloud →
speech CLI をインストールすると、Apple Silicon Mac で音声の文字起こしと生成ができます。Swift SDK では macOS・iOS アプリに音声処理を組み込めます。
CLI の動作要件
- macOS 15+(Sequoia以降)
- Apple Silicon (arm64)
- 最低8 GB RAM(大きなモデルには16 GB推奨)
CLI をインストール
Homebrew (CLI)
ARM ネイティブ版の Homebrew(/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
クイックスタート: 音声合成
speech speak "Hello, world!" --output hello.wav
ローカル音声 API を起動
ローカルの API リクエストを処理する HTTP/WebSocket サーバーを起動します。
speech-server --port 8080
Swift SDK
Swift Package Manager で、macOS 15 以降または iOS 18 以降のアプリに Swift モジュールを追加します。
Swift Package Manager
Package.swiftの依存関係にspeech-swiftを追加します。
dependencies: [
.package(url: "https://github.com/soniqo/speech-swift", branch: "main")
]
次に、必要なモジュールをターゲットに追加します。
.target(
name: "MyApp",
dependencies: [
.product(name: "Qwen3ASR", package: "speech-swift"),
.product(name: "Qwen3TTS", package: "speech-swift"),
.product(name: "SpeechVAD", package: "speech-swift"),
// ... 必要なモジュールを追加
]
)
利用可能なモジュール
| モジュール | 説明 |
|---|---|
Qwen3ASR | 音声認識(Qwen3-ASR) |
WhisperASR | 音声認識(Whisper Large-v3 Turbo、CoreML) |
ParakeetASR | 音声認識(Parakeet TDT、CoreML) |
Qwen3TTS | 音声合成(Qwen3-TTS) |
CosyVoiceTTS | 音声合成(CosyVoice3、多言語) |
KokoroTTS | 音声合成(Kokoro-82M、CoreML、iOS対応) |
Qwen3Chat | オンデバイスLLMチャット(Qwen3.5-0.8B、MLX + CoreML) |
PersonaPlex | 音声間変換(PersonaPlex 7B) |
SpeechVAD | VAD(Silero + Pyannote)、ダイアライゼーション、話者embedding |
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"))
ソースからビルド
ソースからビルドする場合は、Metal Toolchain を含む Xcode 16.3 以降と Swift 6 以降をインストールしてください。リポジトリをクローンして CLI をビルドし、チェックアウト内の実行ファイルを確認します。
git clone https://github.com/soniqo/speech-swift.git
cd speech-swift
make build
.build/release/speech --help
make buildはMLX Metalシェーダーライブラリを自動的にコンパイルします。これがないと、JITシェーダーコンパイルのためGPU推論が約5倍遅くなります。
新しい SDK でも、シェーダービルドの既定値は macOS 15.0 と Metal 3.2 です。カスタムビルドでは 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 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 |
次のステップ
- M4A をテキストに変換するガイドへ
- CLIリファレンス — 利用可能なすべてのコマンドとオプション
- Qwen3-ASRガイド — 詳細な音声認識ドキュメント
- Qwen3-TTSガイド — 詳細な音声合成ドキュメント
- API と プロトコル — 共有プロトコルと型