kozyonikkiのブログ

どこか知の旅に出たときのことを書いていきます。

ラズパイでまだまだな読手を作った話(百人一首)

目次

  1. 読手の注意点
  2. 引用したもの
  3. 実際に書いたコード
  4. 使ってみての感想

読手の注意点

読まれ方 かるたの札
道外 上の句読んで下の句取る 紙の札
北海道 下の句読んで下の句読む 木札

※北海道の百人一首と道外の百人一首では読み方が違います。

引用したもの

RaspberryPiでニュースを読み上げる | DeathMarch.net
Raspberry Pi | ラズパイに喋ってもらう作戦(Open JTalk1.08のインストールと音声出力設定) – たぷん日記


今回はPythonで読手を作りました。
一番上の記事はOSインストールやOpen JTalk1.08のインストール方法が書かれています。

実際に書いたコード

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import shlex
import subprocess
import random
import json
import time

CMD_SAY = 'jsay'

random_list = []

saisyo = "ひさかたの、光のどけき、春の日に、静心なく、花の散るらむ"

list_karuta = [
    "わが衣手は、露にぬれつつ、",
    "衣ほすてふ、天の香具山、",
    "ながながし夜を、ひとりかも寝む、",
    "富士の高嶺に、雪は降りつつ、",
    "声きく時ぞ、秋は悲しき、",
    "白きをみれば、夜ぞふけにけ、",
    "三笠の山に、出でし月かも、",
    "世をうぢ山と、人はいふなり、",
    "わが身世にふる、ながめせしまに、",
    "知るも知らぬも、逢坂の関、",
    "人には告げよ、海人の釣舟、",
    "をとめの姿、しばしとどめむ、",
    "恋ぞつもりて、淵となりぬる、",
    "乱れそめにし、われならなくに、",
    "わが衣手に、雪は降りつつ、",
    "まつとし聞かば、今帰り来む、",
    "からくれなゐに、水くくるとは、",
    "夢の通ひ路、人めよくらむ、",
    "逢はでこの世を、過ぐしてよとや、",
    "みをつくしても、逢はむとぞ思ふ、",
    "有明の月を、待ち出でつるかな、",
    "むべ山風を、嵐といふらむ、",
    "わが身一つの、秋にはあらねど、",
    "紅葉の錦、神のまにまに、",
    "人にしられで、くるよしもがな、",
    "今ひとたびの、みゆき待たなむ、",
    "いつ見きとてか、恋しかるらむ、",
    "人目も草も、かれぬと思へば、",
    "置きまどはせる、白菊の花、",
    "あかつきばかり、憂きものはなし、",
    "吉野の里に、降れる白雪、",
    "流れもあへぬ、紅葉なりけり、",
    "静心なく、花の散るらむ、",
    "松も昔の、友ならなくに、",
    "花ぞ昔の、香ににほひける、",
    "雲のいづこに、月宿るらむ、",
    "つらぬきとめぬ、玉ぞ散りける、",
    "人の命の、惜しくもあるかな、",
    "あまりてなどか、人の恋しき、",
    "物や思ふと、人の問ふまで、",
    "人知れずこそ、思ひそめしか、",
    "末の松山、波越さじとは、",
    "昔は物を、思はざりけり、",
    "人をも身をも、恨みざらまし、",
    "身のいたづらに、なりぬべきかな、",
    "ゆくへも知らぬ、恋の道かな、",
    "人こそ見えね、秋は来にけり、",
    "くだけて物を、思ふころかな、",
    "昼は消えつつ、物をこそ思へ、",
    "長くもがなと、思ひけるかな、",
    "さしも知らじな、燃ゆる思ひを、",
    "なほうらめしき、朝ぼらけかな、",
    "いかに久しき、ものとかは知る、",
    "今日を限りの、命ともがな、",
    "名こそ流れて、なほ聞こえけれ、",
    "今ひとたびの、逢ふこともがな、",
    "雲がくれにし、夜半の月かな、",
    "いでそよ人を、忘れやはする、",
    "かたぶくまでの、月を見しかな、",
    "まだふみもみず、天の橋立、",
    "けふ九重に、にほひぬるかな、",
    "よに逢坂の、関はゆるさじ、",
    "人づてならで、言ふよしもがな、",
    "あらはれわたる、瀬々の網代木、",
    "恋に朽ちなむ、名こそ惜しけれ、",
    "花よりほかに、知る人もなし、",
    "かひなく立たむ、名こそ惜しけれ、",
    "恋しかるべき、夜半の月かな、",
    "竜田の川の、錦なりけり、",
    "いづこも同じ、秋の夕暮れ、",
    "芦のまろやに、秋風ぞ吹く、",
    "かけじや袖の、ぬれもこそすれ、",
    "外山の霞、立たずもあらなむ、",
    "はげしかれとは、祈らぬものを、",
    "あはれ今年の、秋もいぬめり、",
    "雲居にまがふ、沖つ白波、",
    "われても末に、あはむとぞ思ふ、",
    "いく夜寝覚めぬ、須磨の関守、",
    "もれ出づる月の、影のさやけさ、",
    "乱れて今朝は、物をこそ思へ、",
    "ただ有明の、月ぞ残れる、",
    "憂きにたへぬは、涙なりけり、",
    "山の奥にも、鹿ぞ鳴くなる、",
    "憂しと見し世ぞ、今は恋しき、",
    "閨のひまさへ、つれなかりけり、",
    "かこち顔なる、わが涙かな、",
    "霧立ちのぼる、秋の夕暮れ、",
    "みをつくしてや、恋ひわたるべき、",
    "忍ぶることの、よわりもぞする、",
    "ぬれにぞぬれし、色はかはらず、",
    "衣かたしき、ひとりかも寝む、",
    "人こそ知らね、かわく間もなし、",
    "あまの小舟の、綱手かなしも、",
    "ふるさと寒く、衣うつなり、",
    "わが立つ杣に、墨染の袖、",
    "ふりゆくものは、わが身なりけり、",
    "焼くや藻塩の、身もこがれつつ、",
    "みそぎぞ夏の、しるしなりける、",
    "世を思ふゆゑに、物思ふ身は、",
    "なほあまりある、昔なりけり、"]

i = 0
t = 5

while 5 > 1:
    x = random.randint(0, 99)
    if not x in random_list:
        random_list.append(x)

        if i == 0:  # 一番最初の読み
            #input("put enter")
            text = CMD_SAY + ' ' + saisyo
            print(text)
            proc = subprocess.Popen(shlex.split(text))
            proc.communicate()
            text = CMD_SAY + ' ' + list_karuta[x]
            print(text)
            proc = subprocess.Popen(shlex.split(text))
            proc.communicate()
            time.sleep(t)
            front_mozi = list_karuta[x]
            i = i + 1
            continue

        elif i == 1:  # 一番最初以降の読み
            #input("put enter")
            text = CMD_SAY + ' ' + front_mozi
            print(text)
            proc = subprocess.Popen(shlex.split(text))
            proc.communicate()
            text = CMD_SAY + ' ' + list_karuta[x]
            print(text)
            proc = subprocess.Popen(shlex.split(text))
            proc.communicate()
            time.sleep(t)
            front_mozi = list_karuta[x]  # 今回の句を記憶する
            continue

        elif len(random_list) == 99:
            break
    else:
        pass


使ってみての感想


リストに入れてある文をランダムで読み上げてくれますが、歴史的仮名遣いや漢字の読み違いがあります。

×
紅葉 もみじ こうよう
衣ほすてふ ころもほすちょう ころもほすてふ


いずれ直していきたいと思います。


お手付きや相手に札を取られたとき、読み上げを停止、再開した場合は ↓ の記事で確認してください。
プログラムを一時停止するには


あと、やっぱり人に読んでもらうが一番いいなと思ってしまった自分もいました。