ROS1 Noetic に対応した voicevox tts パッケージ、 voicevox_ros は、以下のリポジトリを参照してください。
英単語をカタカナ変換して発音させることでカタコトながら英単語の発話に対応させました。
ワークスペースディレクトリの /src
にこのパッケージをクローンしてください。
cd path/to/your_ws/src
git clone https://github.com/GAI-313/voicevox_ros2.git
次に、colcon build
でパッケージをビルドしてください。
cd /path/to/your_ws
colcon build --packages-up-to voicevox_ros2
--packages-up-to
オプションを使用することで特定のパッケージとそれに依存するパッケージをビルドします。
依存パッケージ voicevox_ros2_interface
がビルドされると自動的に VOICEVOX_core がインストールされます。
VoiceVox_Ros2_Core (メインノード)を起動するコマンド
ros2 run voicevox_ros2 voicevox_ros2_core
正常に VoiceVox_Ros2_Core が起動すると、以下のようなログが表示されます。
[INFO] [xxxx.xxxx] [voicevox_ros2_core]: start voicevox_ros2
正常に VoiceVox_Ros2_Core が動作しているか確認したい場合は、以下のコマンドで確認できます。
- Publisher によるテスト
ros2 run voicevox_ros2 pub
- Service によるテスト
ros2 run voicevox_ros2 srv
正常に VoiceVox_Ros2_Core が動作すると、以下のようなログが表示され、音声が再生されます。
[INFO] [xxxx.xxxx] [voicevox_ros2_core]: GENERATE voice
Pub&Sub 通信で VoiceVox_Ros2 を使用する場合
- トピック
/voicevox_ros2/speaker - メッセージタイプ
voicevox_interface/msg/SpeakerキャラクターIDについては、 キャラクターID一覧 を参照してください。Speaker.text # 発音させたい文字列 Speaker.id # 発音するキャラクターIDを指定
サービスから VoiceVox_Ros2 を使用する場合
- クライアント
/voicevox_ros2/speaker_srv - メッセージタイプ
voicevox_interface/srv/SpeakerキャラクターIDについては、 キャラクターID一覧 を参照してください。Speaker.text # 発音させたい文字列 Speaker.id # 発音するキャラクターIDを指定 --- return bool
voicevox_ros2 には簡易的に voicevox_ros2 を使用するためのメソッド
voicevox_ros2_tts.tts_speaker
が用意されており、
setup.sh
を実行していれば、すぐにこのメソッドを使用することができます。このメソッドを使用するには、以下のサンプルコードを参考にしてください。
#!/usr/bin/emv python3
## ROS2 ノード関連
from rclpy.node import Node
import rclpy
## tts_speaker メソッドをインポート
from voicevox_ros2.voicevox_ros2_tts import tts_speaker
# debug
if __name__ == '__main__':
## メソッドを使用する前にノードを立ててください。
rclpy.init()
node = rclpy.create_node('vvr2_common_test')
## メソッドを使用する
tts_speaker(node, text='こんにちは!', id=26)
## 終了
print('done')
rclpy.shutdown()
node.destroy_node()
tts_speaker
は、以下の引数を求めます。
-
node(必須)
rclpy.node.Node
またはrclpy.create_node
により定義された Node オブジェクト を代入してください。 -
text
デフォルト値:"テキスト引数が指定されていません。"
(str)
VoiceVox に発音させたいテキストを入力してください。 -
id
デフォルト値:3
(int)
VoiceVox から発音するキャラクターIDを入力してください。デフォルトキャラクターは ずんだもん(ノーマル) です。キャラクターIDについては、 キャラクターID一覧 を参照してください。 -
timeout
デフォルト値:5
(int)
voicevox_ros2_core ノードが起動するまでの待機時間を設定します。単位は 秒(sec) です。指定した時間を過ぎたらメソッドは正常に終了します。 -
wait
デフォルト値:True
(bool)
発音が完了するまで待機するかどうかを設定します。- True
発音が完了するまで待機します。 - False
発音が完了しなくても後続のプロセスを実行します。
- True
状態遷移プロセスに VoiceVox_Ros2 を組み込む場合、以下のモジュールとメソッドをインポートしてください。
from voicevox_ros2.voicevox_ros2_tts import tts_SpeakerState
メソッド tts_SpeakerState には以下の引数を要求します。
-
node(必須)
rclpy.node.Node
またはrclpy.create_node
により定義された Node オブジェクト を代入してください。 -
text
デフォルト値:"テキスト引数が指定されていません。"
(str)
VoiceVox に発音させたいテキストを入力してください。 -
id
デフォルト値:3
(int)
VoiceVox から発音するキャラクターIDを入力してください。デフォルトキャラクターは ずんだもん(ノーマル) です。キャラクターIDについては、 キャラクターID一覧 を参照してください。 -
timeout
デフォルト値:5
(int)
voicevox_ros2_core ノードが起動するまでの待機時間を設定します。単位は 秒(sec) です。指定した時間を過ぎたら state はfailure
を返します。 -
wait
デフォルト値:True
(bool)
発音が完了するまで待機するかどうかを設定します。- True
発音が完了するまで待機します。 - False
発音が完了しなくても後続のプロセスを実行します。
- True
このステートは以下の結果を返します。
-
success
正常に voicevox_ros2_node がプロセスを遂行した。 -
timeout
プロセスが引数timeout
まで正常に動作しなかった。 -
failure
プロセスが重篤なエラーにより停止した
voice_saver
を使用すると、指定した場所に任意の音声ファイルを保存します。このノードの使用方法は以下のとおりです。ヘルプを表示するにはオプション -h
をつけます。
ros2 run voicevox_ros2 voice_saver -h
カレントディレクトリに こんにちは
と発音する音声ファイルを生成するには、オプション -t
に発話したいテキストを入力します。
ros2 run voicevox_ros2 voice_saver -t こんにちは
オプションは以下のとおりです。
オプション | デフォルト値 | 概要 |
---|---|---|
-t , --text | なし | 発話したいテキストを入力してください。必須引数です。 |
-i , --id | 3 | 発話させるキャラクターIDを設定します。 キャラクターIDは キャラクターID一覧 を参照してください。 |
-p , --path | カレントディレクトリ | ファイルの保存先を絶対パスで選択します。 |
-f , --file_name | output | ファイル名をします。拡張子を入力する必要はありません。 |
--speak | false | ファイル作成後その保存した音声を発話させるかどうかを指定します。true にすると発音します。 |
キャラクター名 | スタイル | ID |
---|---|---|
四国めたん | ノーマル | 2 |
あまあま | 0 | |
ツンツン | 6 | |
セクシー | 4 | |
ささやき | 36 | |
ヒソヒソ | 37 | |
ずんだもん | ノーマル | 3 |
あまあま | 1 | |
ツンツン | 7 | |
セクシー | 5 | |
ささやき | 22 | |
ヒソヒソ | 38 | |
春日部つむぎ | ノーマル | 8 |
雨晴はう | ノーマル | 10 |
波音リツ | ノーマル | 9 |
玄野武宏 | ノーマル | 11 |
喜び | 39 | |
ツンギレ | 40 | |
悲しみ | 41 | |
白上虎太郎 | ふつう | 12 |
わーい | 32 | |
びくびく | 33 | |
おこ | 34 | |
びえーん | 35 | |
青山龍星 | ノーマル | 13 |
冥鳴ひまり | ノーマル | 14 |
九州そら | ノーマル | 16 |
あまあま | 15 | |
ツンツン | 18 | |
セクシー | 17 | |
ささやき | 19 | |
もち子さん | ノーマル | 20 |
剣崎雌雄 | ノーマル | 21 |
WhiteCUL | ノーマル | 23 |
たのしい | 24 | |
かなしい | 25 | |
びえーん | 26 | |
後鬼 | 人間ver. | 27 |
ぬいぐるみver. | 28 | |
No.7 | ノーマル | 29 |
アナウンス | 30 | |
読み聞かせ | 31 | |
ちび式じい | ノーマル | 42 |
櫻歌ミコ | ノーマル | 43 |
第二形態 | 44 | |
ロリ | 45 | |
小夜/SAYO | ノーマル | 46 |
ナースロボ_タイプT | ノーマル | 47 |
楽々 | 48 | |
恐怖 | 49 | |
内緒話 | 50 |
- カタコト英語発音に対応(対応済み)
VoiceVoxは仕様上 英語をネイティブに発音できません 。しかし、今後カタコトではあるものの英単語を発音できるように対応させる予定です。
発音させたい英単語例 | 現在の発音スペル | 今後修正予定のスペル |
---|---|---|
ROS Humble | アールオーエス エイチユーエムビーエルイー | ロス ハンブル |