CW練習機を作った話

※2022/02/07: ホスト環境の移動にともなって行ったURL変更を反映しました。

Why

CWの練習のためにはCW Freakを使用することがスタンダードになっているようです。 CW FreakWindows PC上でしか動作しません。 しかし、CWをやるためだけにPCを開くのは非常に面倒くさい。 そこでブラウザ上で似たようなことができればスマートフォンでもPCでも使えるようになると考えJavascritp, HTMLで開発を始めました。

どうやって

2015年くらいに出てきたらしいWeb Audio APIを使ってSin波を再生しモールス符号を再現します。

WebAudioAPIとは

AudioContextを作成します。 Oscillator(発振器)、Source(音源)を一つ以上作成または、読み込みをします。 上で作った音を様々なフィルターに繋げ、加工します。 AudioContextのDestinationに様々な音を繋げ、合成、再生をします。 基本的にはこのような流れをたどって音を再生するものと認識しています。

このWebAudioAPIを使用することで今までAudioタグで行っていた限られた音の再生、編集をより自由にできるようになります。

できたもの

CW RUNNER FOR WEB

上のGitHub pageができたものです。Playボタンをクリックすることで符号を再生、中心付近のボックスに聞き取った符号を入力します。最後にAnswerボタンをクリックすると答え合わせができます。再生する符号は下のラジオボタンで選択できます。Basicは一文字、Japanは日本のコールサイン、Dxを選択すれば海外の局のコールサインの聞き取り練習ができます。

中身

再生部分

再生する文字列を受け取り、再生終了までの時間を返り値として返す関数が中心となります。

内部では受取った文字列を一文字ごとに配列に入れ、それを順番に再生していきます。

WebAudioAPIを使用してsin波で基本的には直線的に音量を変化させて

長点と短点を作ります。 再生時間を返り値として返しているので、その時間まで再生開始、答え合わせボタンを無効化しています。 これによって、モールス信号を聞いてる最中に二重で再生されるのを防いでいます。

操作方法

playボタンをクリックするか、エンターキーで再生が開始されます。 聞き取ったモールス信号を、画面のボタンで入力するかキーボードから入力してください。 その後、answerボタンかエンターキーで答え合わせができます。 エンターキーで答え合わせした場合は、次の再生も同時に始まります。 答えは下のテキストボックスに記録されていきます。 また、画面のアルファベット、数字が書かれたボタン群の下のラジオボタンでいくつかのオプションを設定できます。 Deをコールサインの頭につける、間違えた符号を聞き取れるまで繰り返すとうができるようになります。

今後

無線部の部員からのフィードバックを参考に機能を追加していった。 ノイズを追加する、周波数をランダムにするなどを実装予定