« E52 [software update recommended]が、少しうるさい | トップページ | おおたかどや山の標準電波が再開された »

2011年5月13日 (金)

Python [PyTalkTime] の調査と改造

2011-05-13(金)曇り、晴れ/暑いくらい

 携帯電話で時報代わりに時間を読み上げるためのスクリプト「PyTalkTime(注1)」ですが、不具合の調査を行いました。

  注1:詳細は「Python スクリプト 雑記」の「1.4 時刻読み上げ PyTalkTime」です。

 PyTalkTimeは、登録した時間にPyTaskServerで起動されるようにして、その時の時刻を読み上げます。読み上げる音声ファイルは、PyTalkTimeの設定ファイル「PyTalkTime.dat」で、時刻とその時刻に使用したい音声ファイルを列記しておきます。

 さて、気になっていたのは下記の2点です。
(1)オクロックと言うべき時にサーティと言っているように聞こえ、サーティと言うべき
  時にオクロックと言っているように聞こえる。
  (例:ナイン、サーティ のはずなのに、ナイン、オクロックと聞こえる)
(2)時刻を読み上げずに、読み上げるための設定が見つからなかったときに出す
  ことにした音が出ることがある。

の2点でした。
 (1)については、以前、スクリプト内にトレースを入れて調べたのですが、使用されている音声ファイルは間違っていないので、聞き間違いであろうと言うことにしていました。今回、更に音声ファイルを、発音に特徴有るものを使用してみたところ、現象が出なかったので、やはり聞き間違いであったと言うことに決定しました。

(2)は、余り現象は出ていなかったのですが、最近増えてきたので気になって調べました。PyTalkTime最新版にトレースを入れて、内部の動きを調べたところ原因が分かりました。
 原因は、スクリプト、Python、ハードウエアのクロック、タイマなどの誤差に寄るものでした。

Pyttimelog1

 上はPyTalkTimeのトレースです。7時(07:00)に起動されて時刻を読み上げるはずが、6時59分(06:59)に動いています(stimeは携帯電話内のハードクロックを読んで記録した値です)。6時59分のデータは設定ファイルに登録してありませんから、時刻読み上げは行われないはずです。

Pytserverlog1

 で、PyTalkTimeを起動するPyTaskServerのログを見たら、、、6時59分59秒に起動を行っています。即ち、(期待する時刻より)ほんのわずかな時間、早く起動しているわけです。

 これは、PyTaskServerの動き方に関係があります。PyTaskServerは、登録された次の動作までは「今から何時間何分何秒後である」という時間数値をタイマにセットしてスリープします。セットした時間が経過するとスリープから起こされて、アプリの起動を行うわけです。この、時間の計算とタイマへのセットのとき、タイマの桁数によってきまる誤差などが発生します。従って、スリープから起こされたときは、本来期待する時刻より、ごくわずか早いこともある(遅いこともある)わけです。7時00分00秒0001... なら問題ありませんが、6時59分59秒9999... ではまずいわけです。

 対策は、ハードクロックから読んだ時刻(エポック秒)に2~3秒加算してから使用することにしました。6時59分59秒なら7時00分02秒にするわけです。読み上げデータの検索は時・分までしか使いませんし、起動される時刻を遅らせるわけではないから、これで問題ないわけです。

 ということで、上記改造のほか、トレースも今後も使えるように、きちんと入れる改造を実施しています。なにはともあれ、原因が分かってホッとしました。

 時刻読み上げについては、TimeToolというアプリを買うという解もありますが、なるべく自前で何とかすることを目標にしています(PyTaskServerはHiisiさんのアプリですが、、)。

 

|

« E52 [software update recommended]が、少しうるさい | トップページ | おおたかどや山の標準電波が再開された »

Python」カテゴリの記事

アプリケーション」カテゴリの記事

携帯電話」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/513620/51658331

この記事へのトラックバック一覧です: Python [PyTalkTime] の調査と改造:

« E52 [software update recommended]が、少しうるさい | トップページ | おおたかどや山の標準電波が再開された »