MacのAutomator自動化を利用して、システム音声(オリジナルの音声)を使わずに、Livetoon社のTTS APIを使って綺麗な日本語音声が出せるようになった件
はじめに
こんにちは、しゅんです。
今回は、前回の記事「MacのAutomator自動化を利用して、システム音声(オリジナルの音声)を使わずに、TTSモデルを使って綺麗な音声が出せるようになった件」の続編となります。
前回の記事では、Automatorを利用して、システム音声ではなく外部TTSモデルを使って音声生成を行う方法について説明しましたが、今回はLivetoon社のTTS APIを使って、日本語音声をどのようにMacで実現するかの手順を紹介します。
前回の記事
TTS(Text-to-Speech)技術を使う理由は、主に次の点にあります:
- 音声の品質向上: 標準的なシステム音声では物足りない場合でも、TTSモデルを使うことで、より自然で感情豊かな音声を生成できます。
- 柔軟性: 異なる声のキャラクターやトーンを選択できるため、用途に応じた音声を作り出せます。
では、実際にどうやってLivetoon TTS APIを使用し、音声生成を自動化するのか、具体的な手順をご紹介します。
LivetoonのTTS APIの紹介
Livetoon社は、最新の音声合成技術を活用したTTSサービスを提供しています。このAPIを使うことで、テキストを高品質な日本語音声に変換することができます。LivetoonのTTS技術は、音声の品質に特に重点を置いており、自然で感情豊かな音声表現が特徴です。
特徴
- 高精度な音声合成: LivetoonのTTSは、短文でも長文でも高精度に音声を生成し、非常に自然な発音を実現します。
- 感情豊かな音声表現: 喜び、悲しみ、怒り、驚きなど、感情を込めた音声表現が可能です。これにより、単なる音声合成ではなく、感情を伝える音声を生成することができます。
- 
複数のキャラクター: 音声には複数のキャラクター(default,char1,char2)が選べ、それぞれ異なる性格やトーンの声で音声を再生できます。用途や好みに応じた音声選択が可能です。
以下表です
| voice値 | キャラクター名 | 説明 | 
|---|---|---|
| default | デフォルト | 標準的な女声 | 
| char1 | キャラクター1 | 明るい元気な女声 | 
| char2 | キャラクター2 | 優しい落ち着いた女声 | 
公式サイトやAPI関連の詳細はこちらで確認できます。
- Livetoon社公式サイト
- PR Timesの記事
- Livetoon API関連
ステップ1: Automatorでクイックアクションを作成
前回の記事で説明した通り、Automatorを使ってクイックアクションを作成します。選択したテキストを自動で処理するため、AppleScriptを使ってLivetoon TTS APIに渡します。
Automatorの設定
- 
Automatorを開く 
 「アプリケーション」フォルダからAutomatorを開きます。
- 
新規書類作成 
 「新規書類」を選択し、「クイックアクション」を選びます。
- 
AppleScriptを追加 
 左側の「ライブラリ」から「AppleScriptを実行」を選んで右側にドラッグ&ドロップします。
- 
AppleScriptコードを編集 
 以下のコードをAppleScriptに入力します。選択したテキストと音声キャラクター(default,char1,char2)を渡します。
on run {input, parameters}
    -- 入力が空でないか確認
    if input is {} then
        set inputText to "NO text" -- 入力がない場合は"NO text"を設定
    else
        set inputText to item 1 of input -- 最初のテキストを使用
        set inputText to inputText as string
    end if
    -- voice選択ダイアログ
    set voiceChoice to choose from list {"default", "char1", "char2"} with prompt "Choose a voice:" default items {"default"} without multiple selections allowed and empty selection allowed
    -- デフォルト値設定
    if voiceChoice is false then
        set voiceChoice to {"default"}  -- デフォルトのvoice
    end if
    set voiceSelected to item 1 of voiceChoice -- 選ばれたvoice
    -- Python環境を設定
    set pyenv_python to "/Users/syun/.pyenv/shims/python3"
    
    -- Pythonスクリプトを実行(voiceを渡す)
    do shell script pyenv_python & " /Users/syun/for_system_kokoro_speach/main_livetoon.py " & quoted form of inputText & " " & quoted form of voiceSelected
    return input
end run
自分のパスにしてください
- 
/Users/syun/.pyenv/shims/python3(確認方法:which python3)
- 
/Users/syun/for_system_kokoro_speach/main.py(コードのパスを設定)
保存忘れずに!
ステップ2: Pythonスクリプトの作成
次に、Livetoon TTS APIを使って音声を生成し、再生するPythonスクリプトを作成します。このスクリプトは、Automatorから渡されたテキストと音声キャラクターを使って音声を生成し、その後再生します。
Pythonスクリプト
以下のコードをmain_livetoon.pyというファイル名で保存します。
import requests
import os
import sys
import soundfile as sf
# Automatorから渡されたテキストとvoiceを取得
text = sys.argv[1]  # 引数として渡されたテキスト
voice = sys.argv[2]  # 引数として渡されたvoice
# APIキーを設定
API_KEY = "your-api-key-here"
url = "https://api.livetoon.net/v1/tts/livetoon"
payload = {
    "text": text,  # 渡されたテキストを使用
    "voice": voice,  # 選ばれたvoiceを使用
    "speed": 1  # 音声のスピード
}
headers = {
    "X-API-Key": API_KEY,
    "Content-Type": "application/json"
}
# 音声合成リクエスト
response = requests.post(url, headers=headers, json=payload)
if response.status_code != 200:
    raise Exception(f"Failed to get audio, status code: {response.status_code}")
# 書き込み可能な場所に保存
output_audio_path = "/Users/syun/for_system_kokoro_speach/speech.wav"  # 保存場所
# ファイル保存
with open(output_audio_path, "wb") as f:
    f.write(response.content)
# 音声を再生
if os.uname().sysname == 'Darwin':  # macOS
    os.system(f'afplay {output_audio_path}')  # afplayで音声を再生
# 再生後、ファイルを削除
os.remove(output_audio_path)
Automatorのエラー解決方法
「信号を受信したため、コマンドが終了しました。」エラーの原因と解決法
Automatorで実行した際に「信号を受信したため、コマンドが終了しました。」というエラーが発生することがあります。これは、Automatorが外部プロセスを実行した際に、プロセスが途中で終了したためです。
結果動画
かなり素晴らしいです。localで動かしてる時にはモデルの読み込みで10秒使ってたが、かなり早い反応で生成できました。
エラー共有と解決方法:
公式の方法(simpleaudioを使って音声を再生する方法)では、プロセスが異常終了する可能性があるため、代わりにafplayコマンドを使用する方法を推奨します。以下のように、afplayを使って音声を再生することで、プロセスが終了するのを防ぎ、音声の再生をスムーズに行うことができます。
# 音声を再生 (macOS用)
if os.uname().sysname == 'Darwin':  # macOS
    os.system(f'afplay {output_audio_path}')  # afplayで音声を再生
afplayは、macOSに標準で搭載されている音楽再生コマンドで、音声ファイルを簡単に再生することができます。これを使うことで、Pythonスクリプトが終了した後も音声再生が続き、プロセスが途中で終了する問題を回避できます。
まとめ
この記事では、Livetoon TTS APIを使用して、MacのAutomatorを使い、テキストを音声に変換する方法を紹介しました。特に、Livetoon TTS APIの音声キャラクター(default, char1, char2)を選べる点が特徴です。また、Automatorで「信号を受信したため、コマンドが終了しました」というエラーを回避するために、afplayコマンドを使用する方法を提案しました。
これにより、Mac環境でも、選択したテキストを簡単に音声化し、再生できるシステムを構築することができます。
今回も最後まで見てくれてありがとうございます。