パフォーマンスについて
パフォーマンスの調整について
- iOSでは、OSの音声出力バッファーの更新頻度を変更することができます。
- 更新頻度要望値設定関数:AVAudioSession::setPreferredIOBufferDuration(_:)
- 要望値:AVAudioSession::preferredIOBufferDuration
- 現在値:AVAudioSession::ioBufferDuration
- 更新頻度が高いほど遅延は小さくなりますが、音声出力処理の回数が増える為音途切れのリスクは増加します。
逆に更新頻度が低いと遅延は大きくなりますが、音声出力処理の回数が少なくなり猶予が大きくなる為、音途切れのリスクは減少します。
- 注意
- 上記設定関数を使用しても、要望通りに動作するとは限りません。
後述のバックグラウンド再生中などでは、OSによって設定値が変更されることがあります。
バックグラウンド再生について
- SonicSYNC動作中であっても、バックグラウンド音声再生中は再生遅延に関するパフォーマンスが低下することがあります。
これはiOSがバックグラウンドで音声再生中にバッファーの更新頻度を自動的に変更するためです。
また、バックグラウンドで再生しているアプリケーション依存で低下具合は変動します。
既知の不具合・現象
- iPhone 7以前の端末で、Xcodeデバッグ中にSonicSYNCを使用して再生を行うと、音途切れが発生することが確認されています。
これはデバッガーがアタッチされていて負荷がかかっていることと、端末のスレッド数が少ないことが原因で発生していると推定されます。
また、デバッガーがアタッチされていない環境では問題なく再生されていることを確認しています。
そのため、開発時はiPhone 8以降の比較的高性能な端末で作業することを推奨します。
性能の詳細
各端末における音声出力までの遅延時間
機種 | iOS
バージョン | IOBufferDuration
(秒) | SonicSYNCの使用
(o/x) | 最小遅延時間
(ミリ秒) | 最大遅延時間
(ミリ秒) | 平均遅延時間
(ミリ秒) |
iPhone 7 | 14.4 | 0.003 | o | 84 | 125 | 101.55 |
0.025 | x | 176 | 208 | 198.55 |
iPhone 12 Pro | 14.5 | 0.003 | o | 94 | 124 | 107.05 |
0.025 | x | 166 | 200 | 182.70 |
- 補足:
- 本項における「遅延」とは、以下を加算したものです。
- タッチデバイスの入力遅延(デバイス依存)
- 再生リクエスト遅延(Atomのサーバー周波数依存)
- オーディオデバイスのバッファ更新遅延(デバイス依存)
- 物理スピーカーまでの出力遅延(デバイス依存)
- この内、性能結果計測時におけるAtomのサーバー周波数は60に設定しています。
また、本結果は各端末にて20回計測を行って得たものです。
- 計測に使用した端末のスペックについては、各メーカーサイトにてご確認下さい。