月別アーカイブ: 2010年10月

METRONOME STAR v1.0.2 公開されました

METRONOME STARのv1.0.2が、公開されました。

変更点は、
・再生停止中に画面をロックした時にAudioUnitを止めて、バッテリーの消費を軽減
・アプリがバックグラウンドに入ったときに、画面表示系のメモリを解放。
・色や画像の調整。
・起動時のアニメーションを追加
といったところです。

ただ、バックグラウンド時のメモリ解放によって、アプリが完全に終了されてしまうことが減ったのですが、バックグラウンドから復帰したときに再生できなくなることがたまにあります。ただ、その場合でも、もう一度アプリを起動し直すと再生できるようです。再生できない場合は、申し訳ありませんがアプリの再起動で対応をお願いします。

起動時のタイトルのフェードアウトは、まあ、起動画像からのアニメーションを試してみたかっただけです。今回のアップデートはメモリ解放やバッテリー消費の改善がメインだったのですが、なにかわかりやすい変更もしておきたいなぁとおもってちょっとやってみました。

CMSampleBufferからオーディオデータを取り出す

前回の続きというほどのものでもない内容になってしまいますが、CMSampleBufferからオーディオのデータを取り出す方法です。CMSampleBufferGetAudioBufferListWithRetainedBlockBufferという関数を使います。前回の内容も含めてDeveloper Forumsに書いてあったコードを参考に調べていたのですが、削るに削ってこれだけになりました。

CMSampleBufferRef sampleBuffer = [audioMixOutput copyNextSampleBuffer];
CMBlockBufferRef blockBuffer;
AudioBufferList audioBufferList;
        
CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(sampleBuffer,
                                                        NULL,
                                                        &audioBufferList,
                                                        sizeof(audioBufferList),
                                                        NULL,
                                                        NULL,
                                                        0,
                                                        &blockBuffer);
//
//    ここでAudioBufferListから読み出す処理など
//
CFRelease(sampleBuffer);
CFRelease(blockBuffer);

とりあえずInterleavedなオーディオデータが読み出せればよいのであれば、上記のコードのようにAudioBufferListを作って、その中のデータを保持するCMBlockBufferをこの関数で取得するというだけで良いようです。引数がたくさんあって他にもいろいろ取得できるようですが、結構みんなNULLであっさり通ったので、あえてそれらを使って何かするのでなければいらないんじゃないでしょうか。