0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Python3 で発話システムをつくる

Last updated at Posted at 2018-09-14

声が出なくなった

カンファレンスで無理をして声が出なくなった。診察を受けると1週間ぐらい声が出ないということで、幸いにして他の人に感染するようなものではない。

しかしながらプレゼンやら、勉強会のチューターの予定がみっちり入っているため、どうにかしなくては。

プレゼン方法

当初、プレゼンは音楽を流して、ライブプレゼンに徹しようかと思った。
しかしながらプレゼン後の質疑応答だとか、勉強会のチューターは声が出ないと仕方がない。

なので、 Ubuntu Linux 16.04 と MS-Windows 10 で発話システムを作った。

image

こんな感じ。

Ubuntu Linux 16.04 + JTalk

まずは使い慣れたやつ。

JTalkインストール


sudo apt-get install open-jtalk --install-suggests 

発話テスト


$ echo "こんにちは" | open_jtalk -x /var/lib/mecab/dic/open-jtalk/naist-jdic -m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice -ow /dev/stdout | aplay

音響モデルの選択

年齢相応の男性の声を使いたい。

http://mahoro-ba.net/index.php?j=1875
ここで比較してみた。
結果、標準添付のm001がいい感じ、ライセンス的にも安心のメジャーライセンス。

Python で話す

単に、subprocess でシェルを呼び出して実行するだけ。
keyに日本語文字列を入れて、以下を実行。


import  subproces

subprocess.run("echo \""+key+"\" | open_jtalk -x /var/lib/mecab/dic/open-jtalk/naist-jdic -m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice -ow /dev/stdout | aplay "
  ,shell=True
  ,stdout=subprocess.DEVNULL
  ,stderr=subprocess.DEVNULL)

これを、半透明、フォントサイズ、最前面に調整したターミナルで動かす。

作ったコード

GitHUBにて公開しました。

の superc.py です。

カウントダウン表示

カウントダウン表示については勉強会のチューターでは必要ないので、別プログラムに分けた。
以下は5分をカウントダウンするもの。


import time
import datetime

d1=datetime.datetime.now()
td=datetime.timedelta(seconds=300)
d2=d1+td
while True:
    time.sleep(0.01)
    c = (d2-datetime.datetime.now())
    sys.stdout.write("\033[2K\033[G%s" % c)
    sys.stdout.flush()

image

意味のないマイクロ秒表示。

BGMを流す


$ sudo pip3 install pygame mutagen

として、


import pygame
filename='dai9.mp3'
pygame.mixer.init()
pygame.mixer.music.load(filename)
pygame.mixer.music.set_volume(0.2)
pygame.mixer.music.play(1)

とするとボリューム0~1の間の0.2で1回第九を演奏する。

作ったコード

演奏とカウントダウンをまとめてcountandkick.pyとしました。

Ubuntuでの追加設定

プレゼン画面と発話字幕画面、カウントダウンを表示しておいて、発話字幕画面とカウントダウン画面を「最前面へ」でトップに表示しておく。
プレゼン画面はImpressのスライドショーだと他のアプリの「最前面へ」よりも上位にスライドショーが表示されるので、PDF画面をスクロールしてプレゼンした。

最前面に表示しているので、フォーカスが合っていると間違えて操作をミスることがあった。

それを少しでも防ぐため、マウスオーバーでフォーカスが合うようにしておく。
「Mouse over Active window」というのだそうだ。
UbuntuでMouse over Active window
を設定するやり方は、Unity Tweak Toolで、「ウィンドウマネージャー」-「その他」-「全般」の「フォーカス動作」で「フォーカスモード」を「スロッピー(Sloppy)」にする。

Windows 10

動作検証中

使っているところ

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?