2022年3月18日金曜日

PythonでWindowsの音声合成を使って、IPメッセージ届いたらテキストの読み上げ

PythonでWindowsの音声合成を使って、
IPメッセージ届いたらテキストの読み上げ

# PythonでWindowsの音声合成を使う
#   pywin32ライブラリのインストールが必要
#       インストール方法)pip install pywin32

#20220608 音声の指定を追加
## デフォルト利用可能な音声を取得します。
# Microsoft Ayumi - Japanese (Japan) 0 女性 
# Microsoft Haruka - Japanese (Japan) 1 女性
# Microsoft Ichiro - Japanese (Japan) 2 男性
# Microsoft Sayaka - Japanese (Japan) 3 女性

import os
import random
import win32com.client as wincl

spt=["むかし、むかし、ある所に正直者ですが、運の悪い男が住んでいました。","悪い時が過ぎれば、よい時は必ず来る。","人事を尽くして天命を待つ","自分の居場所を自分でつくるんだ(スティーブ・ジョブズ)"]

voice = wincl.Dispatch("SAPI.SpVoice")
cat  = wincl.Dispatch("SAPI.SpObjectTokenCategory")
cat.SetID(r"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices", False)
v = [t for t in cat.EnumerateTokens()]
voice.Voice=v[3]
print(voice.Speak(random.choice(spt)))


while True:
    ol=3
    v = [t for t in cat.EnumerateTokens()]
    voice.Voice=v[ol]
    print('lock')
    os.system('ipcmd recv /msgfile=t.txt')
    print('unlock')
    f = open('t.txt','r',encoding='utf-8')
    f.readline()
    s=f.readline()

    if 'BG_rma' in s:
        u= "RMAコーナーからのメッセージです"
        ol=0
        
    elif 'BG_tonogai' in s:
        u= "とのがいさんからのメッセージです"
        ol=2
        
    elif 'BG_gido' in s:
        u= "儀同さんからのメッセージです"
        ol=1

    elif 'BG_sun' in s:
        u= "そんさんからのメッセージです"
        ol=2
        
    elif 'BG_takazawa' in s:
        u= "髙澤さんからのメッセージです"
        ol=1
        
    elif 'mvk_tsuchida' in s:
        u= "土田さんからのメッセージです"
        ol=2
        
    elif 'aut_toyota' in s:
        u= "豊田さんからのメッセージです"
        ol=3

    elif 'BG_fujiwara' in s:
        u= "藤原さんからのメッセージです"
        ol=2
        
    else:
        u= "匿名さんからのメッセージです"
        ol=1
        
    print(s)
    print(u)
    voice.Speak(u)
    voice.Voice=v[ol]
    u=''

    while True:
        l = list(f.readline())
        if l[0] == '-' and l[1] == '-' and l[2] == '-':
            break

    while True:
        v=f.readline()
        if v:
            l=list(v)
            if l[0] !='>':
                print(v)
                voice.Speak(v)

        else:
            f.close()
            break

print('Error Exit')
os.system('pause')


メッセージの例

=====================================

 From: BG_takazawa (japan/A2/192.168.163.97/aa-<3878xxxx>)

  at Thu Mar 17 13:28:46 2022 (RSA2/認証+)(封)

-------------------------------------

テスト

0 件のコメント:

コメントを投稿