OpenAIのTTSを試す
いろんなところでOpenAI TTSが組み込まれているけど、きちんとAPIで試したことがなかったので、改めてやってみる。
公式ドキュメント
Audio APIは、弊社のTTS(テキスト読み上げ)モデルに基づく
speech
エンドポイントを提供します。6つの内蔵音声が付属しており、以下のような用途にご利用いただけます。
- ブログ記事のナレーション
- 多言語での音声出力
- ストリーミングによるリアルタイムの音声出力
APIリファレンス
シンプルに試すだけならPlaygroundもある
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に対応しつつ、ストリーミングしたい場合は以下のような感じで書けばいいみたい。
で本題に戻る。音声の生成(audio.speech.create
)時に指定が必須なパラメータは以下の3つ。
-
model
: TTSモデルの指定。tts-1
とtts-1-hd
から選択。tts-1-hd
のほうが品質が高い。 -
voice
: 音声の種類。6種類用意されていて、男性・女性、声質などの違いがある。 -
input
: TTSしたいテキスト
オプションで以下の指定もできる。
-
response_format
: 音声のフォーマットを指定。デフォルトはmp3
で、他にopus
/aac
/flac
/wav
/pcm
が指定できる。再生するデバイスやユースケースに合わせて選択。 -
speed
: 音声の速度。0.25
〜4.0
の間で指定。デフォルトは1.0
。
生成される音声の言語、日本語とか英語とかは指定するようなオプションは見当たらない。ドキュメントには以下とある。
サポートされている言語
TTSモデルは、一般的に言語サポートの面ではWhisperモデルに準拠しています。Whisperは以下の言語をサポートしており、現在の音声は英語向けに最適化されているにもかかわらず、高い性能を発揮します。
(省略)
ご希望の言語でテキストを入力することにより、これらの言語で音声を作成することができます。
なるほど、ここは自動で判定される様子。となるとここは元のテキストに依存しそう。
あとFAQにもあるけど、
生成された音声の感情表現をコントロールすることはできますか?
生成された音声の感情表現を直接コントロールするメカニズムはありません。大文字や文法などの要因が音声出力に影響を与える可能性はありますが、当社の内部テストでは、結果はまちまちでした。
SSMLみたいに発話をマークアップしたり、プロンプトで、というようなことはできない。
料金は以下。
- TTS
- $15.000 / 1M 文字数
- TTS HD
- $30.000 / 1M 文字数