3
0

アラームの代わりに指定時刻に言葉を喋る

Last updated at Posted at 2023-11-25

はじめに

アラームの代わりに指定時刻に言葉を喋るようにしました。
指定時刻が現在時刻を過ぎている場合は、翌日の指定時刻に喋ります。

使用方法

■単独で使用する方法
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)

3
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0