– — .-. … .

しょーもないネタであることを覚悟したまえよ。

あんまし評判よくはなさそうなんだけれど、今季アニメの「裏世界ピクニック」が結構お気に召している。シリアスなようでいて軽妙なノリがそもそも好みなんだけれど、花守ゆみりに驚いているてのもある。「各務原なでしこ」で認知した声優なのでね。それと、やや百合っぽいんだけれど、前季の「安達としまむら」とか最近ちょっと残念なタイプの百合ものが目立ってたので、それらと比較しても良い、てのも。なんにせよ、世間的評判が低い理由がワタシにはあんましよくわかんない。おもしろい、と思うんだけどなぁ。

んで。本日時点での最新話。銃声を使ってモールス信号を送る、てことをやってた。

アニメとかドラマ内でモールス信号を使うネタってのはかなり多く、なので、それをみるたびに思っていたことではあるんだけれど、「これをパソコンで表現するのって簡単だよな」と。ずっと思ってたけどやってこなかったんで、まぁやってみっか、と。

当然話としては、出力と入力、つまり「メッセージを音に変換」するのとその逆に、解読「音からメッセージに変換」するのの両方あるんだけど、とりあえずは出力の方だけ。てきとーに「pip install」したら、やっぱりあった。「morse.py」が。ただし、インストールされたものを確認すると、まぁまぁがっかりすることだろう、だってこれだけだもん:

pip install morse にてインストールされる、これが全て。
 1 def string_to_morse(s):
 2     """Return a list of the patterns to use for s.
 3 
 4     >>> print string_to_morse('durin42')
 5     ['-..', '..-', '.-.', '..', '-.', '....-', '..---']
 6     """
 7     return [lookup[c.upper()] for c in s]
 8 
 9 
10 lookup = {'!': '-.-.--',
11           "'": '.----.',
12           '"': '.-..-.',
13           '$': '...-..-',
14           '&': '.-...',
15           '(': '-.--.',
16           ')': '-.--.-',
17           '+': '.-.-.',
18           ',': '--..--',
19           '-': '-....-',
20           '.': '.-.-.-',
21           '/': '-..-.',
22           '0': '-----',
23           '1': '.----',
24           '2': '..---',
25           '3': '...--',
26           '4': '....-',
27           '5': '.....',
28           '6': '-....',
29           '7': '--...',
30           '8': '---..',
31           '9': '----.',
32           ':': '---...',
33           ';': '-.-.-.',
34           '=': '-...-',
35           '?': '..--..',
36           '@': '.--.-.',
37           'A': '.-',
38           'B': '-...',
39           'C': '-.-.',
40           'D': '-..',
41           'E': '.',
42           'F': '..-.',
43           'G': '--.',
44           'H': '....',
45           'I': '..',
46           'J': '.---',
47           'K': '-.-',
48           'L': '.-..',
49           'M': '--',
50           'N': '-.',
51           'O': '---',
52           'P': '.--.',
53           'Q': '--.-',
54           'R': '.-.',
55           'S': '...',
56           'T': '-',
57           'U': '..-',
58           'V': '...-',
59           'W': '.--',
60           'X': '-..-',
61           'Y': '-.--',
62           'Z': '--..',
63           '_': '..--.-',
64           }

真剣に探せばもっといいものはあると思う。それこそ numpy/scipy に関係する派生プロジェクトの中に含まれててもおかしくなさげだしね。ただ、今のワタシは「これだけあればすぐに出来ること」がわかっているので、ひとまずは満足。

んで、play_morse.py を書いた。所要時間30分以内と思う。

元の「銃声で表現」からもわかる通り、遊びとしては色々派生出来るわけよね。たとえばテレビで良くやられるタイプの遊びとしては、いろんな自然音、特に動物の鳴き声を使う、とかね。そういうのも技術的なところで結構おもしろいネタかもしらんね。


15:45追記:
動物の声で、はともかくとして、ffmpeg 非依存の手段がないかいね、と探ってた。特に「単純なビープで表現」なら出来ろう、と。

ANSI console のベルを使う手段としてこんなのがあるのを発見したが、これは特定の linux での話らしい。ちうか「vt100」として検索してのこれは期待はずれの情報よね、可搬性がない。

まぁワタシは Windows ユーザなわけで、なのであれば、当然 win32 API か .NET てことになろう、てことで、情報源としてはいつものように stackoverflow のお世話になれる。一番正解に近いのは、今日時点であれば powershell から Beep するこれかね:

1 [me@host: ~]$ # Beep(freq, duration)
2 [me@host: ~]$ powershell "[console]::beep(220,300) ; [console]::beep(220,300) ; [console]::beep(220,300)"

play_morse.pyでやったのと同じ要領で出来るということになるけれど、空白時の無音時間の制御のために、もう一つ必要だね。sleep とかってあったっけか。

まぁワタシはこのアプローチについて完遂しようとは思わないけど、やりたい人は「出来るよ」てことで。