2021年4月に公開した日替わり通信術のWebアプリ。特にアクセス解析などはしておらず問合せやレスポンスもあまりないのでどの程度使っていただいているかはわからない。この9月期の一総通の試験で「アプリを使って練習して合格しました」という報告をお待ちしています。
初期の頃から使っていただいているローカルさんから、(書き取りの)途中で電話などがかかってきたとき、一時停止機能があると助かる、というご要望を頂いていた。確かに一度始めてしまうと標準速度で5分間は手が離せないし、忙しいお仕事の方だと一時停止機能は欲しいかもしれない。
Web Audio APIで提供されているSuspend/Resume機能で一時停止自体は実装できると思うんだけど、全文を流して終了したときの判定をsetTimeout関数で行っていて、考えなしにSuspendさせると、終了時間がズレてしまう。
setTimeoutのタイマーを一時停止と同時に破棄して、再開と同時に新しいsetTimeoutで終了までのタイマーをセットする。と、考え方は簡単なんだけど、作り始めてみるとなかなかうまく動かない。まあプログラムなんてそんなもの。特にこのWebアプリは開発初期からのつぎはぎだらけのコードで、リファクタリングしようしようと思いつつ、「動いているからまあいいか」とそのままになっているもので、こっちを直すと別のところが変になる、という感じ。
これは重い腰を上げてリファクタリングするか、ということで、jscwlibというそのものズバリ、モールス符号を鳴らす便利なライブラリを使って丸ごと作り直すことを検討。このライブラリは日替わり通信術の開発を始めた後でTwitterで教えてもらったもので、和文にも対応しているし非常に便利。カナの本文さえ用意すれば、play関数に放り込むだけで再生してくれるし、もちろん一時停止とか、周波数などの設定もグラフィカルにできるし、音源のダウンロードまで可能。
ただ、自分の本文生成のスクリプトはこのライブラリを前提として作っていなかったので、こちらにも手を入れる必要があって、それなりに大変そう。そして、jscwlibのソースを眺めていたら、一時停止のコードもあって、自分のoscillatorの実装もそんなに違わなかったので、これを真似してなんとか元のコードの改良で動作するようになった。
ということで一時停止機能はなんとかリリースできた。あと需要がありそうなのはシークバーとか音源ダウンロードあたりだろうか。シークバーは一時停止の機能の応用で頑張ればできるかもしれない。音源ダウンロードはjscwlibでできているので技術的には可能だと思うんだけど、どうやったらいいか見当もつかない状況。
機能アップもリファクタリングも気になってはいるけれど、本質的には開発当初の思想、つまり「アプリを開いたら即一総通の受信練習ができる」は維持していきたい。
【リンク】Webアプリ 日替わり通信術