はじめに
アラームの代わりに指定時刻に言葉を喋るようにしました。
指定時刻が現在時刻を過ぎている場合は、翌日の指定時刻に喋ります。
使用方法
■単独で使用する方法
python3 /home/XXXXXX/test.py 17時0分犬の散歩の時間です
指定された時刻に言葉を喋るプログラム(test.py)
import subprocess
import argparse
import time
import re
from datetime import datetime, timedelta
def extract_time_from_string(text):
# 文字列から時刻を抽出するための正規表現
time_pattern = re.compile(r'(\d{1,2})時(\d{1,2})分')
match = time_pattern.search(text)
if match:
# マッチした時刻を取得
hour, minute = map(int, match.groups())
print(hour, minute);
return datetime(datetime.now().year, datetime.now().month, datetime.now().day, hour, minute)
else:
# マッチしない場合は現在時刻を返す
return datetime.now()
def speak_at_time(text):
# 文字列から抽出した時刻を取得
start_time = extract_time_from_string(text)
current_time = datetime.now()
time_to_wait = start_time - current_time
if time_to_wait.total_seconds() < 0:
# 待機時間が負の場合、翌日の同じ時刻まで待機する
wait_time = timedelta(days=1) + time_to_wait
else:
wait_time = time_to_wait
# 待機
time.sleep(wait_time.total_seconds())
# 文字列を喋る
cmd = "/home/XXXXXX/speak.sh " + text;
subprocess.run(cmd, shell=True)
subprocess.run("sleep 5", shell=True)
subprocess.run(cmd, shell=True)
if __name__ == "__main__":
# 起動オプションの文字列(時刻を含む)
parser = argparse.ArgumentParser()
parser.add_argument("param")
args = parser.parse_args()
text = args.param
# 文字列を喋る
speak_at_time(text)
speeak.shについて
下記の記事を参考にしてください
[音声合成の3つの方法]
(https://qiita.com/kobbeko/items/51daa9e7e6e6aadb1cf5)