OpenAI の API ＋ 新モデル「gpt-4o-mini-tts」で音声合成 その2： ストリーミング・パラメータ追加を試す【Node.js】

## はじめに

以下の記事で扱っていた、OpenAI の音声合成の新モデル「gpt-4o-mini-tts」に関する記事です。

●【Node.js】OpenAI の API ＋ 新モデル（gpt-4o-mini-tts）で音声合成 - Qiita
　https://qiita.com/youtoy/items/a35f7907eaa4259e417e

上記の記事では、音声ファイルを出力する形でしたが、今回はストリーミングを試します。また、上記では指定していなかったパラメータも追加してみます。

そして今回の実装も、前回と同じで Node.js で API を扱う形にします。


### 音声合成を手軽に試すなら「OpenAI.fm」

前回の記事にも書いたのですが、「gpt-4o-mini-tts」を使った音声合成を手軽に試すなら、以下の「OpenAI.fm」を使うのが良いです。

●OpenAI.fm
　https://www.openai.fm/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/bd44312e-d2b6-4cc2-a494-df44cb86159c.png)


## 公式の技術情報を確認

それでは、公式の技術情報を見てみます。

### Streaming realtime audio

公式ドキュメントに「[Streaming realtime audio](https://platform.openai.com/docs/guides/text-to-speech#streaming-realtime-audio)」という項目があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/9a590dab-8ed6-4bf3-aed3-50035668a04a.png)

そこには以下のサンプルプログラムが掲載されています。

```javascript
import OpenAI from "openai";
import { playAudio } from "openai/helpers/audio";

const openai = new OpenAI();

const response = await openai.audio.speech.create({
  model: "gpt-4o-mini-tts",
  voice: "coral",
  input: "Today is a wonderful day to build something people love!",
  instructions: "Speak in a cheerful and positive tone.",
  response_format: "wav",
});

await playAudio(response);
```

#### 動作確認

このサンプルで、簡単な動作確認を行ってみました。

APIキーの設定と、npmコマンドでのパッケージインストールも行った状態で、上記を実行すると合成された音声が再生されました。

前回と比べると、保存されたファイルを再生するという手間がなく音を再生できました。単に出力の音声を確認したいという場合は、今回の実装のほうが手軽で良さそうです。


#### パラメータについて

API のパラメータについては、[公式ドキュメントの「Create speech」](https://platform.openai.com/docs/api-reference/audio/createSpeech)という項目のところに書いてあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/7503f249-7455-4bee-ab2b-4a7c0db152f1.png)

まず、必須パラメータは以下の 3つです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/267de9a3-6c38-4135-ab25-d0dc5c0485ff.png)

記事執筆時点で、voice で指定できるものは以下となっているようです。

- alloy
- ash
- ballad
- coral
- echo
- fable
- onyx
- nova
- sage
- shimmer
- verse

他に、以下の 3つのパラメータも指定できるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/e725aaa1-02af-4ed1-9a06-8c283cf9ba62.png)


## パラメータを変更したもので試してみる

パラメータを変更したもので試してみます。


### 「speed」のパラメータを追加してみたりなど

上に掲載していたサンプルに、speed のパラメータを追加してみたり、「voice、input、instructions」の内容を変えてみたりしました。

```javascript
import OpenAI from "openai";
import { playAudio } from "openai/helpers/audio";

const openai = new OpenAI();

const response = await openai.audio.speech.create({
  model: "gpt-4o-mini-tts",
  voice: "echo",
  input: "さらに音声合成を試してみます！スピードを0.25にしたけど、どうかな！",
  instructions: "前半は明るく、後半は落ち着いた感じで",
  response_format: "wav",
  speed: 0.25,
});

await playAudio(response);
```

さらに、speed のパラメータの値を変えたものも作ってみました。

```javascript
  input: "さらに音声合成を試してみます！スピードを2.0にしたけど、どうかな！",
  ・・・
  speed: 2.0,
```

#### 動作させた結果

上記の speed のパラメータを追加してみたものを試した結果は、以下のとおりです。

<iframe width="560" height="315" src="https://www.youtube.com/embed/PcAu8eW1IVA?si=2A2jA9gw85UTicwL" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

意図通りに動作していることが確認できました。