2012年2月12日日曜日

チューニング用マイクとArduinoで指パッチンを検出する

明和電機が大好きで、吹奏楽部に所属していたころはよく「吹奏楽コンクールでパチモクを使って怒られたい」とニヤニヤしていたものです。

指パッチンをトリガーに木魚を鳴らす楽器なのですが、社長の著書に「指が曲がったことを検出して木魚を鳴らす」との記載があり、指パッチンじゃねえじゃんとがっかりした記憶があります。

何をトリガーにすればよいのか

音が鳴ってこその指パッチン。ならばその音をマイクで拾えばよいのではないか。マイクの先をArduinoにつないでおけば、木魚も鳴らせるしツイッタに投稿だってできるし最高じゃないですか。ということで、手元にあるマイクを探すと、ちょうどクリップ付きのマイクがうちにあるんですね。

IMG_0935
ほんとうはこうやってつかう

コルグのCM-100L。管楽器のベルなどをつまみ、振動をひろって音に変えるタイプのマイクです。マイクの先は写真のようにチューナーにつないで、音程を調べるのに使うのがふつうです。これで中指をつまめば、とりあえず音は拾えそうです。

マイクから先、Arduinoで音を読むまでの回路は、次のサイトを参考にしました。

なんでも作っちゃう、かも。 / Arduinoで遊ぼう - エレクトレット・コンデンサ・マイクでオーディオレベルメータを作る

記載どおりの回路を組んでも動かない。マイクのほうを調べてみると、うちのマイクは回路に記載のコンデンサマイクではない様子。振動を拾うものはピエゾ型になるそうで、これは振動から電圧を発生させるとのこと。プラスとマイナスがあるから一緒、みたいな単純な考えでやってました。あぶねえ。R1をオープンにしたら正しく動きました。5Vが邪魔して、電位の微妙な振動を殺していたようです。

2012年2月4日土曜日

ラジオ放送局が今かけている曲を"Radikoから"抽出するには

以前の記事が検索エンジン経由でよく読まれているので、その続編を。

Radikoのサイトに表示されている曲情報を使ってしまおう

放送局ごとにそれぞれ対応していたら手間がかかります。ラジコのページに表示されているものを使ってしまえば、ほぼ同じコードで全部の放送局に対応できそうな気がしますよね。

ラジコのトップページ、放送局を選択するとNOW ON AIRとTOPICSの欄が出てきます。これはどちらも、 http://radiko.jp/v2/station/feed_PC/[放送局名].xml に記載されています。放送局名はTBSラジオならTBS、InterFMならINT。その他の放送局の場合は、SafariだとWebインスペクタから確認できます。

このXML内のitem要素のうち、type属性にmusicと指定されているものがオンエア曲情報となります。タイムスタンプや一意に設定されていそうなIDまでそろってて便利そうですね。

Radikoサイト上の実装

ラジコのサイト上では、上記のXMLをXMLHttpRequestを使って5秒おきに呼んでいる様子。少し前の実装では、XMLの呼び出し時にLast-Modifiedヘッダをつけて負荷軽減をはかっていたようですが、いまはそういうKUFUはなさそうです。

おまけ

http://radiko.jp/v2/station/list/JP[数字].xmlで、その都道府県で聞ける放送局の一覧と、各種サイズのロゴURLが書かれたXMLがとれます。北海道は1(01じゃなくて)だったり、東京は13だったり。ラジコのサービスがない県も、枠だけは出てきます。