はじめに
最近Xperiaの端末(1 IV等)音声に関する面白い問題を調査したため、その問題と解決方法を記載します。
問題概要
ウチのアプリ上Xperia1 IVを利用して配信したら、配信開始後20秒前後で、異常のダイアログが出て、配信終了になる。
解決
結論から言います。
OpenSLのEngine起動時、パラメータSL_ANDROID_RECORDING_PRESET_CAMCORDER
からSL_ANDROID_RECORDING_PRESET_UNPROCESSED
へ変更すること。
調査経過
ダイアログからエンコード時、音声のタイムスタンプと画像のタイムスタンプが10何秒ずれることにたどり着いた。
↓
そこから音声のエンコード時、異常端末は明らかに遅い。最初は音声エンコードのフォーマットを疑ったが、正常の端末と同様。
↓
そうなると録音音声データの元、マイクからのデータを確認したところ、正常端末の音声データはちゃんと見えるが、異常端末の場合メモリー上0x0000のまま。
音声処理はNative層のOpenSLを利用しているのため、Androidの関連ページを確認したら、Oboeという新しい音声処理ライブラリが今のおすすめだそう。まさかOpenSLはもうサポートされないかと思い、CDD(Android互換性定義)を開き、OpenSLで検索したら、SL_ANDROID_RECORDING_PRESET_UNPROCESSED
にたどり着いた。
残る疑問
今まで他のAndroid端末、音声処理時SL_ANDROID_RECORDING_PRESET_CAMCORDER
の設定で動いたけど、Xperiaの特定端末だけ今回の異常が発生する。
Xperiaの端末でSL_ANDROID_RECORDING_PRESET_CAMCORDER
に関する何らかの実装が行われたと思います。
もしXperiaのエンジニアがいれば、是非アドバイスやコメントをお願いします!
もし他のAndroidエンジニアも同じような現象に困っているなら、本記事の方法で試してください。(あんまりないかもしれない)
*以前Xperia端末の音声設定「インテリジェントウインドフィルター」がONの時、録音の音声が雑音になる問題も今回で一緒に解決されると思います。
参考リンク