2021/08/25
モールス信号の練習ツールを作成しました
概要
ドローンの開発を少しずつ進めているのですが、ドローンで使う通信に無線を多用するので、アマチュア無線の資格を取ることにしました。
資格にモールス信号の理解が必要なため、その学習も兼ねて練習ツールを作成することにしました。
Javascriptを使って、モールス信号を打つと、文字に変換して表示できるものを作ってみました。
できたものはこちらになります。
今回はその開発内容のメモになります。
Beep音の発生
const ctx = new (window.AudioContext || window.webkitAudioContext)()
const osc = ctx.createOscillator()
osc.type = 'square'
osc.connect(ctx.destination)
// 音の発生
osc.start()
// 音の停止
osc.stop()
注意点
- モバイルではマナーモードになっていると音が出ませんでした。
モールス信号のデコード
- 欧文と和文をサポートできるようにしました。
以下のような感じになりました。
const dictionaryEn = {
A: '・-',
B: '-・・・',
C: '-・-・',
D: '-・・',
E: '・',
F: '・・-・',
G: '--・',
H: '・・・・',
I: '・・',
J: '・---',
K: '-・-',
L: '・-・・',
M: '--',
N: '-・',
O: '---',
P: '・--・',
Q: '--・-',
R: '・-・',
S: '・・・',
T: '-',
U: '・・-',
V: '・・・-',
W: '・--',
X: '-・・-',
Y: '-・--',
Z: '--・・',
1: '・----',
2: '・・---',
3: '・・・--',
4: '・・・・-',
5: '・・・・・',
6: '-・・・・',
7: '--・・・',
8: '---・・',
9: '----・',
0: '-----',
'.': '・-・-・-',
',': '--・・--',
':': '---・・・',
'?': '・・--・・',
_: '・・--・-',
'+': '・-・-・',
'-': '-・・・・-',
'*': '-・・-',
'^': '・・・・・・',
'/': '-・・-・',
'@': '・--・-・',
'(': '-・--・',
')': '-・--・-',
'"': '・-・・-・',
"'": '・----・',
'=': '-・・・-',
delete: '・・・・・・・・',
}
const dictionaryJa = {
イ: '・-',
ロ: '・-・-',
ハ: '-・・・',
ニ: '-・-・',
ホ: '-・・',
ヘ: '・',
ト: '・・-・・',
チ: '・・-・',
リ: '--・',
ヌ: '・・・・',
ル: '-・--・',
ヲ: '・---',
ワ: '-・-',
カ: '・-・・',
ヨ: '--',
タ: '-・',
レ: '---',
ソ: '---・',
ツ: '・--・',
ネ: '--・-',
ナ: '・-・',
ラ: '・・・',
ム: '-',
ウ: '・・-',
ヰ: '・-・・-',
ノ: '・・--',
オ: '・-・・・',
ク: '・・・-',
ヤ: '・--',
マ: '-・・-',
ケ: '-・--',
フ: '--・・',
コ: '----',
エ: '-・---',
テ: '・-・--',
ア: '--・--',
サ: '-・-・-',
キ: '-・-・・',
ユ: '-・・--',
メ: '-・・・-',
ミ: '・・-・-',
シ: '--・-・',
ヱ: '・--・・',
ヒ: '--・・-',
モ: '-・・-・',
セ: '・---・',
ス: '---・-',
ン: '・-・-・',
'゛': '・・',
'゜': '・・--・',
ー: '・--・-',
'、': '・-・-・-',
'」': '・-・-・・',
'(': '-・--・-',
')': '・-・・-・',
delete: '・・・-・',
}
const dictionary = {
en: dictionaryEn,
ja: dictionaryJa,
}
class Morse {
constructor(lang) {
this._lang = lang
}
get lang() {
return this._lang
}
set lang(lang) {
this._lang = lang
}
get dictionary() {
return dictionary[this.lang]
}
decode(sequence) {
const dict = this.dictionary
for (const [key, value] of Object.entries(dict)) {
if (value === sequence) {
return key
}
}
return undefined
}
}
const morse = new Morse('en')
const sequence = '・-'
const char = morse.decode(sequence)
console.log(char)
// A
上記を組み合わせてツールを開発しました。
以上です。
関連する記事
【1行】JavascriptでCookieの全削除
たまにやるCookie全削除のJavascriptです
Nuxt2からNuxt3への移行とNextJSとNuxt3の比較について
弊社ホームページとブログサイトをNuxt2からNuxt3ベースに移行しました。
[NextJs]Google Mapでマーカーをセンターに表示するコンポーネントの作成
NextJsアプリ内で、Google Mapを表示して、中心にマーカーを配置するコンポーネントを作成しました。
[Next.js]client側のみで読み込むcomponent(SSRのエラーを回避)
組織図を描画するreactライブラリ`react-organizational-chart`をサーバー側で呼び込む際にエラーになる方法に対処しました