AWS環境にVOICEPEAKをデプロイする

## はじめに

AWS上でVOICEPEAKを利用したシステムを構築するに当たり、EC2へデプロイする方法が見当たらなかったため記す。
またVOICEPEAKの最新版ではCLIが利用可能であるが、体験版ではCLIが利用可能なバージョンではなく商用版で無いと確認出来ない。
本記事ではCLIが利用可能であることも確認した。

## VOICEPEAKとは

> 『VOICEPEAK』は、最新のAI音声合成技術を搭載し手軽に読み上げさせることが可能な入力文字読み上げソフト 
引用元：[公式サイト](https://www.ah-soft.com/voice/)

引用したようにText to Speech (TTS)ソフトの1つである。
ずんだもんで一躍有名となった[VOICEVOX](https://voicevox.hiroshiba.jp/)はOSSであるが、VOICEPEAKは有償ソフトウェアである。
他社製品では[A.I.VOICE](https://aivoice.jp/)が有償ソフトウェアである。

## VOICEPEAKの動作環境

2024年12月7日現在、[AHS社の公式ドキュメント](https://www.ah-soft.com/voice/manual/#1-2)では以下の記載がある。

> ■OS
Windows 11/10 またはそれ以降 (64bit)
macOS 10.13 またはそれ以降
Ubuntu 20.04 またはそれ以降 (64bit)

## A.I.VOICEの動作環境

2024年12月7日現在、[エーアイ社の公式ドキュメント](https://aivoice.jp/manual/editor/system_requirements.html)では以下の記載がある。

> OS
Windows 11
Windows 10 (64bit、バージョン 1607 以上)
Windows 8.1 (64bit)
※仮想環境は除きます。

そのため現時点では[琴葉姉妹](https://aivoice.jp/character/kotonoha/)や[紡乃世詞音](https://aivoice.jp/product/kotone/)をLinux環境で動かすことが出来ない。
とても悲しい。

## EC2インスタンス作成

### 名前とタグ

任意の名前を指定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230034/faddf675-0b41-138f-aec2-a588dcc6fe72.png)

### アプリケーションおよび OS イメージ (Amazon マシンイメージ) 

Ubuntu 20.04以降のAMIを選択する。
ここでは`Ubuntu Server 24.04 LTS (HVM), SSD Volume Type`を選択した。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230034/14acfbc9-1148-76a6-920a-9b5d6a882a96.png)

### インスタンスタイプ

ある程度良いスペックのものを選択する。
音声への変換処理時間にはマシンスペックに大きく依存するため、リアルタイム性を求める場合には良いインスタンスタイプを選択すべきである。
具体的にはAlexaではタイムアウトが8秒に設定されているため、VOICEPEAKを利用して対話システムを構築するには発話させる文章量と処理にかかる時間を勘案してインスタンスタイプを選択することが望まれる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230034/c84313a5-032a-0b99-ec28-445a1661f813.png)

### キーペア (ログイン)

SSHする必要があるため指定しておく。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230034/4d32aaf0-64d4-5c55-580d-db547fec2682.png)

### ネットワーク設定

#### VPC, サブネット

お好きなVPC、サブネットを選択。

#### パブリックIPの自動割り当て

`有効化`を選択。

#### ファイアウォール (セキュリティグループ)

SSHとRDPを許可する。ソースタイプはある程度絞ると安心。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230034/98752c97-4ea8-4596-3321-ede6fcffcc8e.png)

### ストレージを設定

[公式ドキュメント](https://help.ubuntu.com/community/Installation/SystemRequirements)によるとUbuntu Desktop Editionでは25GBのハードドライブ容量を推奨している。
そのため今回は25GiBを指定する。多いに越したことは無い。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230034/6c2258cf-84d7-570e-016f-1f755ccc92f2.png)

## EC2インスタンス接続

KeyPairの権限を変更した後にSSHする。
米印になっている箇所にはEC2のPublic IPを入れる。

```console
$ chmod 400 "Voicepeak Server KeyPair.pem"
$ ll
total 12
drwxr-xr-x  2 * * 4096 Dec  7 15:30  ./
drwxr-xr-x 23 * * 4096 Dec  7 15:30  ../
-r--------  1 * * 1674 Dec  7 15:20 'Voicepeak Server KeyPair.pem'
$ ssh -i "Voicepeak Server KeyPair.pem" ubuntu@ec2-*-*-*-*.ap-northeast-1.compute.amazonaws.com
```

### 最新のパッケージに更新

```console
ubuntu@ip-192-168-1-207:~$ sudo apt update
ubuntu@ip-192-168-1-207:~$ sudo apt upgrade -y
```

### ユーザ追加

```console
ubuntu@ip-192-168-1-207:~$ sudo adduser voicepeak
info: Adding user `voicepeak' ...
info: Selecting UID/GID from range 1000 to 59999 ...
info: Adding new group `voicepeak' (1001) ...
info: Adding new user `voicepeak' (1001) with group `voicepeak (1001)' ...
info: Creating home directory `/home/voicepeak' ...
info: Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for voicepeak
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n]
info: Adding new user `voicepeak' to supplemental / extra groups `users' ...
info: Adding user `voicepeak' to group `users' ...
```

### グループ追加

sudoが使えるようにsudoグループに追加。

```console
ubuntu@ip-192-168-1-207:~$ sudo usermod -aG sudo voicepeak
ubuntu@ip-192-168-1-207:~$ groups voicepeak
voicepeak : voicepeak sudo users
```

### xrdpインストール

RDPをするためにxrdpをインストールする。

```console
ubuntu@ip-192-168-1-207:~$ sudo apt install xrdp
```

### lightdmインストール

Display Managerをインストールする。
```console
ubuntu@ip-192-168-1-207:~$ sudo apt install lightdm
```

### GUIインストール

GUIをインストールする。

```console
ubuntu@ip-192-168-1-207:~$ sudo apt install ubuntu-desktop
```

`gdm3`を利用するか、`lightdm`を利用するか選択肢が出るため`lightdm`を選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230034/b5c006d2-80ef-2544-1313-c3455098bd6e.png)

### Installing the firefox snapで止まる

:::note warn
firefoxのインストールで止まってしまうことがある。
筆者の環境ではインスタンスタイプを`t2.micro`から`t3.large`に変更したところ進んだ。
:::

```console
(Reading database ... 130655 files and directories currently installed.)
Removing pulseaudio (1:16.1+dfsg1-2ubuntu10) ...
Selecting previously unselected package firefox.
(Reading database ... 130473 files and directories currently installed.)
Preparing to unpack .../000-firefox_1%3a1snap1-0ubuntu5_amd64.deb ...
=> Installing the firefox snap
==> Checking connectivity with the snap store
==> Installing the firefox snap

Progress: [  0%] [.......................................................................] 
```

### RDPする

インスタンスのPublic IPを指定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230034/125ebe38-cae9-53de-eee3-7d0a4e7fa96c.png)

作成したユーザとパスワードを入力する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230034/1622b7df-9191-9949-6370-c2a7c955b397.png)

### インストーラーを入手して実行する

`Linux用(最新)`を選択してインストーラーを入手する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230034/ceb4b456-af6d-f525-223f-b4f8199212f5.png)

実行権限を付与する。

```console
voicepeak@ip-192-168-1-207:~$ cd Downloads/
voicepeak@ip-192-168-1-207:~/Downloads$ ll
total 16272
drwxr-xr-x  2 voicepeak voicepeak     4096 Dec  7 08:18 ./
drwxr-x--- 16 voicepeak voicepeak     4096 Dec  7 08:16 ../
-rw-rw-r--  1 voicepeak voicepeak 16650424 Dec  7 08:18 voicepeak-downloader-linux64
voicepeak@ip-192-168-1-207:~/Downloads$ chmod +x voicepeak-downloader-linux64
voicepeak@ip-192-168-1-207:~/Downloads$ ./voicepeak-downloader-linux64
```

インストーラーに従って進める。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230034/cd68a40a-d2be-ab3d-37a6-e1a0aa70f924.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230034/51199e43-8ac8-0470-083a-fe14f1cf1986.png)

インストール完了。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230034/744df80c-908a-e8bc-dadd-f6e0177c5224.png)

## CLIを使う

VOICEPEAKではCLIが利用可能であり、EC2にデプロイした場合でも問題なく利用可能。

```console
voicepeak@ip-192-168-1-207:~/Voicepeak/Voicepeak-linux64/Voicepeak$ ./voicepeak -h
Voicepeak
Usage:
  ./voicepeak [OPTION...]

  -s, --say Text               Text to say
  -t, --text File              Text file to say
  -o, --out File               Path of output file
  -n, --narrator Name          Name of voice, check --list-narrator
  -e, --emotion Expr           Emotion expression, for example:
                               happy=50,sad=50. Also check --list-emotion
      --list-narrator          Print voice list
      --list-emotion Narrator  Print emotion list for given voice
  -h, --help                   Print help
      --speed Value            Speed (50 - 200)
      --pitch Value            Pitch (-300 - 300)
```

ただし変換可能な文字数に上限がある点には注意が必要。

> しかし、残念なことに140文字しか読み上げできないため長文には向かないようです。142文字以上になるとファイルを出力しなくなります。
引用元：https://polygonote.com/2024_0126_23520/

ちなみに体験版では以下のように`Segmentation fault`が発生する。

```console
$ ./voicepeak -h
iconv_open is not supported
Segmentation fault
```