LoginSignup
0
1

Linux版VoiceVoxをネット越しで使う

Last updated at Posted at 2024-04-06

前提

ネットワーク越しでVoiceVoxを使う方法としてsshでlocalhost上のVoiceVoxポートをポートフォアーディングします。
なのでVoiceVoxが動作しているLinuxPCでopenssh-serverが動作している必要があります。

準備

1.VoiceVoxがインストールされているLinux PCでVoiceVoxを起動しておきます。
2.ssh username@targetpc.local -L 50021:localhost:50021
  でVoiceVoxが動作しているPCにsshで接続します。

VoiceVoxクライアントを起動する。

VoiceVoxクライアントとしては次のようなコードを使います。

vvnar
#!/usr/bin/python3
# このプログラムはVOICEVOXを利用したLinux版ナレータープログラムです。
# 使用するためにはVOICEVOXを起動しておく必要があります。

import PySimpleGUI as psg
import requests as req
import json
import pyaudio as pa

# ここにナレーションを入れます。('よみ','表示')の順で入れます。
mess = [
(
'説明読み',
'説明表示'
),
(
'今回は以上です',
'今回は以上です'
),
(
'',
''
)
]
dispnum=0

# init window
wlay = [[psg.Multiline(default_text=mess[0][1],size=(60,4),border_width=2,font=("",17),key='MText',disabled=True)],
        [psg.Button('Next',key='Next'),psg.Button('Top',key='Top'),psg.Button('終了',key='END')]]
win = psg.Window('VOICEVOX ナレータ(波音リツ)',wlay,keep_on_top=True)

# sperk function
def speak(mess,no):
    qu_requrl='http://localhost:50021/audio_query'
    ad_requrl='http://localhost:50021/synthesis'
    reqprm = (('text',mess), ('speaker',no), )
    rsvdat = req.post(qu_requrl, params=reqprm)
    wavdat = req.post(ad_requrl,
        headers={"Content-Type": "application/json"},
        params = reqprm,
        data = json.dumps(rsvdat.json())
    )
    wav = wavdat.content
    dev = pa.PyAudio()
    dev_stream = dev.open(format=pa.paInt16,
        channels=1,rate=24000,output=True)
    dev_stream.write(wav)
    dev_stream.close()
    dev.terminate()

while True:
    ev,val = win.read()
    if ev in ('END',None):
        break
    if ev == 'Next':
        dispnum+=1
        if dispnum >= len(mess):
            dispnum=len(mess)-1
    if ev == 'Top':
        dispnum=0
    win['MText'].Update(mess[dispnum][1])
    evT,valT = win.read(timeout=10,timeout_key='T10')
    try:
        # キャラを変えるためには第2引数の数値を変更します。
        # 3 はずんだもん
        speak(mess[dispnum][0],9)
    except Exception as e:
        print(e)

win.close()

なお、このコードは自由に改修してお使い下さい。
ファイルに取ったらそのファイルに実行権をつけてくださいね。

クライアントプログラムは、準備の2で接続した端末はログイン状態を維持したままで別の端末でこのプログラムを実行します。
するとポートフォアディングされているのでローカルでVoiceVoxが動作しているかのように動作します。
意外とVoiceVoxはCPUを使用するので非力なマシンではしんどいところがあるのでこの方法を使うことで非力なマシンでもテキストの読み上げができます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1