0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oboeを使い始めてハマった罠まとめ

Posted at

Oboeを使い始めてハマった罠まとめ

Androidで低遅延(?)の音声処理を実現するために、Googleが提供している音声ライブラリ「Oboe」を使い始めました。
一見するとシンプルに扱えるように見えますが、実際に実装・長時間運用してみると、端末ごとの挙動の違いやライブラリ内部の仕様で思わぬトラブルに遭遇しました。ここでは特に印象的だった「ハマりどころ」をまとめます。

1. LowLatencyモードでの録音音量低下(主にSamsung端末)

2. プリセットによる音声前処理の影響

  • 現象
    • InputPresetVOICE_COMMUNICATIONVOICE_RECOGNITIONなど、プリセットによって録音音量や音質が変わる
  • 背景
    • Xperia端末で/vendor/etc/audio_effects.xmlを確認したところ、以下のようにプリセットごとに異なる前処理(AEC, NS, ZNR, DNNR)が割り当てられていた
    <preprocess>
        <stream type="voice_communication">
            <apply effect="aec"/>
            <apply effect="ns"/>
        </stream>
        <stream type="mic">
            <apply effect="ZNR"/>
            <apply effect="DNNR"/>
        </stream>
        <stream type="camcorder">
            <apply effect="ZNR"/>
            <apply effect="DNNR"/>
        </stream>
    </preprocess>
    
  • ポイント
    • VOICE_COMMUNICATION → Acoustic Echo Canceller (AEC) + Noise Suppressor (NS)
    • MIC / CAMCORDER → Zoom/Wind Noise Reduction
    • これにより、録音レベルや音質が端末・プリセット依存で変わる
  • 参考リンク

3. CAMCORDERプリセットの罠(Xperiaなど)

  • 現象
    • Xperia端末などでAAUDIO_INPUT_PRESET_CAMCORDERを使う問題点
      • 録音がノイズ化することがある
      • 無音になることがある
      • (OpenSL ESと比べて、新しい端末での動作が基本大丈夫だが、古い端末では不安定かも)
  • 回避策
    • VOICE_COMMUNICATIONを使う
    • また、Xperia XZ3ではLowLatencyモードを指定すると録音が正常に動作するようにはなる
  • 参考リンク

4. 長時間稼働での問題

  • 現象
    • 長時間連続で録音・処理を続けると、音声処理が停止またはクラッシュする
  • 原因
    • サンプリングレート48kHzで稼働し続けると、システム内部のint32カウンタが約12時間20分でオーバーフローする
    • audioserverが転けた可能性もある
  • 回避策
    • 定期的に音声ストリームを再起動する
    • 音声データを監視し、異常があれば再起動する
  • 参考リンク

5. 出力デバイス変更で発生するDisconnect問題

  • 現象
    1. OboeでAAudioを使う場合、イヤホンの抜き差しによってストリームが「切断(Disconnected)」状態になるはず
    2. Android 9 (P)や初期のAndroid 10 (Q)では、DisconnectイベントがAAudioに届かない不具合がある
    3. 出力デバイスの切り替えが失敗し、音が出なくなる
  • 回避策
    • Java側でAudioDeviceCallback()を使い、デバイス変更を検知してストリームを再作成する
  • 詳しい情報
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?