1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MacのAutomator自動化を利用して、システム音声(オリジナルの音声)を使わずに、Livetoon社のTTS APIを使って綺麗な日本語音声が出せるようになった件

Posted at

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の設定

  1. Automatorを開く
    アプリケーション」フォルダからAutomatorを開きます。

  2. 新規書類作成
    新規書類」を選択し、「クイックアクション」を選びます。

  3. AppleScriptを追加
    左側の「ライブラリ」から「AppleScriptを実行」を選んで右側にドラッグ&ドロップします。

  4. 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環境でも、選択したテキストを簡単に音声化し、再生できるシステムを構築することができます。

今回も最後まで見てくれてありがとうございます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?