はじめに

Soniqo Cloud

ホスティング API がお好みなら、同じ文字起こし・合成・クローンをマネージドサービスとして提供 — OpenAI / ElevenLabs 互換です。 soniqo.audio/cloud →

speech CLI をインストールすると、Apple Silicon Mac で音声の文字起こしと生成ができます。Swift SDK では macOS・iOS アプリに音声処理を組み込めます。

CLI の動作要件

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

M4A をテキストに変換するガイドへ.

クイックスタート: 音声合成

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)
SpeechVADVAD(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 VAD5.7 MBピーク 約20 MB
Silero VAD v51.2 MBピーク 約5 MB
WeSpeaker ResNet3425 MBピーク 約50 MB
DeepFilterNet3 (FP16)4.2 MBピーク 約10 MB

次のステップ