普通のコンピューターからAMラジオを鳴らそう
読者の持っている至って普通のコンピューターは、実はAMラジオを鳴らす発信装置が備わっている。
ラジオを鳴らすコードは以下にある。
https://github.com/fulldecent/system-bus-radio
ただしこれはMac OS Xでしか動かないので、C++11に移植したコードが以下になる。また、このコードはスレッドを回して消費電力を上げることにより、オリジナルより出力も上げてある。
https://github.com/EzoeRyou/system-bus-radio
動かし方(GCCの場合)
git clone git@github.com:EzoeRyou/system-bus-radio.git
cd system-bus-radio
make gmain
make grun
Clangの場合、以下のようにする。
make cmain
make crun
そして、AMラジオを近づけて、周波数をいろいろと変更してみよう。なんと、メリーさんの羊が聞こえるではないか。原作者の環境では1580kHz、筆者の環境では1440kHzが最も聞き取りやすかったが、コンピューターによって最適な周波数は変わる。
一体どうしてAMラジオがなるのか。CPUが命令を実行するとき、コンピューターからは電磁波が発生する。電磁波はラジオで観測できる。つまり、別のタイミングで命令を実行してやれば、ラジオに乗るノイズも別になる。適切な周波数で命令を実行すれば、ラジオに乗るノイズも音階を持ったものにできるのだ。
もともとはTEMPESTガイドラインという、アメリカ合衆国のNSAと国防省の勧告によるもので、サイドチャネル攻撃の危険性を周知しているものである。
オリジナルはMac OS X専用の高精度タイマーを使っていて、かつ、SSE命令を使っていた。C++11に移植するために、高精度タイマーには<chrono>, <thread>を使った。SSE命令の代わりに、<atomic>を使った。また、以下のPull Requestと同等のコードを書いて、スレッドで実行することにより、出力を上げた。
boost sound without radio by andryblack · Pull Request #5 · fulldecent/system-bus-radio
ドワンゴ広告
今日はこればかりやっていて、あまり仕事をしていない。これからする。
ドワンゴは本物のC++プログラマーを募集しています。
CC BY-ND 4.0: Creative Commons — Attribution-NoDerivatives 4.0 International — CC BY-ND 4.0