2011-03-08 5 views
1

私のiPhoneアプリはオーディオを再生し、ユーザーがホームボタンを押すとゆっくりとフェードアウトする必要があります(アプリをバックグラウンドに送ります)。私は自分のオーディオユニットをフェードアウトさせることができますが、残念なことに、アプリがバックグラウンドに送られて以来、音は凶悪なクラックルで終わります。アプリをバックグラウンドに遅らせるためにループを使用することはできますか?

つまり、私はバックグラウンドに遅れる必要があります。私はループ内のAUの振幅を確認し、振幅がゼロになるとループを終了することができました。二重の安全を確保するために、私は遅延を1/10秒を超えないように警報をつけた。具体的には、私のAppDelegateapplicationDidEnterBackground方法では、私は言う:

time_t s1 = clock() + (time_t)(0.1 * CLOCKS_PER_SEC); 
while(([sinus current_amplitude] > 0.0) && (s1 > clock())); 

これは期待通りに動作しますが、アプリをストール。これは悪いスタイルと思われますか、それとも問題ありませんか?


フォロー:入力用感謝。はるかにエレガントである

NSDate *future = [NSDate dateWithTimeIntervalSinceNow: 0.1 ]; 
[NSThread sleepUntilDate:future]; 

:私は遅延の代わりに、バックグラウンドでプレーを続け、今私はこのようにそれをやっているにもこだわってきました。

答えて

1

音楽を再生するアプリのデフォルトの動作ではありません。あなたは、通常のようにあなたのアプリケーションを終了させる必要がありますが、あなたが望むように音楽をフェードアウトする必要があります。また、バックグラウンドで数秒再生することもできます。

4

このようにUI実行ループをブロックすることは、優れたアプリケーション設計ではありません。実行ループを長時間ブロックすると、OSがアプリを強制終了することさえあります。

マルチタスクバックグラウンドオーディオ再生用にアプリケーションを登録し、バックグラウンドで数秒間テーパを0にしてオーディオを停止し、オーディオセッションを解放することが可能です。

関連する問題