logo サブスレッド

Skypeのテキストチャットを読み上げる

水曜日担当の秋山です。よろしくお願いします。

Skype、便利ですよね。
よく友達とお話する時に使っています。

Skype はテキストチャットもできるので、マイクが無い人とでも会話を楽しめるのが良いですね。
まさに、マイクを使わず通話にテキストチャットで参加している友人が居て、よくお話していたんですが、地味に困ったことが。

会話を見落としやすい

会話が盛り上がってたりするとテキストチャットの文字を見落としがち。
なるべく見るようにはしてるんですが、たまに見落としてしまったり。

いつの発言が一瞬わからなくなる

先ほどの事とややかぶるんですが、テキストが目に入った時点で発言した、という認識をしてしまう事があって、あれ? となることが。たまに。

というわけで

API か何か使って、テキストチャットの読み上げとか出来ないかなぁ… と、もやもや考えていたんですが、Skype APIは随分前に廃止されましたし。

調べてみたら、Skype のテキストチャットログは SQLite3 で保存されているとのことで。
それならデータベースを読んで、最新のテキストログを拾って、外部ツールにぽいっと渡せばテキストチャットの読み上げが出来るのでは!

あんまりお行儀は良くないかもですが、個人で使う分ですしあんまり気にしないことにしました(・ω・ゞ

Python で書いてみた

テキストチャットログは、main.db に保管されています。
Mac だと、~/Library/Application Support/Skype/<Skypeのアカウント名>/main.db に配置されています。
これを適当なディレクトリ(tmpとか)にコピーして、ごにょごにょっと読み込んでいきます。

取得する際のSQLはこんな感じ。

SELECT Messages.id, Messages.body_xml, Messages.* FROM Messages LEFT JOIN Conversations ON Messages.convo_id = Conversations.id WHERE author <> '<Skypeのアカウント名>' ORDER BY Messages.timestamp__ms DESC LIMIT 10

自分の発言は拾わなくていいので除外。
後は、特定のチャットのみ読み上げるようにしたければ Conversations.identity を指定したり…

そんな感じで、最新の10件を取ってきて…

適当なファイルに、読み上げ済のIDを保管しておいて…

最終的に、取得したテキストを say コマンドにぽいっと投げて。

os.system('say -v Kyoko "{}"'.format(message))

みんなだいすきKyokoさん。

無事読み上げてくれました∩(・ω・)∩ バンザーイ

後は、watch コマンドで定期的に起動するようにすれば、ある程度リアルタイムで読み上げてくれます。

会話中に読み上げさせてみた

折角作ったので友人との会話時、読み上げスクリプトを起動させて使ってみました。

テキストチャットが表示されてから少し後ぐらいに発言するので、ちょっと遅いかなー? という感じはするんですが、目を離している時とかにはすぐ気付けるので良い感じ。

私はイヤホンではなくスピーカーから音を出力する派なので、マイクが読み上げ音声を拾って、はからずも参加している人全員に音声共有している状態に…

因みに、友人には好評でした。今でも活躍中。

普通に喋れば良いんじゃない? というのは禁句で

現在の位置:サブスレッド ホーム > 技術ブログ > Skypeのテキストチャットを読み上げる