JavaScriptTweetSoftModemインターフェースボードを購入したので、遊んでみました。スイッチサイエンスさんでほぼ完成状態で販売されています(ピンヘッダ付けるだけ)。スイッチサイエンスSoftModemインターフェースボードが使っている通信方式(FSK)は作者のarmsさんのブログで説明されています。なんでも作っちゃう、かも。なんでも作っちゃう、かも。Low(0)は4900Hzのsin波を送る。これを1225baudで切り替える。1文字(8bit)の前後にスタートビット(0)、ストップビット(1)を付けて、10bitで送る。一連の文字列の送信の前に、40msのHighをプリアンプルとして送る。(1225baudだと49bit分)一連の文字列の送信後には、5msのHighをプリアンプルとして送る。(1225baudだと6.125bit分)という感じらしいと分かったので、自分でも実装してみたくなって作ってみました*1。Cでも何でも良いんですが、JavaScriptから音が鳴らせたらBookmarklet等と組み合わせて面白いことができないかなーなどと妄想したので、JavaScriptで。本当はiPhone等のブラウザで動かしたかったのですが、後述の方法はMac/PCのブラウザでは動くものの、iPhoneのSafariでは動作しないことが後で判明。あと受信はできません...。作ったコードはgithubにアップしてあります。Play"ボタンを押すと音が鳴ります。これをSoftModemインターフェースボードに3.5mmステレオ4極ケーブルで繋いで流せば、文字列を送信できます。Jumpを押すと、生成したサウンドを直接ブラウザで開きます。ここでSaveすれば生成した.wavファイルとして保存できるはずです。Schemeを使った方法があります。URIを利用すると、画像などのバイナリをJavaScriptで生成することができます。今回の場合は、WAV形式のサウンドデータを生成します。WAVのフォーマットの情報としては下記が参考になります。http://www.kk.iij4u.or.jp/~kondo/wave/詳しくはスクリプトを見て頂くとして、まずは8bit/mono、リニアオーディオ形式のヘッダを作ります。サンプリング周波数は生成するバイナリのサイズを小さくするため上記High/Lowがぎりぎり表現できる29400Hzを選びましたが、44100Hzでも大して変わらなかったかも。あとは、指定されたテキストをASCIIコードを表現するFSK変調したsin波を8bitのバイナリ(つまり0〜255)で表現していきます。テキストとしてnon-ASCIIな文字が指定された場合は、UTF-8エンコードしています。URIのできあがりです。Audio(dataURI);audio.play();で再生できます。生成した波形をwavとして保存してspwaveで開いてみたところ。2種類の周波数があるのが分かります。いえば、iPhoneアプリの「音響電文」とも通信できるみたいです(通信といっても一方向だけですが)。JavaScriptだけじゃ録音できない(多分)から受信は難しいだろうなあ。*1:実際にはSoftModemインターフェースボードが届く前に書いたのですが、一発で動いてしまって自分でびっくり。FSKって簡単ですね〜。23:09SoftModemインターフェースボードとJavaScriptで通信Tweet広告を非表示にする関連記事2010-04-13twicliのOAuth対応4/11にOAuth認証に対応したtwicliを公開しました。月別アーカイブはてなブログをはじめよう!NeoCatさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。