PDFページに連動したVOICEVOXナレーター
このプログラムは、PDFを読み取りその内容を表示しながら、VOICEVOXでプログラム中の原稿を読上げます。
動作環境
WindowsでもLinuxでもVOICEVOXが起動していれば動作すると思います。
動作チェックはLinuxでしかやっていません。
必要なライブラリ
PySimpleGUI、pdf2image、requests、pyaudio
code
コードはご自由に変更してお使いくださいませ。
#!/usr/bin/python3
# Programed By M.kawase embed-ai labo. LTD
import PySimpleGUI as sw
import pdf2image as p2i
import requests as req
import json
import pyaudio as pa
wdef = [[sw.Image(key="IM01")]]
imgs=p2i.convert_from_path('./Linux01.pdf',80,fmt='png')
# File Path ^-----------^ ^^ 大きさ
# ここにナレーションを入れます。('ナレーション',キャラ番号)の順で入れます。
mess = [
('読上げテスト1',3),
('読上げテスト2',3),
('読上げテスト3',3),
('',0)
]
dispnum=0
# 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()
win = sw.Window('vvpdf',wdef,size=(600,400))
for img in imgs:
img.save('pdfimg.png','PNG')
win.finalize()
win['IM01'].Update(filename='pdfimg.png')
e,v=win.read(timeout=1000,timeout_key="T01")
speak(mess[dispnum][0],mess[dispnum][1])
dispnum += 1
win.close()
解説動画
このプログラムを使った改修点の解説動画を上げてあります。
スピーカー番号を調べる方法
ずんだもん以外の声を使う場合は、番号を変える必要がありその番号を調べる方法です。
キャラによりライセンス表記が異なりますので各キャラクタでご確認ください。