システム開発<基本編>Pythonで音声ファイル変換+読み上げ処理(テキストファイルの読み込み)

Python

前回の記事では、Webスクレイピング処理に加えて、WordCloud生成を組み合わせて、

対象のWebページから、単語(キーワード)可視化する処理を紹介しました。

 

今回は、Pythonテキストファイルの内容を読み込んだ後、音声ファイル変換して、

読み上げ処理を行う記事を紹介しようと思います。

Pythonでテキストファイル読み込み + 音声ファイル変換 + 読み上げ処理

 

ライブラリのインストール

音声ファイル変換して、読み上げる処理を実現する為に、専用のライブラリを

インストールしてみましょう。

今回使用するライブラリは、下記の2つになります。

  1. gTTS (Google Translate’s Text-to-Speech):Google翻訳の読み上げライブラリ
  2. pygame:ゲームを開発する為のライブラリで、mixer.musicモジュールを利用して、ストリーミング再生を実現します

 

インストール済みのライブラリの確認

インストール済みのライブラリを、下記のコマンドで確認してみましょう。

python -m pip list

 

まだ、gTTSライブラリ pygameライブラリ がインストールされていない事が

確認出来ました。

 

gTTSライブラリのインストール

先ずは、gTTSライブラリインストールします。

コマンドプロンプト または PowerShell を起動します。

下記のコマンドで、gTTSライブラリインストールしてみます。

python -m pip install gTTS

 

 

pygameライブラリのインストール

次に、pygameライブラリインストールします。

下記のコマンドで、pygameライブラリインストールしてみます。

python -m pip install pygame

 

 

2つのライブラリ共に、インストール時エラーが表示されませんでしたので、問題無く

インストールされていると思いますが、念の為、インストール済みのライブラリを確認します。

python -m pip list

 

 

  1. gTTS:Version 2.5.4
  2. pygame:Version 2.6.1

上記のライブラリがインストールされている事が、確認出来ました。

 

音声ファイル変換+読み上げ処理

音声ファイル変換して、読み上げ処理を実現するのに必要なライブラリがインストール

されましたので、実際に音声ファイル変換+読み上げ処理を実装して行きます。

 

読み込み元ファイル:百人一首

読み込み元となる、テキストファイルを準備します。

今回も、「百人一首」のデータを利用してみます。

 

下記の記事では、「百人一首」CSVファイル JSONファイル の読み込み処理を

紹介していますので、参考にして下さい。

 

 

今回は単純に、「百人一首」テキストファイルから読み込みます。

準備されていない方は、下記の「百人一首」一覧をコピーして、テキストファイル

保存して下さい。

1:秋の田の かりほの庵の 苫をあらみ わが衣手は 露にぬれつつ / 天智天皇
2:春すぎて 夏来にけらし 白妙の 衣ほすてふ 天の香具山 / 持統天皇
3:あしびきの 山鳥の尾の しだり尾の ながながし夜を ひとりかも寝む / 柿本人麻呂
4:田子の浦に うち出でてみれば 白妙の 富士の高嶺に 雪は降りつつ / 山部赤人
5:奥山に 紅葉踏みわけ 鳴く鹿の 声きく時ぞ 秋は悲しき / 猿丸大夫
6:かささぎの 渡せる橋に おく霜の 白きをみれば 夜ぞふけにける / 中納言家持
7:天の原 ふりさけ見れば 春日なる 三笠の山に 出でし月かも / 安倍仲麿
8:わが庵は 都のたつみ しかぞすむ 世をうぢ山と 人はいふなり / 喜撰法師
9:花の色は うつりにけりな いたづらに わが身世にふる ながめせしまに / 小野小町
10:これやこの 行くも帰るも 別れては 知るも知らぬも 逢坂の関 / 蝉丸
11:わたの原 八十島かけて 漕ぎ出でぬと 人には告げよ 海人の釣舟 / 参議篁
12:天つ風 雲の通ひ路 吹き閉ぢよ をとめの姿 しばしとどめむ / 僧正遍照
13:筑波嶺の 峰より落つる 男女川 恋ぞつもりて 淵となりぬる / 陽成院
14:陸奥の しのぶもぢずり 誰ゆゑに 乱れそめにし われならなくに / 河原左大臣
15:君がため 春の野に出でて 若菜つむ わが衣手に 雪は降りつつ / 光孝天皇
16:たち別れ いなばの山の 峰に生ふる まつとし聞かば 今帰り来む / 中納言行平
17:ちはやぶる 神代も聞かず 竜田川 からくれなゐに 水くくるとは / 在原業平朝臣
18:住の江の 岸による波 よるさへや 夢の通ひ路 人めよくらむ / 藤原敏行朝臣
19:難波潟 みじかき芦の ふしの間も 逢はでこの世を 過ぐしてよとや / 伊勢
20:わびぬれば 今はた同じ 難波なる みをつくしても 逢はむとぞ思ふ / 元良親王
21:今来むと 言ひしばかりに 長月の 有明の月を 待ち出でつるかな / 素性法師
22:吹くからに 秋の草木の しをるれば むべ山風を 嵐といふらむ / 文屋康秀
23:月見れば ちぢにものこそ 悲しけれ わが身一つの 秋にはあらねど / 大江千里
24:このたびは ぬさもとりあへず 手向山 紅葉の錦 神のまにまに / 菅家
25:名にしおはば 逢坂山の さねかづら 人にしられで くるよしもがな / 三条右大臣
26:小倉山 峰のもみぢ葉 心あらば 今ひとたびの みゆき待たなむ / 貞信公
27:みかの原 わきて流るる 泉川 いつ見きとてか 恋しかるらむ / 中納言兼輔
28:山里は 冬ぞさびしさ まさりける 人目も草も かれぬと思へば / 源宗于朝臣
29:心あてに 折らばや折らむ 初霜の 置きまどはせる 白菊の花 / 凡河内躬恒
30:有明の つれなく見えし 別れより あかつきばかり 憂きものはなし / 壬生忠岑
31:朝ぼらけ 有明の月と 見るまでに 吉野の里に 降れる白雪 / 坂上是則
32:山川に 風のかけたる しがらみは 流れもあへぬ 紅葉なりけり / 春道列樹
33:ひさかたの 光のどけき 春の日に 静心なく 花の散るらむ / 紀友則
34:誰をかも 知る人にせむ 高砂の 松も昔の 友ならなくに / 藤原興風
35:人はいさ 心も知らず ふるさとは 花ぞ昔の 香ににほひける / 紀貫之
36:夏の夜は まだ宵ながら 明けぬるを 雲のいづこに 月宿るらむ / 清原深養父
37:白露に 風の吹きしく 秋の野は つらぬきとめぬ 玉ぞ散りける / 文屋朝康
38:忘らるる 身をば思はず 誓ひてし 人の命の 惜しくもあるかな / 右近
39:浅茅生の 小野の篠原 しのぶれど あまりてなどか 人の恋しき / 参議等
40:しのぶれど 色に出でにけり わが恋は 物や思ふと 人の問ふまで / 平兼盛
41:恋すてふ わが名はまだき 立ちにけり 人知れずこそ 思ひそめしか / 壬生忠見
42:契りきな かたみに袖を しぼりつつ 末の松山 波越さじとは / 清原元輔
43:逢ひ見ての のちの心に くらぶれば 昔は物を 思はざりけり / 権中納言敦忠
44:逢ふことの 絶えてしなくは なかなかに 人をも身をも 恨みざらまし / 中納言朝忠
45:あはれとも いふべき人は 思ほえで 身のいたづらに なりぬべきかな / 謙徳公
46:由良のとを 渡る舟人 かぢを絶え ゆくへも知らぬ 恋の道かな / 曾禰好忠
47:八重葎 しげれる宿の さびしきに 人こそ見えね 秋は来にけり / 恵慶法師
48:風をいたみ 岩うつ波の おのれのみ くだけて物を 思ふころかな / 源重之
49:みかきもり 衛士のたく火の 夜は燃え 昼は消えつつ 物をこそ思へ / 大中臣能宣
50:君がため 惜しからざりし 命さへ 長くもがなと 思ひけるかな / 藤原義孝
51:かくとだに えやはいぶきの さしも草 さしも知らじな 燃ゆる思ひを / 藤原実方朝臣
52:明けぬれば 暮るるものとは 知りながら なほうらめしき 朝ぼらけかな / 藤原道信朝臣
53:嘆きつつ ひとり寝る夜の 明くる間は いかに久しき ものとかは知る / 右大将道綱母
54:忘れじの 行く末までは かたければ 今日を限りの 命ともがな / 儀同三司母
55:滝の音は 絶えて久しく なりぬれど 名こそ流れて なほ聞こえけれ / 大納言公任
56:あらざらむ この世のほかの 思ひ出に 今ひとたびの 逢ふこともがな / 和泉式部
57:めぐりあひて 見しやそれとも わかぬ間に 雲がくれにし 夜半の月かな / 紫式部
58:有馬山 猪名の笹原 風吹けば いでそよ人を 忘れやはする / 大弐三位
59:やすらはで 寝なましものを さ夜更けて かたぶくまでの 月を見しかな / 赤染衛門
60:大江山 いく野の道の 遠ければ まだふみもみず 天の橋立 / 小式部内侍
61:いにしへの 奈良の都の 八重桜 けふ九重に にほひぬるかな / 伊勢大輔
62:夜をこめて 鳥のそらねは はかるとも よに逢坂の 関はゆるさじ / 清少納言
63:今はただ 思ひ絶えなむ とばかりを 人づてならで 言ふよしもがな / 左京大夫道雅
64:朝ぼらけ 宇治の川霧 たえだえに あらはれわたる 瀬々の網代木 / 権中納言定頼
65:恨みわび ほさぬ袖だに あるものを 恋に朽ちなむ 名こそ惜しけれ / 相模
66:もろともに あはれと思へ 山桜 花よりほかに 知る人もなし / 前大僧正行尊
67:春の夜の 夢ばかりなる 手枕に かひなく立たむ 名こそ惜しけれ / 周防内侍
68:心にも あらでうき世に ながらへば 恋しかるべき 夜半の月かな / 三条院
69:嵐吹く み室の山の もみぢ葉は 竜田の川の 錦なりけり / 能因法師
70:さびしさに 宿を立ち出でて ながむれば いづこも同じ 秋の夕暮れ / 良暹法師
71:夕されば 門田の稲葉 おとづれて 芦のまろやに 秋風ぞ吹く / 大納言経信
72:音に聞く 高師の浜の あだ波は かけじや袖の ぬれもこそすれ / 祐子内親王家紀伊
73:高砂の 尾の上の桜 咲きにけり 外山の霞 立たずもあらなむ / 権中納言匡房
74:憂かりける 人を初瀬の 山おろしよ はげしかれとは 祈らぬものを / 源俊頼朝臣
75:契りおきし させもが露を 命にて あはれ今年の 秋もいぬめり / 藤原基俊
76:わたの原 漕ぎ出でて見れば ひさかたの 雲居にまがふ 沖つ白波 / 法性寺入道前関白太政大臣
77:瀬をはやみ 岩にせかるる 滝川の われても末に あはむとぞ思ふ / 崇徳院
78:淡路島 かよふ千鳥の 鳴く声に いく夜寝覚めぬ 須磨の関守 / 源兼昌
79:秋風に たなびく雲の 絶え間より もれ出づる月の 影のさやけさ / 左京大夫顕輔
80:長からむ 心も知らず 黒髪の 乱れて今朝は 物をこそ思へ / 待賢門院堀河
81:ほととぎす 鳴きつる方を ながむれば ただ有明の 月ぞ残れる / 後徳大寺左大臣
82:思ひわび さても命は あるものを 憂きにたへぬは 涙なりけり / 道因法師
83:世の中よ 道こそなけれ 思ひ入る 山の奥にも 鹿ぞ鳴くなる / 皇太后宮大夫俊成
84:長らへば またこのごろや しのばれむ 憂しと見し世ぞ 今は恋しき / 藤原清輔朝臣
85:夜もすがら 物思ふころは 明けやらで 閨のひまさへ つれなかりけり / 俊恵法師
86:嘆けとて 月やは物を 思はする かこち顔なる わが涙かな / 西行法師
87:村雨の 露もまだひぬ 真木の葉に 霧立ちのぼる 秋の夕暮れ / 寂蓮法師
88:難波江の 芦のかりねの ひとよゆゑ みをつくしてや 恋ひわたるべき / 皇嘉門院別当
89:玉の緒よ 絶えなば絶えね ながらへば 忍ぶることの よわりもぞする / 式子内親王
90:見せばやな 雄島のあまの 袖だにも ぬれにぞぬれし 色はかはらず / 殷富門院大輔
91:きりぎりす 鳴くや霜夜の さむしろに 衣かたしき ひとりかも寝む / 後京極摂政前太政大臣
92:わが袖は 潮干に見えぬ 沖の石の 人こそ知らね かわく間もなし / 二条院讃岐
93:世の中は 常にもがもな 渚こぐ あまの小舟の 綱手かなしも / 鎌倉右大臣
94:み吉野の 山の秋風 さ夜更けて ふるさと寒く 衣うつなり / 参議雅経
95:おほけなく うき世の民に おほふかな わが立つ杣に 墨染の袖 / 前大僧正慈円
96:花さそふ 嵐の庭の 雪ならで ふりゆくものは わが身なりけり / 入道前太政大臣
97:来ぬ人を まつほの浦の 夕なぎに 焼くや藻塩の 身もこがれつつ / 権中納言定家
98:風そよぐ ならの小川の 夕暮れは みそぎぞ夏の しるしなりける / 従二位家隆
99:人も惜し 人も恨めし あぢきなく 世を思ふゆゑに 物思ふ身は / 後鳥羽院
100:ももしきや 古き軒端の しのぶにも なほあまりある 昔なりけり / 順徳院

 

処理概要

  1. 保存した「百人一首」テキストファイルから全件を読み込み、メモリ上に展開します
  2. 「百人一首」番号入力を促します
  3. 「百人一首」から、好きな番号(1~100)を1つを入力します
  4. 入力した番号から、該当する歌人メモリ上から抽出して出力します
  5. 該当する番号歌人を、gTTSライブラリ音声ファイル(mp3)変換保存します
  6. 変換保存した音声ファイル(mp3)を、pygameライブラリmixer.musicモジュールストリーミング再生を行ないます
  7. ストリーミング再生が終了したら、再度、「百人一首」番号入力を促します(2.に戻る)

 

音声ファイル変換+読み上げ処理:ソース例

それでは、テキストファイルを読み込んで、音声ファイル変換+読み上げ処理が出来る

ソースを紹介します。

保存した「百人一首」テキストファイルは、「karuta_kanji_utf-8.txt」としています。


import os
import gc # メモリ処理

from gtts import gTTS
from pygame import mixer
from datetime import datetime as dt
import time

play_mp3 = "./mp3/karuta_voice.mp3"

list_data = []

in_file = "./data/karuta_kanji_utf-8.txt"

def Read_Data():

    # ファイルを読み込み
    with open(in_file, mode='r', encoding='utf-8-sig') as fp:

        for i in fp:
            list_data.append(i)

    print("-----------------------------")
    print("Load Karuta Data Succesfully")
    print("Total Read Data : %s lines" %(len(list_data)))
    print("-----------------------------")

    return

Read_Data()

try:
    while True:
        # input()関数は、数値(整数)のみ
        msg = input("Enter a No = ")

        if  (0 < int(msg)) and (int(msg) < 101):
            
            print(list_data[int(msg) - 1])

            karuta_list = list_data[int(msg) - 1]

            tts = gTTS(karuta_list, lang='ja', slow=False) 

            tts.save(play_mp3)

            mixer.init()

            mixer.music.load(play_mp3)

            mixer.music.play()

            while mixer.music.get_busy():

                time.sleep(10)
 
            mixer.music.stop()

            mixer.quit()

        else:
            print("1~100の範囲で指定して下さい")


except KeyboardInterrupt:
    del list_data

    gc.collect()

 

 

音声ファイル変換+読み上げ処理:実行例

実際に、ソースを起動して、音声ファイル変換+テキストファイル読み上げ処理

実行してみましょう。

作成したソースの上部のタブメニューより、Run → Run Module を選択するか、

F5キーを押下して、ソースを実行します。

 

ソースを起動して、エラーが無ければ、IDLE Shell には、「百人一首」の番号入力を

促すメッセージが表示されますので、実際に入力してみましょう。

今回は、10番目64番目を順番に入力してみます。

 

下記は、実際に10番目の句が IDLE Shell に表示された後、読み上げた歌、歌人になります。

下記は、実際に64番目の句が IDLE Shell に表示された後、読み上げた歌、歌人になります。

まとめ

今回は、Pythonテキストファイルの内容を読み込んだ後、音声ファイル変換して、

読み上げ処理を行う記事を紹介しました。

 

音声ファイル変換して、読み上げ処理を実現するには、下記の2つのライブラリを

インストールする事で、可能となります。

  1. gTTS (Google Translate’s Text-to-Speech):Google翻訳の読み上げライブラリ
  2. pygame:ゲームを開発する為のライブラリで、mixer.musicモジュールを利用して、ストリーミング再生を実現します

 

次回は、Webスクレイピング処理を行った内容を、音声ファイル変換して、

読み上げ処理を行う記事を紹介したいと思います。

 

コメント

タイトルとURLをコピーしました