Go!!
っということで今回はDockerとNodeJsを使って音声を合成してみます。
※ある程度DockerとNodejs(Typescript)の知識があることを前提に進めます。
Dockerでエンジンを起動
今回はdocker-composeを使ってエンジンを起動します。
version: "2"
services:
voicevox_engine:
# CPUの場合は voicevox/voicevox_engine:cpu-ubuntu20.04-latest を使用
image: voicevox/voicevox_engine:nvidia-ubuntu20.04-latest
ports:
- "50021:50021"
tty: true
#
# 以下の項目はCPUの場合はなくても大丈夫
#
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
docker-compose.yml
を保存したら実行。
コードを書く
環境
- nodejs v18
- yarn v3.1.0
- typescript v4.5.5
モジュールのインストール
npm i voicevox-api-client --save
# yarn add voicevox-api-client,
# npm add voicevox-api-client, etc...
コードを書く
mjsで書きます。
指定された文字列を音声合成してファイルを書き出す関数を作ってみます。
とりあえず全体のコードを。
// index.mjs
import { Client } from 'voicevox-api-client'
import fs from 'fs'
const client = new Client('http://localhost:50021')
const createVoice = async (text: string) => {
const query = await client.query.createQuery(0, text)
const voice = await client.voice.createVoice(0, query)
const buf = Buffer.from(voice)
fs.writeFileSync('voice.wav', buf)
}
createVoice("Dockerがどっかーん")
順番に説明していきます。
まず一番上のほう。
書いてあることそのまんまです。
モジュールからClient
をインポートしてインスタンスを作成しています。
ここのURLは先程作成したvoicevox-engine
のサーバーのURLにしてください。
// index.mjs
import { Client } from 'voicevox-api-client'
import fs from 'fs'
const client = new Client('http://localhost:50021')
次に一番大事な
createVoice
関数。
まず文字列から
クエリを作成 します。
次に作成したクエリを
音声に変換します。
voice
に音声の
arrayBuffer
が入るので
Buffer
に変換してファイルに書き出します。
// index.mjs
const createVoice = async (text: string) => {
const query = await client.query.createQuery(0, text)
const voice = await client.voice.createVoice(0, query)
const buf = Buffer.from(voice)
fs.writeFileSync('voice.wav', buf)
}
はい!完成です!
早速実行してみましょう。
終わったあとに、ディレクトリを見てみると...
wavファイルが生成されていますね!
再生すると、ちゃんと声が再生されるはずです。
めちゃめちゃかんたんですね!