見出し画像

ElevenLabs(TTS)のAPI使い方【Pythonサンプルコード有り】

AIVtuberシロハナちゃんの開発プロデュースをしているyukiです。

この記事ではElevenLabsのAPIを試してみたので使い方などを備忘録として残します

ElevenLabsというツールは簡単にいうと、人間の声を素材として音声クローンを作って合成音声として利用できます
これはElevenLabsのサイトで利用可能に加えて、APIとして提供もされています

そこでAPI使う参考に「入力したテキストをElevenLabsのAPIを使って合成音声にして音声ファイルとして書き出す」という簡易的なサンプルPythonコードも記載しています。

環境はWindowsで言語はPython 3.12.0です。

ElevenLabsのAPIドキュメント等の詳細は以下公式からどうぞ。

※この記事は2024/7/27時点のものなので今後変更があるかもしれないですのでご了承ください


ElevenLabsとは?使い方など

以下の動画で解説しています。
API以外の基本的な概要や使い方はこちらをご覧ください。

ElevenLabsのサイトでAPIキーとボイスID発行

ElevenLabsのサイト左下のメニューからAPI keyという箇所をクリックします。

https://elevenlabs.io/app/

②APIを発行します。更新も可能です。

③Voices画面の呼び出したいボイスを選択してIDというボタンを押下するとボイスIDをコピーできます。(各ボイスごとにこの値は変わります)


ElevenLabsのAPIをPythonで使う

事前準備

①任意の階層にフォルダ作成してターミナルで以下コマンドで仮想環境にする。

python -m venv .venv
.venv\Scripts\activate.bat

②必要なパッケージのインストールをする。

pip install elevenlabs
pip install python-dotenv requests

Pythonサンプルコード(elevenlabs.py)

import os
from dotenv import load_dotenv
import requests
import time

load_dotenv()  # .envファイルから環境変数を読み込む

class ElevenLabs:
    URL = "https://api.elevenlabs.io/v1/text-to-speech"

    def __init__(self, api_key, voice_id):
        self.api_key = api_key
        self.voice_id = voice_id

    def text_to_speech(self, text):
        # APIリクエストのヘッダーとデータを設定
        headers = {
            "Accept": "audio/mpeg",
            "Content-Type": "application/json",
            "xi-api-key": self.api_key,
        }
        data = {
            "text": text,
            "model_id": "eleven_turbo_v2_5", # モデルID
            "voice_settings": {"stability": 0.5, "similarity_boost": 0.5}, # 音声設定
        }
        # APIにリクエストを送信
        response = requests.post(
            f"{self.URL}/{self.voice_id}", json=data, headers=headers
        )
        if response.status_code != 200:
            print(f"エラー: {response.status_code} - {response.text}")
            return None
        return response.content

    def save_audio(self, audio_content, output_dir):
        # 出力ディレクトリが存在しない場合は作成
        os.makedirs(output_dir, exist_ok=True)
        # タイムスタンプを使用してユニークなファイル名を生成
        filename = f"audio_{int(time.time())}.mp3"
        file_path = os.path.join(output_dir, filename)

        # 音声データをファイルに書き込む
        with open(file_path, "wb") as audio_file:
            audio_file.write(audio_content)

        print(f"音声ファイルを保存しました: {file_path}")

def main():
    # 環境変数からAPIキーとボイスIDを取得
    api_key = os.getenv("ELEVENLABS_API_KEY")
    voice_id = os.getenv("ELEVENLABS_VOICE_ID")

    if not api_key or not voice_id:
        print(
            "エラー: ELEVENLABS_API_KEYまたはELEVENLABS_VOICE_ID環境変数が設定されていません"
        )
        return

    tts = ElevenLabs(api_key, voice_id)

    output_dir = "audio_files"  # 保存先ディレクトリ

    # ユーザーからの入力を受け付けて音声を生成・保存するループ
    while True:
        text = input("話させたいテキストを入力してください(終了するには'q'を入力): ")
        if text.lower() == "q":
            break
        audio_content = tts.text_to_speech(text)
        if audio_content:
            tts.save_audio(audio_content, output_dir)

if __name__ == "__main__":
    main()

モデルはElevenLabs Turbo v2.5を使っています。

現状だと日本語の選択肢はこのどちらか

環境変数(.env)

ELEVENLABS_API_KEY= "発行したAPIキーを入力"
ELEVENLABS_VOICE_ID= "ElevenLabsのVoicesページにて取得したボイスIDを入力"

テキスト入力→ElevenLabsのAPI使ってTTS→音声ファイル保存

①コマンド実行

python elevenlabs.py

②「こんばんは」と入力して実行。audio_filesが作成されて、その中にElevenLabsのAPIで生成された音声ファイルが保存されている。

(.venv) C:\ElevenLabs>python elevenlabs.py
話させたいテキストを入力してください(終了するには'q'を入力): こんばんは
音声ファイルを保存しました: audio_files\audio_1721916526.mp3

さいごに

ElevenLabsは環境構築や複雑な準備は不要で、簡単にAPI使えたり気軽に音声学習できる点が強いと思います。
同じ合成音声系でStyle-Bert-VITS2は環境構築や学習が大変だったので…

Style-Bert-VITS2について興味あれば以下で解説しています。
細かい調整やマージ機能など使い場合はsbv2が良いです。

また、ElevenLabsは多言語対応も簡単にできるので、今後様々な活用が見込めそうです。
導入が簡単なので私も今後、模索していきたいと思います。

そしてElevenLabsを導入したAIVtuber配信を現在予定しているので興味あれば以下からチェックしていただけると幸いです。

最後に私がプロデュースしているAIVtuberシロハナちゃんの宣伝をさせてください。
理想のAIヒロインを目指して、AIを使ったリアルタイム配信や、AIヒロイン研究所というコンセプトのもと、「テクノロジー×キャラクター」に関する動画等を発信しています。
興味がありましたらぜひ!

以上!それではまた👋

ご支援は活動費に使わせていただきます