私的AI研究会 > OpenJtalk2

Open JTalk で日本語発声

 以前に Raspberry Pi で利用した音声合成ソフト「Open JTalk」 を再検証。
 OpenJTalk + Python でおしゃべりさせてみる。

※ 最終更新:2024/01/12 

OpenJtalk のインストール

 Linux 環境ではパッケージ管理ソフト「apt」によりインストールできるので比較的簡単。
 Windows 環境ではソースコードからコンパイルする必要がある。Visual Studio の C++ コンパイラを導入が必須。

Linux 環境の場合

  参考引用ページ → OpenJTalk + python で日本語テキストを発話

  1. 「OpenJTalk」ライブラリを調べる
    (py37) $ apt search open-jtalk
    ソート中... 完了
    全文検索... 完了  
    open-jtalk/focal 1.11-1build1 amd64
      日本語音声合成システム
    
    open-jtalk-mecab-naist-jdic/focal,focal 1.11-1build1 all
      NAIST Japanese Dictionary for Open JTalk
    
    (py37) $ apt search hts-voice-nitech-jp
    ソート中... 完了
    全文検索... 完了  
    hts-voice-nitech-jp-atr503-m001/focal,focal 1.05-5 all
      Japanese male voice data for Open JTalk
  2. 「OpenJTalk」ライブラリのインストール
    (py37) $ sudo apt install open-jtalk open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001
    「mecab」の辞書は、「/var/lib/mecab/dic/open-jtalk/naist-jdic/」にインストールされる

  3. 音声ファイルの配置
    「/usr/shsre/hts-voice/」フォルダ内に音声ファイルを置く
    メイちゃんの声のダウンロード から音声ファイル「MMDAgent_Example-1.8」をダウンロードし解凍する
    (py37) $ sudo mkdir /usr/share/hts-voice/mei
    (py37) $ sudo cp ~/ダウンロード/MMDAgent_Example-1.8/Voice/mei/*.htsvoice /usr/share/hts-voice/mei

Windows 環境の場合

  参考引用ページ → 【Windows】WindowsでOpen JTalkを使ってみる

  1. Visual Studio Communityのダウンロードページ から「Visual Studio Community」をダウンロード

    (Windowsの場合はOpenJTalkをビルドする必要がるので Visual Studio の C++ コンパイラを導入する)
  2. ダウンロードしたインストーラを起動
    ・インストールの準備が終わると右のの画面になるので「C++によるデスクトップ開発」にチェックを入れて「インストール」ボタンを押す

    ・インストールが完了した後再起動する
  3. 再起動後、コマンドプロンプト(PowerShellは不可)を起動しインストールを確認
    > cd C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build
    > vcvarsall.bat x64
    **********************************************************************
    ** Visual Studio 2022 Developer Command Prompt v17.3.3
    ** Copyright (c) 2022 Microsoft Corporation
    **********************************************************************
    [vcvarsall.bat] Environment initialized for: 'x64'
  4. nmakeのパスを環境変数に追加
    ・検索ウインドウに「システムの詳細」と入力し「システムの詳細設定の表示」を選択
    ・「システムのプロパティ」ダイアログで「環境変数」を押す
    ・システム環境変数の「Path」を選択した状態で「編集」をクリック
    ・環境変数の設定画面で「新規」ボタンをクリックして以下のパスを追加
     バージョン番号は時期により変わるので、リンクをたどって確認すること
    C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\bin\Hostx64\x64       ← 2022/09/12
    C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\bin\Hostx64\x64       ← 2023/12/20
  5. 新たにコマンドプロンプトを立ち上げ、次のコマンドを実行して確認
    > cd C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build
    > nmake
    
    Microsoft(R) Program Maintenance Utility Version 14.33.31629.0
    Copyright (C) Microsoft Corporation.  All rights reserved.
    
    NMAKE : fatal error U1064: MAKEFILE が見つかりません、またターゲットが指定されていません。
    Stop.
  6. OpenJTalk インストールに必要なファイル
    「update_20220916.zip」を解凍して「update/temp」フォルダを「c:/temp」に移動配置する
    temp
    ├─hts_engine_API-1.10
    ├─hts_voice_nitech_jp_atr503_m001-1.05
    ├─MMDAgent_Example-1.8
    ├─open_jtalk-1.11
    └─open_jtalk_dic_shift_jis-1.11
  7. 新たにコマンドプロンプト(PowerShellは不可)を起動し次のコマンドを実行
    > cd C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build
    > vcvarsall.bat x64
    **********************************************************************
    ** Visual Studio 2022 Developer Command Prompt v17.3.3
    ** Copyright (c) 2022 Microsoft Corporation
    **********************************************************************
    [vcvarsall.bat] Environment initialized for: 'x64'
  8. 「hts_engine_API」をビルドする
    > cd \temp\hts_engine_API-1.10
    > nmake /f Makefile.mak
        :
    > nmake /f Makefile.mak install
        :
    「c:\hts_engine_API」フォルダが作成される

  9. 「OpenJTalk」をビルドする
    > cd \temp\open_jtalk-1.11
    > nmake /f Makefile.mak
        :
    > nmake /f Makefile.mak install
        :
    「c:\open_jtalk」フォルダ「open_jtalk/bin」フォルダ内に「open_jtalk.exe」が作成される
     途中のエラーなどは無視してよい(辞書関連のエラーで後から入れるので)

  10. 辞書ファイルの配置
    「open_jtalk_dic_shift_jis-1.11」フォルダの中身を「c:\open_jtalk\bin\dic」フォルダに移す
    > mkdir c:\open_jtalk\bin\dic
    > copy c:\temp\open_jtalk_dic_shift_jis-1.11\*.* c:\open_jtalk\bin\dic
  11. ボイスファイルの配置
    > mkdir c:\open_jtalk\bin\Voice\nitech
    > copy c:\temp\hts_voice_nitech_jp_atr503_m001-1.05\nitech_jp_atr503_m001.htsvoice c:\open_jtalk\bin\Voice\nitech
    > mkdir c:\open_jtalk\bin\Voice\mei
    > copy c:\temp\MMDAgent_Example-1.8\Voice\mei\*.htsvoice c:\open_jtalk\bin\Voice\mei
    > mkdir c:\open_jtalk\bin\Voice\slt
    > copy c:\temp\MMDAgent_Example-1.8\Voice\slt\*.htsvoice c:\open_jtalk\bin\Voice\slt
    > mkdir c:\open_jtalk\bin\Voice\takumi
    > copy c:\temp\MMDAgent_Example-1.8\Voice\takumi\*.htsvoice c:\open_jtalk\bin\Voice\takumi
  12. テスト用の入力テキストファイルを作成
    ・発生したい文のテキストファイルを「c:\open_jtalk/bin」の下に作成(Shift-JIS)「input.txt」
    > cd c:\open_jtalk\bin
    > echo 準備ができたので、実際に合成音声ファイルを作成してみます 。> input.txt
  13. 「c:\open_jtalk\bin」フォルダ内のファイルの確認
    C:\open_jtalk\bin
    │  input.txt
    │  open_jtalk.exe
    ├─dic
    │      char.bin
    │      COPYING
    │      left-id.def
    │      matrix.bin
    │      pos-id.def
    │      rewrite.def
    │      right-id.def
    │      sys.dic
    │      unk.dic
    │
    └─Voice
        ├─mei
        │      mei_angry.htsvoice
        │      mei_bashful.htsvoice
        │      mei_happy.htsvoice
        │      mei_normal.htsvoice
        │      mei_sad.htsvoice
        │
        ├─nitech
        │      nitech_jp_atr503_m001.htsvoice
        │
        ├─slt
        │      cmu_us_arctic_slt.htsvoice
        │
        └─takumi
                takumi_angry.htsvoice
                takumi_happy.htsvoice
                takumi_normal.htsvoice
                takumi_sad.htsvoice
  14. 「OpenJTalk」のテスト
    ・プログラムの実行
    > cd c:\open_jtalk\bin
    > open_jtalk.exe -m Voice\nitech\nitech_jp_atr503_m001.htsvoice -x dic -ow output.wav input.txt
    
    > open_jtalk.exe -m Voice\mei\mei_normal.htsvoice -x dic -ow output1.wav input.txt
    ・音声ファイルが作成されれば OK

      「output.wav」  「output1.wav」

Python による再生プログラム

 Linux/Windows 環境では音声ファイルの再生方法が異なる。(Linuxでは、aplay / Windowsでは、winsound モジュールを利用)
また、今indowsでのコンパイルでの辞書生成は shift-jis なので python の内部エンコードから、stdin に渡す際に encoding を変換する必要がある。
これらの理由から、Linux/Windows 環境 それぞれ別のソースコード対応とする。

  参考引用ページ → OpenJTalk + python で日本語テキストを発話

Linux 環境の場合

Windows 環境の場合

 

更新履歴

 

参考資料

 

Last-modified: 2024-01-12 (金) 11:41:42