mcpField
S
speak-tts

speak-tts

github.com/emzodクリエイティブ・メディア8735 回インストール39 週間前に更新
リポジトリ

speak-tts について

Apple Silicon Mac向けのローカル音声合成コマンドラインツールです。テキストの音声化や声のクローン、バッチ処理に対応し、ストリーミング再生、分割生成、音声結合も行えます。

主な機能

  1. 01テキストや文書の音声化
  2. 02短い録音から声の特徴を複製
  3. 03ストリーミング再生またはWAV保存
  4. 04長文の自動分割を含むバッチ処理
  5. 05複数の音声ファイルの結合

活用シーン

  1. 01記事を聴ける音声に変換
  2. 02書籍の章をまとめてオーディオブック化
  3. 03複数の声でポッドキャスト素材を生成
  4. 04中断した長時間の音声生成を再開

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/emzod/speak --skill speak-tts

インストール後、Claude Code で/speak-ttsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

.gitignore
README.md
bun.lock
AGENTS.md
CHANGELOG.md
.agentic/
README.md
.agentic/skill-optimization/
SKILL_OPTIMIZED.md
OPTIMIZATION_REPORT.md
.agentic/skill-optimization/focus-group-runs/
README.md
round3-v2-news-article.md
round1b-v0-podcast.md
round2b-v1-podcast.md
round5b-v4-pdf-audiobook.md
round5a-v4-voice-clone.md
round5c-v5-combined.md
round1a-v0-pdf-audiobook.md
round4-v3-voice-clone.md
round2a-v1-pdf-audiobook.md
.agentic/skill-optimization/iterations/
SKILL_v1.md
SKILL_v3.md
SKILL_v4.md
SKILL_v5_final.md
SKILL_v0_original.md
SKILL_v2.md
.github/workflows/
install-test.yml
test.yml
dev/
Implementation_plan.md
all-docs.txt
bug-report.md
bug-report-streaming-hang.md

詳細

speak - Claude に話しかけてもらいましょう!

エージェントがリアルタイムであなたに話しかけられるようにします。Apple Silicon 上で動作するローカルのテキスト読み上げ、音声クローン、音声生成機能です。 エージェントがリアルタイムであなたに話しかけられるようにします。Apple Silicon 上で動作する、音声クローン機能を備えたローカル TTS です。

前提条件

要件確認方法インストール
Apple Silicon Macuname -m → arm64Intel はサポートされていません
macOS 12.0+sw_vers-
soxwhich soxbrew install sox
ffmpegwhich ffmpegbrew install ffmpeg
poppler(PDF)which pdftotextbrew install poppler

入力ソース

ソース例
テキストファイルspeak article.txt
Markdownspeak doc.md
直接入力した文字列speak "Hello"
クリップボードpbpaste | speak
標準入力cat file.txt | speak
ウェブ記事
lynx -dump -nolist "https://example.com/article" | speak --output article.wav
フォーマットの変換
フォーマット変換コマンド
PDFpdftotext doc.pdf doc.txt
DOCXtextutil -convert txt doc.docx
HTMLpandoc -f html -t plain doc.html > doc.txt

出力モード

目的コマンド
後で聴くために保存speak text.txt --output file.wav
今すぐ聴く(ストリーミング)speak text.txt --stream
今すぐ聴く(全体)speak text.txt --play
両方speak text.txt --stream --output file.wav
デフォルトの動作
speak article.txt          # → ~/Audio/speak/article.wav (no playback)
speak "Hello"              # → ~/Audio/speak/speak_<timestamp>.wav

ディレクトリの自動作成

ディレクトリ自動作成されますか?
~/Audio/speak/✓ はい
~/.chatter/voices/✗ いいえ
カスタムディレクトリ✗ いいえ

カスタムディレクトリは必ず先に作成してください:

mkdir -p ~/.chatter/voices/
mkdir -p ~/Audio/custom/

音声クローン

音声クローンは、短い録音からあなたの声の特徴(ピッチ、トーン、話すテンポ)に合った音声を生成します。

品質の目安
  • 出力には声の一般的な特徴が反映されますが、完全な複製ではありません
  • 品質はサンプルの品質に大きく左右されます
  • 15~25 秒が最適です(最短 10 秒、最長 30 秒)
自分の声を録音する

QuickTime を使用する場合:

  1. QuickTime Player を開き、File → New Audio Recording を選択します
  2. はっきりとした発話を 20 秒間録音します
  3. File → Export As → Audio Only (.m4a) を選択します
  4. WAV に変換します(下記参照)

sox を使用する場合(コマンドライン):

# -d = use default microphone
# Recording starts immediately and stops after 25 seconds
sox -d -r 24000 -c 1 ~/.chatter/voices/my_voice.wav trim 0 25
必要なフォーマットへの変換

音声サンプルは、WAV、24000 Hz、モノラル、10~30 秒でなければなりません。

# From MP3
ffmpeg -i voice.mp3 -ar 24000 -ac 1 voice.wav

# From M4A (QuickTime)
ffmpeg -i voice.m4a -ar 24000 -ac 1 voice.wav

# Trim to 25 seconds
ffmpeg -i long.wav -t 25 -ar 24000 -ac 1 trimmed.wav

# Check sample properties
ffprobe -i voice.wav 2>&1 | grep -E "Duration|Stream"
# Should show: Duration ~15-25s, 24000 Hz, mono
自分の声を使う
# Create directory
mkdir -p ~/.chatter/voices/

# Move sample
mv voice.wav ~/.chatter/voices/my_voice.wav

# Test
speak "Testing my voice" --voice ~/.chatter/voices/my_voice.wav --stream

# Use for content
speak notes.txt --voice ~/.chatter/voices/my_voice.wav --output presentation.wav

パスの要件:

  • ✓ 動作します:~/.chatter/voices/my_voice.wav(チルダはシェルによって展開されます)
  • ✓ 動作します:/Users/name/.chatter/voices/my_voice.wav
  • ✗ 失敗します:my_voice.wav(相対パス)
  • ✗ 失敗します:./voices/my_voice.wav(相対パス)
音声サンプルのヒント
良いサンプル悪いサンプル
静かな部屋背景ノイズ
自然なペース急いだ話し方、または単調な話し方
明瞭な発音ぼそぼそした話し方
変化に富んだ内容繰り返しの多いフレーズ

デフォルトの音声

--voice を省略すると、組み込みのデフォルト音声が使われます:

speak "Hello world" --stream  # Uses default voice

感情タグ

タグは、話し言葉ではなく実際に聞こえる効果音を生成します:

speak "[sigh] Monday again." --stream
# Output: (sigh sound) "Monday again."
タグ効果
[laugh]笑い声
[chuckle]軽い含み笑い
[sigh]ため息
[gasp]息をのむ音
[groan]うめき声
[clear throat]咳払い
[cough]咳
[crying]泣き声
[singing]歌うような発話

サポート対象外: [pause]、[whisper](無視されます)

間を置くには: 句読点を使います:"Wait... let me think."

バッチ処理

mkdir -p ~/Audio/book/
speak ch01.txt ch02.txt ch03.txt --output-dir ~/Audio/book/
# Creates: ch01.wav, ch02.wav, ch03.wav

# With auto-chunking (for long files)
speak chapters/*.txt --output-dir ~/Audio/book/ --auto-chunk

# Skip completed files
speak chapters/*.txt --output-dir ~/Audio/book/ --skip-existing
自動チャンク分割の動作

バッチ処理で --auto-chunk を使う場合:

  1. 各入力ファイルは個別にチャンク分割されます
  2. チャンクが生成され、ファイルごとに自動で連結されます
  3. 最終出力:入力ファイルごとに 1 つの .wav ファイル(例:ch01.wav)
  4. 中間チャンクは削除されます(--keep-chunks を指定した場合を除く)

チャンクを手動で連結する必要はありません — 最終的な章のファイルだけを連結してください。

音声の連結

# Explicit order (recommended)
speak concat ch01.wav ch02.wav ch03.wav --output book.wav

# Glob pattern (REQUIRES zero-padded filenames)
speak concat audiobook/*.wav --output book.wav
ゼロ埋めのルール

正しい連結順にするために重要です:

ファイル正しい形式誤った形式
1-901、02、...、091、2、...、9
10-9901、02、...、991、10、2、...
100+001、002、...、9991、100、2、...

理由: シェルのグロブ展開では、アルファベット順に並べ替えられます。1, 10, 2 と 01, 02, 10 の違いです。

PDFからオーディオブックへの変換(全ワークフロー)

ステップ 1:章の境界を見つける
# Preview table of contents
pdftotext -f 1 -l 5 textbook.pdf toc.txt
cat toc.txt  # Note chapter page numbers

# Or search for "Chapter" markers
pdftotext textbook.pdf - | grep -n "Chapter"
ステップ 2:章を抽出する(ゼロ埋めすること!)
# For 100-page book with ~10 chapters
pdftotext -f 1 -l 12 -layout textbook.pdf ch01.txt
pdftotext -f 13 -l 25 -layout textbook.pdf ch02.txt
pdftotext -f 26 -l 38 -layout textbook.pdf ch03.txt
# ... continue for all chapters
ステップ 3:所要時間を見積もる
speak --estimate ch*.txt
# Shows: total audio duration, generation time, storage needed

# Quick estimates:
# 1 page ≈ 2 min audio ≈ 1 min generation
# 100 pages ≈ 200 min audio ≈ 100 min generation ≈ 500 MB
ステップ 4:音声を生成する
mkdir -p audiobook/
speak ch01.txt ch02.txt ch03.txt --output-dir audiobook/ --auto-chunk
# Creates: audiobook/ch01.wav, audiobook/ch02.wav, audiobook/ch03.wav
ステップ 5:連結する
speak concat audiobook/ch01.wav audiobook/ch02.wav audiobook/ch03.wav --output complete_audiobook.wav
# Or with glob (only if zero-padded):
speak concat audiobook/ch*.wav --output complete_audiobook.wav
PDFのトラブルシューティング
問題解決策
テキストが空、または文字化けしているスキャンされたPDFです。OCRを使用します:brew install tesseract
エンコーディングが正しくない次を試します:pdftotext -enc UTF-8 doc.pdf
単語数を確認するpdftotext doc.pdf - | wc -w(100を超えている必要があります)

複数の音声によるコンテンツ

mkdir -p podcast/scripts podcast/wav

echo "Welcome to the show." > podcast/scripts/01_host.txt
echo "Thanks for having me." > podcast/scripts/02_guest.txt

speak podcast/scripts/01_host.txt --voice ~/.chatter/voices/host.wav --output podcast/wav/01.wav
speak podcast/scripts/02_guest.txt --voice ~/.chatter/voices/guest.wav --output podcast/wav/02.wav

speak concat podcast/wav/01.wav podcast/wav/02.wav --output podcast.wav

オプション一覧

オプション説明デフォルト
--stream生成しながらストリーミングするfalse
--play完了後に再生するfalse
--output <path>出力ファイル~/Audio/speak/
--output-dir <dir>バッチ出力ディレクトリ-
--voice <path>音声サンプル(フルパス)default
--timeout <sec>ファイルごとのタイムアウト300
--auto-chunk長いドキュメントを分割するfalse
--chunk-size <n>チャンクあたりの文字数6000
--resume <file>マニフェストから再開する-
--keep-chunks中間ファイルを保持するfalse
--skip-existing出力が存在する場合はスキップするfalse
--estimate所要時間の見積もりを表示するfalse
--dry-runプレビューのみを行うfalse
--quiet出力を抑制するfalse

コマンド

コマンド説明
speak setup環境をセットアップする
speak healthシステムの状態を確認する
speak modelsTTSモデルを一覧表示する
speak concat音声を連結する
speak daemon killTTSサーバーを停止する
speak config設定を表示する

パフォーマンス

指標値
コールドスタート約4~8秒
ウォームスタート約3~8秒
速度0.3~0.5x RTF(リアルタイムより高速)
ストレージ約2.5 MB/分、約150 MB/時間

再開機能

中断された長時間の生成を再開する場合:

# Single file with auto-chunk — use --resume
speak long.txt --auto-chunk --output book.wav
# If interrupted, manifest saved at ~/Audio/speak/manifest.json
speak --resume ~/Audio/speak/manifest.json

# Batch processing — use --skip-existing
speak ch*.txt --output-dir audiobook/ --auto-chunk
# If interrupted, re-run same command:
speak ch*.txt --output-dir audiobook/ --auto-chunk --skip-existing

よくあるエラー

エラー原因解決策
"Voice file not found"相対パスフルパスを使用します:~/.chatter/voices/x.wav
"Invalid WAV format"仕様が正しくない変換します:ffmpeg -i in.wav -ar 24000 -ac 1 out.wav
"Voice sample too short"10秒未満15~25秒録音します
"Output directory doesn't exist"作成されていないmkdir -p dirname/
"sox not found"インストールされていないbrew install sox
連結順が乱れているゼロ埋めされていない1、2 ではなく、01、02 を使用します
タイムアウト生成に5分以上かかる--auto-chunk または --timeout 600 を使用します
"Server not running"古いデーモンspeak daemon kill && speak health

セットアップ

speak "test"     # Auto-setup on first run (downloads model ~500MB)
speak setup      # Or manual setup
speak health     # Verify everything works

サーバー管理

サーバーは自動起動し、1時間アイドル状態が続くとシャットダウンします。

speak health        # Check status
speak daemon kill   # Stop manually

コメント