オーディオの再生は、Samsung Galaxy S3 および HTC One で正常にテストされていますが、Android 4.4 を実行している LGE Nexus 4 では深刻な問題が発生しています。何が起こるかというと、完全に良好な音声がほんの一瞬だけ聞こえた後、数秒の無音の後に別の短い音声が続き、その後無音が続くということです。そのため、オーディオ ストリーミング ロジックは、開始 - 再生 - アンダーラン - 停止という永遠のループに陥っているように見えます。
ほぼ毎秒、次の警告がログに記録されます。
12-09 00:55:56.982 10842-14365/com.soundrop.android W/AudioTrack﹕ releaseBuffer() track 0x7b03f4e0 name=s:176;n:2;f:-1 disabled due to previous underrun, restarting
12-09 00:55:57.583 10842-14367/com.soundrop.android W/AudioTrack﹕ releaseBuffer() track 0x7b03f4e0 name=s:176;n:2;f:-1 disabled due to previous underrun, restarting
12-09 00:55:58.594 10842-14369/com.soundrop.android W/AudioTrack﹕ releaseBuffer() track 0x7b03f4e0 name=s:176;n:2;f:-1 disabled due to previous underrun, restarting
12-09 00:55:59.595 10842-14371/com.soundrop.android W/AudioTrack﹕ releaseBuffer() track 0x7b03f4e0 name=s:176;n:2;f:-1 disabled due to previous underrun, restarting
12-09 00:56:02.047 10842-14379/com.soundrop.android W/AudioTrack﹕ releaseBuffer() track 0x7b03f4e0 name=s:176;n:2;f:-1 disabled due to previous underrun, restarting
これにより、デバイス間のオーディオ バッファの違いの可能性について考えるようになり、いくつかの調査を行いました。
HTC One (good playback): AudioTrack.getMinBufferSize(44100, STEREO, ENCODING_PCM_16BIT) => 16932
LGE Nexus 4 (bad playback): AudioTrack.getMinBufferSize(44100, STEREO, ENCODING_PCM_16BIT) => 7056
私の推測では、Deezer Android SDK は、報告された最小サイズの 10 倍のバッファ サイズを選択しているように見えるため、この特定のデバイスでは小さすぎるバッファ サイズを設定していると思われます。
更新: 4.4 を実行している HTC One で、getMinBufferSize() が 16932 を返すオーディオ スタッターを再現しました (Android < 4.4 の場合と同様)。したがって、この問題は明らかにデバイス固有のものではなく、KitKat 以降の OS 固有の動作の変更に関連しています。