jscwlibで遊ぶ (1) onFinishedイベントハンドラが追加された

jscwlibはLCWO (Learn CW Online) の開発者であるFabian Kurz (DJ1YFK) さんが開発されている、ブラウザ上でモールス符号を再生するライブラリです。

fkurz.net

拙作の「モールス練習帳」等のモールス受信練習ウェブアプリでは自前でモールス符号を変換、再生していますが、「DitDah Looper」と「モールス練習帳(百人一首)」にはこのライブラリを利用しています。自分のウェブサイトで手軽にモールス符号を再生できるとても便利なライブラリです。

このライブラリには再生が終了したときのイベントハンドラがありませんでしたが、新しいバージョンではonFinishedイベントハンドラが追加されています。

onFinished
    A user defined function that will be invoked each time the player stopped playing. E.g.:

    m.onFinished = function () { alert("Player stopped"); }

「DitDah Looper」と「モールス練習帳(百人一首)」は繰り返し再生する必要があったので、再生終了を検知する仕組みを自前で実装していました。

はじめはWeb Audio APIのOscillatorNodeにあるonendイベントハンドラを使えるのではと思ったのですが、ライブラリのソースには手を入れたくなかったので、次のような感じでjscwlibをラップして、再生処理を非同期にして再生終了を検知していました。

import { timer } from 'rxjs';

class MorseOscillator {
  constructor(params) {
    this.osc = new jscw(params);
  }

  play(text) {
    return new Promise((resolve, reject) => {
      this.osc.play(text);
      this.timer = timer(this.osc.getRemaining() * 1000)
            .subscribe(() => resolve());
    });
  },

  ...

onFinishedが追加されたので、実装をシンプルにできそうです。

ちなみにこのライブラリは和文にも対応しています。JE1TRVさんによる貢献です。

ditdah.jp ditdah.jp ditdah.jp ditdah.jp