iPhoneでアラームとか通話とかが割り込んできてアプリのオーディオが停止してしまうときの通知を受け取るにはAudioSessionでInterruption Callbackを登録するって感じなのですが、サンプルソースなどは以下のようなコードになってまして…
void rioInterruptionListener(void *inUserData, UInt32 inInterruption)
{
AudioUnit *remoteIO = (AudioUnit*)inUserData;
if (inInterruption == kAudioSessionEndInterruption) {
AudioSessionSetActive(true);
AudioOutputUnitStart(*remoteIO);
}
if (inInterruption == kAudioSessionBeginInterruption)
AudioOutputUnitStop(*remoteIO);
}
自分のアプリに戻ってきたときにはこのコールバックが呼ばれて、kAudioSessionEndInterruptionがinInterruptionに来る事になっていますが、1つ例外があるようです。
iPod touchでホームボタンをダブルタップすると、ミュージックをコントロールできる小さいウィンドウが現れます。そこで再生を押すとオーディオの割り込み開始のkAudioSessionBeginInterruptionは来ますが、そのあと停止してウィンドウを閉じてもkAudioSessionEndInterruptionは来ません。
とりあえず、戻ってくるところはUIApplicationのapplicationDidBecomeActive:で処理しないといけなさそうです。