Archive for 2011年6月

“Android App Development and Design: Learn by Video”

サワムラです。
iPhoneやAndroidの開発を学ぶにはビデオがおすすめです。ツールの使い方が肝なので本で追うよりも分かりやすいです。

今日見つけたのは”Android App Development and Design: Learn by Video”というビデオチュートリアルで、Androdiのビューまわりのテクニック(densityに合わせた画像の処理、9-Patch、フォントの埋め込み等)をわかりやすく解説してました。

Preview

Oreilly Safariで$42.99/monthです。本を月に一冊買うと思えばまぁまぁかと。

音 + Twitter Client

こんにちは、imotoです。

 

6月14日に、アサレンの中間発表がありました。

 

内容は、2ヶ月間のプログラム特訓成果をだす。
各自5分間の持ち時間で、iPhoneやらAndroidやらのアプリを発表しました。

 

今日は、僕が発表した Sound + Twitter のiPhone Codeを紹介します。

 

作ったアプリの概要は、背後に流れる音楽の強弱に合わせて、指定した人の
IconとTweetが揺れ動く物です。シンプルな機能です。

 

まずは、アプリの動画をご覧下さい。
0:40 ぐらいから、賑やかになります。

 

Coding の主なポイントは下記の3つ

・AVAudioPlayer を使って、流れる音楽の音量(db)の平均値と最大値を取得

・Twitterに対して検索リクエストを投げて、XMLをParse

・UIViewのサブクラスを作って、Pathで描画するクラスを作る。それをNSTimerで連続読み出し。

 

AVAudioPlayで平均値と最大値を取るのは、下記のコード。


// NSTimer で呼ばれるメソッド
-(void)updateMeters{

    //メーターリングのアップデート
    [player updateMeters];
    float dB = 20 * log10(player.volume);

    //peakとaverageを取得
    float peakdB = [player peakPowerForChannel:0];
    float averagedB = [player averagePowerForChannel:0];

    //下げている分を追加する(レベルメーターのフェーダーを下げる)
    peakdB += dB;
    averagedB += dB;
    //player.volumeを考慮した値となる

    //LevelMeterViewでの描画用に0.0〜1.0の値に戻す
    float peak = pow(10,peakdB/20);
    float average = pow(10,averagedB/20);

///UIView のサブクラス _meterview にaverage と peak を渡す
    [_meterview setAverage:average peak:peak];

 

dbを扱っているので、使いやすいように 0.0~1.0 の値へ対数を
使って変換などをしています。正直、計算式の中身は理解していません。

 

ポイントは、 player updateMeters を呼ぶこと。
これがないと、average、peak値が変化しません。
なので、事前に呼ぶ必要があります。

 

あと、下記のように、AVPlayerのインスタンスに対して、
meteringEnabledっていうプロパティーをYESにする必要があります。

    AVAudioPlayer   *player;
    player.meteringEnabled = YES;

 

このコードだけで、いろいろな応用が利きます。

 

音が大きくなると、画面が明るくなる。
音が大きくなると、写真のシャッターが切られる。 などなど。

 

ぜひ、みなさんも遊んでみてください。

 

imoto