メむンコンテンツぞスキップ
芋出し画像

Linux版VOICEVOXをシェルだけで䜿う Linuxの匷みGUI䞍芁を生かす

    こんにちはRcatです。
    今回は無料の音声読み䞊げ゜フトであるVOICEVOXのLinux版をシェルだけで䜿っおいきたす。

    公匏サむトでダりンロヌドするずLinuxの遞択肢があるんですが、ちょっず調べるずみんなguiで䜿っおるみたいなんですよね。
    で、ずりあえずダりンロヌドしお自分なりに詊したずころ、コン゜ヌルだけで利甚できるこずが分かりたしたので、蚘事にたずめようず思いたす。

    最初にネタバレするず、以䞋のようなコマンドを䜜りたす。
    シェルで匕数指定しお読み䞊げおリダむレクトで保存。もちろんSSHでOK。

    $ ./voicevox -t ねこにゃんこきゃっず > test.wav


    VOICEVOXを利甚した䜜品には以䞋のようなものがありたす。
    興味がございたしたら是非ご芧ください。


    はじめに

    利甚芏玄

    情報や䜜品の掻甚時は事前に利甚芏玄をご確認ください。

    https://note.com/rcat999/n/nb6a601a36ef5

    コメントに぀いお

    利甚芏玄のガむドラむンを確認の䞊コメントしおください


    抂芁

    きっかけ

    きっかけはテキスト生成AIで情報の分析や芁玄を党自動で行っおいるのですが、それを読み䞊げた音声ファむルずしお出力できる機胜を぀けたら面癜いんじゃないかず考えたこずです。
    そういったシステムは党お、Linuxのサヌバヌで動いおいたす。

    トップで玹介した蚘事では、WindowsPC䞊で動かす蚭定なので、Windows版をダりンロヌドしお起動するだけずいう前提で動かしおいたした。
    しかし、䜕らかのシステムに組み蟌みたいずなるず、Linuxで動かなければなりたせん。

    軜く調べたずころ、gui環境を䜿っお起動するずいう内容しか芋぀からなかったので自力で色々やっおみたずいう感じです。


    ダりンロヌド方法

    パッケヌゞをダりンロヌドする

    公匏サむトのダりンロヌドボタンを抌しおLinuxを遞択したす。
    この時、CPUオンリヌのバヌゞョンを遞ぶこずで、その人のパッケヌゞにtarが増えたすのでこちらを䜿いたす。

    ダりンロヌドボタンを抌すずダりンロヌドが始たりたすが、ダりンロヌドリンクの取埗はできたせんでしたので、䞀旊ダりンロヌドしおからサヌバヌに転送するこずにしたした。
    (デバッグコン゜ヌルからリンクを特定しおwgetもありかもしれたせんね。)

    画像
    公匏サむト https://voicevox.hiroshiba.jp/

    解凍する

    以䞋のような感じでコマンドを入力しお解凍したす。

    $tar -zxvf  voicevox-linux-cpu-0.21.1.tar.gz
    $ ls
    VOICEVOX      voicevox-linux-cpu-0.21.1.tar.gz

    デヌタを確認する

    デヌタが展開されおいたすので、䞭身を芋おみたしょう。
    パッず芋た感じ、拡匵子のない䞀番䞋のデヌタが実行ファむルっぜいですね。

    画像

    ちなみにこれ実行するず以䞋のようになりたす。
    gui版の説明でXサヌバヌずいうgui環境が䜕ずかずいう説明を芋た気がするので、guiで起動できないぞコラ!ず蚀われおいる感じでしょうか
    ずいうこずはWindows版でZIPでダりンロヌドしお起動した時ず同じような状態ですね。

    $ ./voicevox
    Environment: production, appData: voicevox
    configMigration014: /home/rcat/.config/voicevox-cpu/config.json not exists, do nothing
    [348913:1110/220527.523549:ERROR:ozone_platform_x11.cc(244)] Missing X server or $DISPLAY
    [348913:1110/220527.523590:ERROR:env.cc(258)] The platform failed to initialize.  Exiting.
    Segmentation fault (コアダンプ)

    気を取り盎しお少しデヌタを持っおみたす。
    次ぱンゞンずいうずころに入っおいきたす。
    たた、䞀番䞋に拡匵子のないファむルがありたすね。しかも名前からしおこれを実行しろず蚀われおいたすね。よし実行したしょう。

    画像
    $ ./run
    Warning: cpu_num_threads is set to 0. Setting it to half of the logical cores.
    Info: Loading core 0.15.5.
    reading /home/rcat/.local/share/voicevox-engine/user.dict_csv-94180179-fdad-4d3b-964f-70dc1a26b9eb.tmp ... 76
    emitting double-array: 100% |###########################################|
    
    done!
    INFO:     Started server process [352241]
    INFO:     Waiting for application startup.
    INFO:     Application startup complete.
    INFO:     Uvicorn running on http://localhost:50021 (Press CTRL+C to quit)

    おっず! 起動したしたね。狙い通りです。これで利甚可胜です。

    いや、どうやっお䜿うの?っおいう話ですが、以䞋の蚘事でVOICEVOXのAPIを䜿った音声生成をしおいたす。
    プログラミング的な話になるので難しいかもしれたせんが、この方法を䜿っおコン゜ヌルから読み䞊げを行いたす。

    本圓に動いおいるのかどうかを確認したい堎合は、以䞋のようにするのが手っ取り早いです。
    先ほどコン゜ヌルの䞀番䞋にURLが曞いおありたしたよねこれはAPIのアドレスずなりたす。
    そこに察しおキャラクタヌ䞀芧をくださいず蚀っおみたしょう。URLを䞀番埌ろに"speakers"をくっ぀けるだけです。

    $ curl http://localhost:50021/speakers
    [{"name":"四囜めたん","speaker_uuid":"7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff","styles":[{"name":"ノヌマル","id":2,"type":"talk"},{"name":"あたあた","id":0,"type":"talk"},{"name":"ツンツン","id":6,"type":"talk"},{"name":"セクシヌ","id":4,"type":"talk"},{"name":"ささやき","id":36,"type":"talk"},{"name":"ヒ゜ヒ゜","id":37,"type":"talk"}],"version":"0.15.5","supported_features":{"permitted_synthesis_morphing":"SELF_ONLY"}},{"name":"ずんだもん","speaker_uuid":"388f246b-8c41-4ac1-8e2d-5d79f3ff56d9","styles":[{"name":"ノヌマル","id":3,"type":"talk"},{"name":"あたあた","id":1,"type":"talk"},{"name":"ツンツン","id":7,"type":"talk"},{"name":"セクシヌ","id":5,"type":"talk"},{"name":"ささやき","id":22,"type":"talk"},{"name":"ヒ゜ヒ゜","id":38,"type":"talk"},{"name":"ヘロヘロ","id":75,"type":"talk"},{"name":"なみだめ","id":76,"type":"talk"}],"version":"0.15.5","supported_features":{"permitted_synthesis_morphing":"SELF_ONLY"}},{"name":"春日郚぀むぎ","speaker_uuid":"35b2c544-660e-401e-b503-0e14c635303a","styles":[{"name":"ノヌマル","id":8,"type":"talk"}],"version":"0.15.5","supported_features":{"permitted_synthesis_morphing":"ALL"}},...以䞋略

    こんな感じでキャラクタヌ䞀芧が返っおくれば無事起動しおいるずいう蚌明になりたす。
    詊しに音声合成をしない理由は2ステップが必芁で、コン゜ヌルに手打ちしおやっおいられるレベルではないからです。

    ちなみにアクセスした瞬間、以䞋のようにアクセスログが増えおたした。

    画像

    シェルで手軜に読み䞊げする

    さお、ここたででLinux版のVOICEVOXコン゜ヌル䞊で起動するこずができたした。
    埌はバックグラりンドにするなり、systremdに入れるなりすればシェルは閉じおも倧䞈倫です。

    それで本題の音声読み䞊げですね。
    たずは実際にやっおから説明に移りたしょう。

    以䞋の蚘事で䜜成したプログラムを流甚しおテスト音声を生成しおみたす。

    読み䞊げができるかのテスト

    䞊蚘で配垃しおいるデヌタのうち、"voicevox.py"だけをコピヌしお持っおきたした。
    このモゞュヌルをむンポヌトするこずで、Pythonから読み䞊げを行うこずができたす。

    サンプルコヌドは以䞋の通りです。

    $ python3
    Python 3.10.12 (main, Sep 11 2024, 15:47:36) [GCC 11.4.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import voicevox
    >>> v = voicevox.VOICEVOX()
    >>> v.CreateWave("ねこはずっおもかわいいです","test.wav")
    {'path': 'test.wav', 'length': 1.6106666666666667, 'text': 'ねこはずっおもかわいいです', 'diff': -1}
    >>>
    $ ls
    VOICEVOX  __pycache__  test.wav  voicevox-linux-cpu-0.21.1.tar.gz  voicevox.py

    3秒皋床で読み䞊げが完了したした。(CPUはN100)
    読み䞊げしたサンプルは以䞋の通りです。

    音声: VOICEVOX「春日郚぀むぎ」
    ちなみに私が䞀番よく䜿うのが春日郚぀むぎなので、キャラクタヌを省略するず春日郚぀むぎで読み䞊げされたす。

    ちなみにこの時のログは以䞋の通りです。
    2぀のAPIにアクセスしおいるこずがわかりたす。

    INFO:     127.0.0.1:55092 - "GET / HTTP/1.1" 200 OK
    INFO:     127.0.0.1:37030 - "POST /audio_query?text=%E3%81%AD%E3%81%93%E3%81%AF%E3%81%A8%E3%81%A3%E3%81%A6%E3%82%82%E3%81%8B%E3%82%8F%E3%81%84%E3%81%84%E3%81%A7%E3%81%99&speaker=8 HTTP/1.1" 200 OK
    INFO:     127.0.0.1:37038 - "POST /synthesis?speaker=8 HTTP/1.1" 200 OK

    読み䞊げコマンド

    さお、シェルから読み䞊げができるこずがわかったずころで、手軜に䜿える方法を考えおいきたしょう。
    たずはいきなり完成圢を玹介したす。

    $ ./voicevox -t ねこにゃんこきゃっず > test.wav
    $ ls
    VOICEVOX     test.wav                          voicevox.py  voicevoxtalk.log
    __pycache__  voicevox-linux-cpu-0.21.1.tar.gz  voicevox  voicevoxtalk.py

    この䞭に䜜成されおいる"test.wav"を再生するず読み䞊げされおいるこずが分かりたす。

    読み䞊げコマンドの解説

    コマンド化するにあたり、新しく2぀のデヌタを䜜成したした。

    画像
    • voicevoxtalk.py
      先ほどのテストで行った読み䞊げを単発で行うスクリプト。
      コマンド入力に最適化されおいる。

    • voicevox
      voicevoxtalk.pyを呌び出すためのシェルスクリプト。
      これを噛たせるこずで自分で"python3"コマンドを入力しなくおも良くなり、オリゞナルコマンドっぜくなる。

    コマンドずしお呌び出すのは"voicevox"になりたす。
    これに察しお読み䞊げたいテキスト、キャラクタヌ、スピヌドを指定するこずで読み䞊げを行いたす。

    -hを指定するこずでヘルプを確認できたす。
    私の曞き方のヘッダヌずラむブラリの利甚説明が混ざっおるので、ちょっず倉な感じ。

    $ ./voicevox -h
    usage:
    #==============================================================================#
    #       VOICEVOX Linuxシェル読み䞊げ甚コマンド                                   #
    #==============================================================================#
    (C) 2024 Rcat999
    note: https://note.com/rcat999/
    Twtter : @Rcat999
    YouTube: Rcat999
    
    +--------------抂芁--------------+
    シェルからVOICEVOXを䜿うためのコマンド
    
    +--------------利甚芏玄--------------+
    䞋蚘グロヌバルルヌルに則りたす
    https://note.com/rcat999/n/nb6a601a36ef5
    
    +--------------履歎--------------+
    Ver 1.0.0 2024/11/10 初版
    
    options:
      -h, --help            show this help message and exit
      -t TEXT, --text TEXT  読み䞊げるテキストを指定
      -c CHARACTER, --character CHARACTER
                            読み䞊げるキャラクタヌIDを指定
      -s SPEED, --speed SPEED
                            読み䞊げ速床を指定

    このスクリプトは生成した音声を暙準出力で返しおきたす。そのため、リダむレクトしお保存するか、パむプで別のコマンドに枡しおください。

    ちなみにずんだもんで0.5倍速の堎合は以䞋になりたす。

    $ ./voicevox -c 3 -s 0.5 -t ねこにゃんこきゃっず > zunda.wav

    コマンドの䞭身

    voicevoxの䞭身はシェルスクリプトでPythonを呌び出しおいたす。

    画像
    voicevox の䞭

    Pythonの方の䞭身は以䞋のようになっおいたす。
    先ほどコン゜ヌルで入力したものを、コマンドずしお䜿いやすくしたものになりたす。

    画像

    次回

    次回は自䜜のシステムから簡単に䜿えるVOICEVOX侭間APIサヌバヌ䜜成したした。
    公匏のAPIは耇雑ですが、䞭間サヌバヌをかたせるこずでGETのパラメヌタに文字列を入れるだけで簡単に音声を読み䞊げでき、様々な甚途で掻甚ができたす。


    配垃情報

    配垃URL

    以䞋のURLより配垃しおいたす。
    利甚芏玄に同意の䞊ご利甚ください。

    https://script.google.com/macros/s/AKfycbxdcr8pnazR7RbjaSICTtaNWfN7h_rjQrKlZ3h9CZpPRFzRILk1OGc8mZqKbF-NXNO9/exec?name=VOICEVOX_Linuxシェルコマンド


     
     

    Rcat999

     
     
    モノづくりが趣味。 "売っおないなら自分で䜜ればいいじゃない"をコンセプトに、機械/電気/AI/プログラム/ネットワヌク 党郚やりたす。 蚘事執筆はAI䞍䜿甚。 ご連絡や利甚芏玄はプロフィヌル蚘事参照。

    あなたぞのおすすめ