#はじめに
モールス符号に関するPythonを検索しても、日本語対応のものはあまりなかったため、日本語対応のものを作成しようと考えた。
日本語の辞書作成部分については、別途執筆する予定である。ソースコードはGitHubに載せてある。
また、音を実際に出しているものもなかったため、音も出してみた。周波数や間隔などはお好みで調整してほしい。
#基本方針
モールス符号の辞書に従い、符号化する。
日本語に対応するために、濁点の分離やひらがなをカタカナに統一する(日本語の辞書はカタカナで作成したため)機構を用意した。
#コード抜粋
def morse_encode(msg, morse_dict) -> list:
encoded_lst = []
for i in msg.upper():
if i in morse_dict:
encoded_lst.append(morse_dict.get(i))
else:
encoded_lst.append('[ERROR]')
print('ERROR: ', i, 'is not in the dictionary.')
return ' '.join(encoded_lst)
def morse_decode(msg, morse_dict) -> str:
decoded_msg = ''
reverse_morse_dict = dict((v,k) for (k,v) in morse_dict.items())
for i in msg.split(' '):
if i in reverse_morse_dict:
decoded_msg += reverse_morse_dict.get(i)
else:
decoded_msg += '[ERROR]'
print('ERROR: ', i, 'is not in the dictionary.')
return decoded_msg
def dakuten_separator(msg):
bytes_text = unicodedata.normalize('NFD', msg).encode()
bytes_text = re.sub(b'\xe3\x82\x99', b"\xe3\x82\x9b", bytes_text)
bytes_text = re.sub(b"\xe3\x82\x9a", b'\xe3\x82\x9c', bytes_text)
return bytes_text.decode()
def morse_sound(morse):
for i in morse:
if i == '-':
Beep(300, 75*3)
elif i == '.':
Beep(300, 75)
else:
sleep(0.075)