本の虫

著者:江添亮
ブログ: http://cpplover.blogspot.jp/
メール: boostcpp@gmail.com
Twitter: https://twitter.com/EzoeRyou
GitHub: https://github.com/EzoeRyou

アマゾンの江添のほしい物リストを著者に送るとブログ記事のネタになる

筆者にブログのネタになる品物を直接送りたい場合、住所をメールで質問してください。

普通のコンピューターから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