VoiceVoxのサーバー機能APIを用いて複数行からなるテキストを一つの音声ファイルに変換するJavaScriptプログラムを作成してください

以下に、VoiceVoxのサーバーAPIを利用して複数行のテキストを1つの音声ファイルに変換するJavaScriptプログラムの例を示します。このプログラムでは、Node.js環境を前提としています。

必要な環境と準備

  1. VoiceVoxエンジンが起動していること(デフォルトでは http://127.0.0.1:50021)。
  2. axios パッケージをインストールする必要があります。
npm install axios

サンプルコード

const axios = require('axios');
const fs = require('fs');

// VoiceVoxサーバーのURL
const VOICEVOX_URL = '<http://127.0.0.1:50021>';

/**
 * テキストを音声合成し、1つの音声ファイルに保存する
 * @param {string[]} lines - 複数行のテキスト
 * @param {string} outputPath - 出力先の音声ファイルパス
 */
async function synthesizeSpeech(lines, outputPath) {
  try {
    // 結合された音声データを格納するバッファ
    let audioBuffers = [];

    for (const line of lines) {
      if (!line.trim()) continue; // 空行はスキップ

      // 1. 音声クエリを作成
      const queryRes = await axios.post(`${VOICEVOX_URL}/audio_query`, null, {
        params: {
          text: line,
          speaker: 1, // 話者ID(適宜変更可能)
        },
      });

      // 2. 音声を生成
      const synthRes = await axios.post(`${VOICEVOX_URL}/synthesis`, queryRes.data, {
        params: { speaker: 1 },
        responseType: 'arraybuffer', // 音声データはバイナリとして受け取る
      });

      audioBuffers.push(Buffer.from(synthRes.data));
    }

    // 3. すべての音声データを結合
    const combinedAudio = Buffer.concat(audioBuffers);

    // 4. ファイルに保存
    fs.writeFileSync(outputPath, combinedAudio);

    console.log(`音声ファイルを生成しました: ${outputPath}`);
  } catch (error) {
    console.error('音声合成中にエラーが発生しました:', error.message);
  }
}

// 複数行のテキスト
const lines = [
  'こんにちは。',
  '今日は良い天気ですね。',
  'VoiceVoxのAPIを使った音声合成を試しています。'
];

// 出力先の音声ファイルパス
const outputPath = 'output.wav';

// 音声合成を実行
synthesizeSpeech(lines, outputPath);

プログラムの動作概要

  1. テキストの各行に対して audio_query エンドポイントでクエリを作成。
  2. 作成したクエリを用いて synthesis エンドポイントで音声データを生成。
  3. 各行の音声データを結合し、1つの音声ファイルに保存。

注意事項

このコードを参考に、必要に応じてカスタマイズしてください!

axiosではなくfetch APIを使った処理を行ってください

以下は、fetch APIを使用してVoiceVoxのサーバーAPIを利用し、複数行のテキストを1つの音声ファイルに変換するJavaScriptコードの例です。

サンプルコード