Otsuhachi’s diary

プログラミングのことや覚書などその他いろいろ

当ブログの内容を使用したり参考にした場合に生じた問題の責任は負いかねます。

Pythonで文字列をモールス信号に変換する -定義編-

今回はタイトル通り文字列をモールス信号に変換するライブラリを作ってみる(定義編)。
実装編についてはこちら

Windows限定で、他OS用の差し替えについては実装編の最後の方で少し触れる程度になる予定。

また自作ライブラリotsuvalidatorを使用するので(宣伝!)インストールが必要。
それ以外の非標準ライブラリは不使用。

仕様を決める

変換可能な文字列

対応するのは半角英数字と.,?_+-×^/@()"'=それから半角空白。
また、半角英字はすべて大文字に変換して扱う。
連続する空白は1つとして扱う。

和音対応を考えると重複するパターンが出てしまうので無し。

出力

文字列として出力した際には元のテキスト1を表示することにする。
またmorse_codeという属性でモールス表現を取得できるようにする。

インスタンス生成

引数として使用するのは以下の通り。

名前 概要
text str モールスとして扱いたい文字列
short str モールス信号の短点1として扱いたい文字
long str モールス信号の長点1として扱いたい文字
sep str モールス信号の文字間1に使用したい文字
frequency int 再生時に使用する周波数3732767の間
minimum_length int 再生時の1音の長さ(ミリ秒)

以上の内、必須なのはtextのみ。

short, long, sep1文字でそれぞれ異なる必要がある。

minimum_lengthは再生時の基準となる長さ。

機能

関数 概要 備考
play モールス信号を再生する
parse_morse モールス表現からMorseCodeインスタンスを生成する クラスメソッド
__add__ MorseCodeインスタンスまたはstr型+xでエラーが発生しないオブジェクトxからMorseCodeインスタンスを生成する
本文以外の__init__用引数はselfから引き継ぐ
足し算用のマジックメソッド

play

モールス信号を再生する。

引数は以下の通り。

名前 概要
repeat int 本文の繰り返し回数
BT bool 本文再生前に送信開始の合図BTを再生するかどうか
AR bool 本文再生後に送信終了の合図ARを再生するかどうか

必須引数は無し。

parse_morse

モールス表現を基にモールス信号インスタンスを生成する。

引数は以下の通り。

名前 概要
code str モールス表現の文字列
short, long, sepと半角空白以外の文字を含んではならない
short str モールス信号の短点[^2]として扱いたい文字
long str モールス信号の長点[^3]として扱いたい文字
sep str モールス信号の文字間[^4]に使用したい文字
frequency int 再生時に使用する周波数3732767の間
minimum_length int 再生時の1音の長さ(ミリ秒)

必須引数はcodeのみ。

注意点として、X×が同じモールス表現になるため1×2=2となるようなモールス表現を与えた場合1X2=2として解釈されてしまう。

__add__

MorseCodeインスタンス + objectという式を実行するためのマジックメソッド。
MorseCodeインスタンス += objectは非対応なので注意。

objectMorseCodeインスタンスstr + objectがエラーにならないものであればOK。

selfからtext以外のインスタンス生成で受け取る引数を受け継いで、新しいtextを持つMorseCodeインスタンスを生成する。


  1. ただし、text.upper()されている

  2. .-., トン ツートン

  3. .--, トン ツーツー

  4. text='sos', sep='!'の場合...!---!...となる