学ぶ

Pythonで音声合成:音声をWAVファイルに保存する

Rene, Kabir Goel 
Pythonで音声合成:音声をWAVファイルに保存する

Pythonで音声合成するには、原稿を音声モデルへ送り、返された音声を保存します。本記事ではCartesia Python SDKを使い、SonicでWAVファイルを生成します。

Python 3.9以降、インターネット接続、APIアクセスのあるCartesiaアカウントが必要です。以下の例はSDK 4.2.0を対象とします。1 ホストされたAPIを呼び出すため、テキストは端末外に送信されます。オフラインでの合成が必要なら、ローカルの音声エンジンを使ってください。

Python SDKをインストールする

プロジェクトのディレクトリで仮想環境を作成します。

python -m venv .venv

macOSまたはLinuxでは、次で有効にします。

source .venv/bin/activate

Windows PowerShellでは、次を使います。

.venv\Scripts\Activate.ps1

続いて、本記事で使うバージョンをインストールします。

python -m pip install "cartesia==4.2.0"

システムでpythonではなくpython3を使っている場合は、そちらで環境を作成してください。SDKを固定すると、例のメソッド名を同じ状態に保てます。更新時はSDKのリリースノートを確認しましょう。

APIキーを設定する

Cartesia PlaygroundでAPIキーを作成し、音声合成に必要な権限を付与します。Pythonを実行するターミナルでキーを設定してください。

macOSまたはLinuxの場合:

export CARTESIA_API_KEY="your-api-key"

Windows PowerShellの場合:

$env:CARTESIA_API_KEY = "your-api-key"

your-api-keyを自分のキーに置き換えます。パスワードと同様に扱い、Gitへコミットしたり、公開ノートブックへ貼ったり、ブラウザーのコードに入れたりしないでください。デプロイするアプリケーションでは、サーバーのシークレット管理機能に保存します。流出したキーは取り消し、新しく作成してください。

WAVファイルを生成・保存する

次をspeak.pyとして保存します。原文の英語音声を生成するサンプルコードです。

import os
from pathlib import Path

from cartesia import Cartesia

api_key = os.environ.get("CARTESIA_API_KEY")
if not api_key:
    raise SystemExit("Set CARTESIA_API_KEY before running this script.")

output_path = Path("hello.wav")

with Cartesia(api_key=api_key) as client:
    response = client.tts.generate(
        model_id="sonic-latest",
        transcript="Hello from Python. Your first audio file is ready.",
        voice="e07c00bc-4134-4eae-9ea4-1a55fb45746b",
        output_format={
            "container": "wav",
            "encoding": "pcm_f32le",
            "sample_rate": 44100,
        },
    )
    response.write_to_file(output_path)

print(f"Saved audio to {output_path.resolve()}")

同じターミナルから実行します。

python speak.py

リクエストが成功したら、浮動小数点PCM WAVに対応したプレーヤーでhello.wavを開きます。スクリプトが絶対パスを表示するため、保存先を推測する必要はありません。音声を保存しますが、自動再生はしません。もう一度実行すると、hello.wavを上書きし、APIリクエストも再度行います。

リクエストはSDKで公開されている利用例に従っています。1 音声IDも、その例のものです。アカウントで利用できる別の音声IDに置き換えられます。

声、モデル、音声形式を選ぶ

transcriptはSonicに読み上げさせるテキストです。長い文書を送る前に、1文から始めましょう。APIに送信して差し支えない文章を使い、非公開の原稿をアプリケーションのログに記録しないようにします。

voiceは話す声を選びます。音声ジェネレーターで1文を試し、選んだ声のIDを指定してください。表示名は音声IDではありません。クローンした声を使う場合は、話者の声を利用する許可が必要です。

サンプルはSDKの文書と同じsonic-latestを使います。モデルのエイリアスは、インストールしたSDKとは独立して変わる場合があります。本番のテストを再現可能にするには、モデルのドキュメントから対応する特定のモデルIDを選び、音声IDとテスト原稿とともに記録してください。

出力形式は、音声ファイルを次のように指定します。

フィールドこの例の値意味
containerwavヘッダー付きのWAVファイルに音声を格納します。
encodingpcm_f32le32ビット、リトルエンディアンの浮動小数点PCMで保存します。
sample_rate441001秒あたり44,100サンプルを使います。

生のPCMにはWAVヘッダーがありません。拡張子を.wavに変えてもWAVファイルにはなりません。電話システムや別のサービスへ送る場合、生成前に必要なコンテナ、エンコーディング、サンプルレートを確認してください。

よくあるエラーを直す

症状確認すること
ModuleNotFoundError: No module named 'cartesia'SDKを入れた環境を有効にします。スクリプトと同じPythonでpython -m pip show cartesiaを実行してください。
Set CARTESIA_API_KEY before running this script.現在のターミナルで環境変数を設定し、再実行します。エディターやノートブックは別の環境を使う場合があります。
認証・権限エラーキーが有効で、意図したアカウントに属し、必要な権限があるか確認します。エラー報告にキーを貼らないでください。
モデル、音声、出力形式のエラー現行のAPI仕様と、音声をアカウントで利用できるかを確認します。IDは正確にコピーしてください。
レート制限のエラーアカウントの上限を確認し、同時リクエスト数を減らします。即座に再試行し続けるループは避けます。
generateに関するAttributeErrorSDKのバージョンを確認します。古い例はclient.tts.bytesを使う場合がありますが、本記事は4.2.0のclient.tts.generateを使います。
ファイルがあるのに再生できないcontainer="wav"を指定し、プレーヤーが浮動小数点PCMに対応しているか、ファイルが空でないかを確認します。

問い合わせには、PythonとSDKのバージョン、ステータスコード、エラーとともに返されたリクエストIDを含めてください。APIキーや非公開のテキストは先に取り除きます。

ストリーミングを使う場面

WAV保存は、ナレーション、ボイスオーバー、連携の確認に役立ちます。会話アプリケーションでは、返答全体が完成する前に再生したり、LLMが生成するテキストを順に受け付けたりする必要があるでしょう。

その場合は、同じ環境にWebSocket対応をインストールします。

python -m pip install "cartesia[websockets]==4.2.0"

SDKのWebSocketによるストリーミング入力例から始めてください。1 再生、バッファリング、割り込み処理も必要です。届いたチャンクをディスクに書くだけでは、リアルタイムに話すアプリケーションにはなりません。

短い例が動いたら、実際のアプリケーションの文章に置き換えます。大量生成の前に、名前、数字、略語を聞いて確認しましょう。API料金を確認し、テスト結果とともにモデル・音声IDを残してください。

脚注

  1. CartesiaのPyPI上のPython SDK 4.2.0とSDK利用リファレンス。2026年9月13日確認。 ↩ ↩2 ↩3

よくある質問

Pythonでテキストを音声に変換するにはどうすればよいですか?

Cartesia Python SDKをインストールし、環境変数CARTESIA_API_KEYを設定して、 原稿、モデル、音声、出力形式を指定してclient.tts.generateを呼び出します。 response.write_to_fileで返された音声を保存します。本記事ではSDK 4.2.0を使います。

このPythonの音声合成サンプルはオフラインで動きますか?

いいえ。Cartesia SDKは原稿をCartesia APIに送るため、インターネット接続とAPIアクセスが必要です。 保存したWAVファイルはオフラインで再生できます。テキストを端末外に出せない場合は、 ローカルの音声合成エンジンを選んでください。

Cartesia Python SDKは無料で使えますか?

SDKをインストールしても、無制限の音声生成が付与されるわけではありません。 API利用にはアカウントのプランと上限が適用されます。大量のリクエストを実行する前に、 現行の料金を確認してください。

ファイル保存の代わりに音声をストリーミングできますか?

はい。SDKはストリーミング応答とWebSocket入力に対応しています。 完成したWAVの保存は最初のテストとして簡単ですが、リアルタイム再生の実装ではありません。 テキストを逐次入力する場合はcartesia[websockets]を追加し、SDKの WebSocketサンプルを参照してください。