Closed4

OpenAIのTTSを試す

kun432kun432

いろんなところでOpenAI TTSが組み込まれているけど、きちんとAPIで試したことがなかったので、改めてやってみる。

kun432kun432

公式ドキュメント
https://platform.openai.com/docs/guides/text-to-speech

Audio APIは、弊社のTTS(テキスト読み上げ)モデルに基づくspeechエンドポイントを提供します。6つの内蔵音声が付属しており、以下のような用途にご利用いただけます。

  • ブログ記事のナレーション
  • 多言語での音声出力
  • ストリーミングによるリアルタイムの音声出力

APIリファレンス
https://platform.openai.com/docs/api-reference/audio

シンプルに試すだけならPlaygroundもある
https://platform.openai.com/playground/tts

kun432kun432

Colaboratoryで。

パッケージインストール

!pip install openai
!pip freeze | grep -i openai
openai==1.52.0

APIキーをセット

import os
from google.colab import userdata

os.environ["OPENAI_API_KEY"] = userdata.get('OPENAI_API_KEY')

テキストから音声を生成。

from openai import OpenAI

client = OpenAI()

response = client.audio.speech.create(
  model="tts-1",
  voice="alloy",
  input="今日は、人々が愛する何かを作り上げるのに素晴らしい日です!"
)

response.stream_to_file("speech.mp3")

以下のようなwarningが出る、公式のサンプルなのに。

<ipython-input-3-5ec1dd9ec075>:13: DeprecationWarning: Due to a bug, this method doesn't actually stream the response content, `.with_streaming_response.method()` should be used instead
  response.stream_to_file("speech.mp3")

Warningは出つつもファイルは生成されているので、再生はできる。Colaboratoryだとこんな感じでその場で再生確認。

from IPython.display import Audio, display

audio = Audio("speech.mp3")
display(audio)

単純にファイルに出力するならば、write_to_fileを使えばwarningは出ない。

from openai import OpenAI

client = OpenAI()

response = client.audio.speech.create(
  model="tts-1",
  voice="alloy",
  input="今日は、人々が愛する何かを作り上げるのに素晴らしい日です!"
)

response.write_to_file("speech.mp3")

warningに対応しつつ、ストリーミングしたい場合は以下のような感じで書けばいいみたい。

https://github.com/openai/openai-python/blob/e41abf7b7dbc1e744d167f748e55d4dedfc0dca7/examples/audio.py#L40-L60

で本題に戻る。音声の生成(audio.speech.create)時に指定が必須なパラメータは以下の3つ。

  • model: TTSモデルの指定。tts-1tts-1-hdから選択。tts-1-hdのほうが品質が高い。
  • voice: 音声の種類。6種類用意されていて、男性・女性、声質などの違いがある。
  • input: TTSしたいテキスト

オプションで以下の指定もできる。

  • response_format: 音声のフォーマットを指定。デフォルトはmp3で、他にopus/aac/flac/wav/pcmが指定できる。再生するデバイスやユースケースに合わせて選択。
  • speed: 音声の速度。0.254.0の間で指定。デフォルトは1.0

生成される音声の言語、日本語とか英語とかは指定するようなオプションは見当たらない。ドキュメントには以下とある。

サポートされている言語

TTSモデルは、一般的に言語サポートの面ではWhisperモデルに準拠しています。Whisperは以下の言語をサポートしており、現在の音声は英語向けに最適化されているにもかかわらず、高い性能を発揮します。

(省略)

ご希望の言語でテキストを入力することにより、これらの言語で音声を作成することができます。

なるほど、ここは自動で判定される様子。となるとここは元のテキストに依存しそう。

あとFAQにもあるけど、

生成された音声の感情表現をコントロールすることはできますか?

生成された音声の感情表現を直接コントロールするメカニズムはありません。大文字や文法などの要因が音声出力に影響を与える可能性はありますが、当社の内部テストでは、結果はまちまちでした。

SSMLみたいに発話をマークアップしたり、プロンプトで、というようなことはできない。

このスクラップは2ヶ月前にクローズされました