google / oboe

Oboe is a C++ library that makes it easy to build high-performance audio apps on Android.
Apache License 2.0
3.72k stars 573 forks source link

Still having high latency with Oboe #386

Closed specdrums closed 5 years ago

specdrums commented 5 years ago

Hello,

We're currently using Oboe in our real-time music app (Specdrums) that plays samples from .wav files, but we're getting latencies that are almost always larger than our previous version of the app, which was using a standard Android audio player (looks to be SoundPool objects). In some cases, the new version using Oboe was much worse - for example, 204ms vs. 93ms on the Galaxy S9.

We're using the recommended buffer size for low latency:

int kBufferSizeInBursts = 2

mAudioStream->setBufferSizeInFrames(kBufferSizeInBursts * mAudioStream->getFramesPerBurst());

What else can we do to lower latency so that it's at least on the level of our old version of the app that used a SoundPool object?

Also, when we used Rock Relay (a MIDI synth app on the Google Play store), we got very low latencies across all phones (in the 60-80ms range). Is it fair to use this performance as a baseline for how good Oboe could get? Not sure if performance would be different for apps that play audio from a file vs. (from my understanding) synthesizing the sounds on the spot?

Thanks, Steven Dourmashkin Product Manager | Specdrums

dturner commented 5 years ago

Oboe's goal is to provide the lowest possible latency so if there are other apps getting better latency than Oboe then we definitely have a problem. Please could you supply the source code which you use to create an AudioStream and I'll investigate.

dturner commented 5 years ago

One thing which immediately springs to mind is that if you're playing WAV files then presumably you are creating streams with a fixed sample rate. This can result in you not getting low latency streams because the system must do the resampling for you. To get the lowest latency you need to not specify the sample rate, query it after the stream has opened then, if necessary resample your WAV file to the stream's sample rate.

philburk commented 5 years ago

SoundPool objects are played directly through the FAST mixer. So they have pretty low latency. But you should be able to get the same latency or better with Oboe.

We will try to help but need more info so we can understand why you are seeing such high latency.

What version of Android are you running?

Which API is being used: OpenSL ES or AAudio? Call AudioStream.getAudioApi().

How many streams are you opening? Ideally just one and you are doing your own mixing of drums into that stream. If you open too many streams then you can run out of FAST tracks.

Which PerformanceMode did you request and what did you get? Call AudioStream.getPerformanceMode() to find out.

Are you triggering the sounds from MIDI or from the touch screen?

What is returned from mAudioStream->getFramesPerBurst()?

Feel free to paste a very short bit of logcat from when the stream was opened.

specdrums commented 5 years ago

Here are responses to those questions I received from our developers. Any guidance would definitely be appreciated. Also - is there a know set of devices and/or versions of Android that have better latency which we should focus on to reduce our scope?

What version of Android are you running?

Which API is being used: OpenSL ES or AAudio? Call AudioStream.getAudioApi().

How many streams are you opening? Ideally just one and you are doing your own mixing of drums into that stream. If you open too many streams then you can run out of FAST tracks.

Which PerformanceMode did you request and what did you get? Call AudioStream.getPerformanceMode() to find out.

Are you triggering the sounds from MIDI or from the touch screen?

What is returned from mAudioStream->getFramesPerBurst()?

Feel free to paste a very short bit of logcat from when the stream was opened.

02-19 13:08:25.554 19074-19074/com.sphero.enterprise.specdrumsmix D/OboeAudio: openStream() OUTPUT -------- Oboe version 1.1.1 -------- 02-19 13:08:25.554 19074-19074/com.sphero.enterprise.specdrumsmix I/OboeAudio: AudioStreamOpenSLES::open(chans:2, rate:0) 02-19 13:08:25.559 19074-19074/com.sphero.enterprise.specdrumsmix D/OboeAudio: AudioStreamOpenSLES(): mFramesPerCallback = 192 02-19 13:08:25.559 19074-19074/com.sphero.enterprise.specdrumsmix D/OboeAudio: AudioStreamOpenSLES(): mBytesPerCallback = 768 02-19 13:08:25.559 19074-19074/com.sphero.enterprise.specdrumsmix W/OboeAudio: configurePerformanceMode() not supported until N_MR1 02-19 13:08:25.584 19074-19074/com.sphero.enterprise.specdrumsmix D/OboeAudio: AudioOutputStreamOpenSLES(): requestStart() called 02-19 13:08:25.584 19074-19074/com.sphero.enterprise.specdrumsmix D/OboeAudio: AudioOutputStreamOpenSLES(): setPlayState() 02-19 13:08:25.594 19074-19074/com.sphero.enterprise.specdrumsmix D/OboeAudio: AudioStream::fireDataCallback() scheduler = SCHED_OTHER 02-19 13:08:25.594 19074-19074/com.sphero.enterprise.specdrumsmix D/OboeAudio: AudioOutputStreamOpenSLES(): requestStart() returning 0 02-19 13:08:25.594 19074-19074/com.sphero.enterprise.specdrumsmix I/RhythmGame: OBOE Stream - Format: I16 02-19 13:08:25.594 19074-19074/com.sphero.enterprise.specdrumsmix I/RhythmGame: OBOE Stream - AudioApi: OpenSLES 02-19 13:08:25.594 19074-19074/com.sphero.enterprise.specdrumsmix I/RhythmGame: OBOE Stream - Performance mode: None 02-19 13:08:25.594 19074-19074/com.sphero.enterprise.specdrumsmix I/RhythmGame: OBOE Stream - Bytes per sample: 2 02-19 13:08:25.594 19074-19074/com.sphero.enterprise.specdrumsmix I/RhythmGame: OBOE Stream - Frames per burst: 192 02-19 13:08:25.594 19074-19074/com.sphero.enterprise.specdrumsmix I/RhythmGame: OBOE Stream - Frames per callback: 192 02-19 13:08:25.594 19074-19074/com.sphero.enterprise.specdrumsmix I/RhythmGame: OBOE Stream - Bytes per frame: 4 02-19 13:08:25.594 19074-19074/com.sphero.enterprise.specdrumsmix I/RhythmGame: OBOE Stream - Buffer Size in Frames: 384 02-19 13:08:25.594 19074-19074/com.sphero.enterprise.specdrumsmix I/RhythmGame: OBOE Stream - Buffer capacity in frames: 384 02-19 13:08:25.594 19074-19074/com.sphero.enterprise.specdrumsmix I/RhythmGame: OBOE Stream - Bytes sample rate: 48000 02-19 13:08:25.594 19074-19074/com.sphero.enterprise.specdrumsmix I/RhythmGame: OBOE Stream - Content type: 4 02-19 13:08:25.594 19074-19074/com.sphero.enterprise.specdrumsmix I/RhythmGame: OBOE Stream - Channel count: 2 02-19 13:08:25.594 19074-19074/com.sphero.enterprise.specdrumsmix I/RhythmGame: OBOE Stream - Sharing mode: Shared 02-19 13:08:25.594 19074-19074/com.sphero.enterprise.specdrumsmix I/RhythmGame: OBOE Stream - Usage: 1

dturner commented 5 years ago

Sorry, more questions to help diagnose this:

dturner commented 5 years ago

Also - is there a know set of devices and/or versions of Android that have better latency which we should focus on to reduce our scope?

Pixel devices and Samsung Galaxy S9, Note9 currently have the best audio latency of any Android devices.

dturner commented 5 years ago

Closing due to inactivity. Please reopen with the requested information if you still have issues.

specdrums commented 5 years ago

Hi Don,

Thanks for the responses, and sorry about the delay. Here are the answers I got back for your questions, for the device we're getting the worst latency on. Any feedback would be appreciated! And fyi, we are measuring latency as the time measured from an audio recording between the start of a physical tap and the start of an audio file being played through the device. We've identified latency related to the hardware / bluetooth to be 25ms total.

• What Android device is this? Samsung Galaxy S5 • Did you follow the guidance here for setting the default sample rate and buffer size? Yes • When the app is running can you type the following command into a terminal

  Loudness Enhancer / The Android Open Source Project
    UUID: fa415329-2034-4bea-b5dc-5b381c8d1e2c
    TYPE: fe3199be-aed0-413f-87bb-11260eb63cf1
    apiVersion: 00020000
    flags: 00000008
Library soundalive_sec
  SoundAlive / Samsung
    UUID: cf65eb39-ce2f-48a8-a903-ceb818c06745
    TYPE: c4da1d1f-7cdf-42e2-ba60-efc7eb3508a3
    apiVersion: 00020000
    flags: 00000208
Library soundalive
  SoundAlive_EQ / Samsung
    UUID: 0c117b70-f97f-11e0-be50-0002a5d5c51b
    TYPE: 0bed4300-ddd6-11db-8f34-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000210
  SoundAlive_Virtualizer / Samsung
    UUID: c747f6a0-418a-11e1-a621-0002a5d5c51b
    TYPE: 37cc2c00-dddd-11db-8577-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000210
  SoundAlive_BassBoost / Samsung
    UUID: a926a540-418a-11e1-b2f1-0002a5d5c51b
    TYPE: 0634f220-ddd4-11db-a0fc-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000210
Library mysound
  MySound / Samsung
    UUID: 263a88e0-50b1-11e2-bcfd-0800200c9a66
    TYPE: d2bc05e0-50b0-11e2-bcfd-0800200c9a66
    apiVersion: 00020000
    flags: 00000210
Library pre_processing
  Noise Suppression / NXP Software Ltd.
    UUID: df0afc20-93ce-11e0-98de-0002a5d5c51b
    TYPE: 58b4b260-8e06-11e0-aa8e-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000203
  Acoustic Echo Canceler / NXP Software Ltd.
    UUID: d6dbf400-93ce-11e0-bcd7-0002a5d5c51b
    TYPE: 7b491460-8d4d-11e0-bd61-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000203
  Automatic Gain Control / NXP Software Ltd.
    UUID: 03b75f00-93ce-11e0-9fb8-0002a5d5c51b
    TYPE: 0a8abfe0-654c-11e0-ba26-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000203
Library output_processing
  Far-End Noise Suppression / NXP Software Ltd.
    UUID: cbcc5980-476d-11e1-82ee-0002a5d5c51b
    TYPE: f88eb3c0-476b-11e1-9375-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000248
  Loudness Maximizer for Voice / NXP Software Ltd.
    UUID: 989d9460-413d-11e1-8b0d-0002a5d5c51b
    TYPE: 4c0aa460-413a-11e1-a29d-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000250
Library downmix
  Multichannel Downmix To Stereo / The Android Open Source Project
    UUID: 93f04452-e4fe-41cc-91f9-e475b6d1d69f
    TYPE: 381e49cc-a858-4aa2-87f6-e8388e7601b2
    apiVersion: 00020000
    flags: 00000008
Library visualizer
  Visualizer / The Android Open Source Project
    UUID: d069d9e0-8329-11df-9168-0002a5d5c51b
    TYPE: e46b26a0-dddd-11db-8afd-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000008
Library reverb
  Insert Preset Reverb / NXP Software Ltd.
    UUID: 172cdf00-a3bc-11df-a72f-0002a5d5c51b
    TYPE: 47382d60-ddd8-11db-bf3a-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000048
  Auxiliary Preset Reverb / NXP Software Ltd.
    UUID: f29a1400-a3bb-11df-8ddc-0002a5d5c51b
    TYPE: 47382d60-ddd8-11db-bf3a-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000001
  Insert Environmental Reverb / NXP Software Ltd.
    UUID: c7a511a0-a3bb-11df-860e-0002a5d5c51b
    TYPE: c2e5d5f0-94bd-4763-9cac-4e234d06839e
    apiVersion: 00020000
    flags: 00000048
  Auxiliary Environmental Reverb / NXP Software Ltd.
    UUID: 4a387fc0-8ab3-11df-8bad-0002a5d5c51b
    TYPE: c2e5d5f0-94bd-4763-9cac-4e234d06839e
    apiVersion: 00020000
    flags: 00000001
Library bundle
  Volume / NXP Software Ltd.
    UUID: 119341a0-8469-11df-81f9-0002a5d5c51b
    TYPE: 09e8ede0-ddde-11db-b4f6-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000050
Clients:
  pid: 3668
  pid: 4563
  pid: 6020
  pid: 23767
Notification Clients:
  pid: 3668
  pid: 4189
  pid: 4563
  pid: 5465
  pid: 6020
  pid: 23767
Global session refs:
  session   pid count packagename
      836  6020     1 com.sec.android.inputmethod
      848  6020     1 com.sec.android.inputmethod
      852  6020     1 com.sec.android.inputmethod
     1327  4563     1 com.android.systemui
     1330  4563     1 com.android.systemui
     1330  4563     1 com.android.systemui
     1331  4563     1 com.android.systemui
     1425 23767     1 com.sphero.enterprise.specdrumsmix
Hardware status: 0
Standby Time mSec: 3000

Output thread 0xb0300000 type 0 (MIXER):
  Thread name: AudioOut_2
  I/O handle: 2
  TID: 4057
  Standby: no
  Sample rate: 48000 Hz
  HAL frame count: 960
  HAL format: 0x1 (pcm16)
  HAL buffer size: 3840 bytes
  Channel count: 2
  Channel mask: 0x00000003 (front-left, front-right)
  Format: 0x1 (pcm16)
  Frame size: 4 bytes
  Pending config events: none
  Output device: 0x2 (SPEAKER)
  Input device: 0 (NONE)
  Audio source: 0 (default)
  Normal frame count: 960
  Last write occurred (msecs): 8
  Total writes: 8207063
  Delayed writes: 13
  Blocked in write: yes
  Suspend count: 0
  Sink buffer : 0xb02c2000
  Mixer buffer: 0x0
  Effect buffer: 0x0
  Fast track availMask=fe
  AudioStreamOut: 0xb22e4620 flags 0x2 (PRIMARY)
  Thread throttle time (msecs): 28667
  AudioMixer tracks: 0x0000013f
  FastMixer not initialized
  Stream volumes in dB: 0:-3, 1:-inf, 2:-inf, 3:0, 4:-9, 5:-inf, 6:0, 7:-inf, 8:-inf, 9:-inf, 10:0, 11:-3, 12:-3, 13:-inf, 14:0, 15:0, 16:0
  Normal mixer raw underrun counters: partial=0 empty=0
  7 Tracks of which 1 are active
    Name Active Client Type        Fmt   Chn mask Session fCount S F  SRate  L dB  R dB      Server   Main buf    Aux Buf   Flags UndFrmCnt
       2    yes  23767    3 0x00000005 0x00000003    1425   3544 A 3  44100     0     0  0x0013bdc8 0xb02c2000 0x00000000 0x00000         0 
       8     no   6020    1 0x00000001 0x00000001     852   3749 S 1  44100  -inf  -inf  0x00000ea5 0xb02c2000 0x00000000 0x00600         0 
       0     no   3668    5 0x00000001 0x00000003    1330   8820 S 1  44100     0     0  0x00006035 0xb02c2000 0x00000000 0x00601       882 
       5     no   6020    1 0x00000001 0x00000001     848   3749 S 1  44100  -inf  -inf  0x00000ea5 0xb02c2000 0x00000000 0x00600         0 
       3     no   4563    1 0x00000001 0x00000003    1327  67989 S 1  48000  -inf  -inf  0x00010995 0xb02c2000 0x00000000 0x00600         0 
       4     no   6020    1 0x00000001 0x00000001     836   3749 S 1  44100  -inf  -inf  0x00000ea5 0xb02c2000 0x00000000 0x00600         0 
       1     no   4563    2 0x00000001 0x00000003    1331   6216 S 1  44100  -inf  -inf  0x00001848 0xb02c2000 0x00000000 0x00600         0 
  0 Effect Chains
AudioHardwareBase::dumpState
        mMode: 0
AudioHardwareTinyALSA::dump
        Mutex: unlocked
        tty_mode: 0
        CheckModemPath: false
        CheckPcmClk: false, false line 0
        BluetoothECOff: false
        InputSource: 1
        FactoryLoopbackMode: 0
        isIncall: false
        InCallDevices: 0
        RingbackToneState: false
        isRealCall: false
        EnabledDualMic: true
        VoIPRxActive: false
        ProcType: 0
        IsExtraVolumeMode: false
        IsMicMuted: false
        FactoryMode: 0
        AllSoundMute: false
        VoiceVolume: true
        BluetoothSampleRate: 8000
        wake up mic: false
        wake up baby cry: false
AudioStreamOutALSA::dump
        Mutex: locked
        Standby: false
        mHandle: -1358136704
        PowerLock: true
        ActiveDevice: 0x2
        CurrentDevice: 0x2

MacBook:jams-android juanmartin$ adb shell dumpsys media.audio_flinger
Library loudness_enhancer
  Loudness Enhancer / The Android Open Source Project
    UUID: fa415329-2034-4bea-b5dc-5b381c8d1e2c
    TYPE: fe3199be-aed0-413f-87bb-11260eb63cf1
    apiVersion: 00020000
    flags: 00000008
Library soundalive_sec
  SoundAlive / Samsung
    UUID: cf65eb39-ce2f-48a8-a903-ceb818c06745
    TYPE: c4da1d1f-7cdf-42e2-ba60-efc7eb3508a3
    apiVersion: 00020000
    flags: 00000208
Library soundalive
  SoundAlive_EQ / Samsung
    UUID: 0c117b70-f97f-11e0-be50-0002a5d5c51b
    TYPE: 0bed4300-ddd6-11db-8f34-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000210
  SoundAlive_Virtualizer / Samsung
    UUID: c747f6a0-418a-11e1-a621-0002a5d5c51b
    TYPE: 37cc2c00-dddd-11db-8577-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000210
  SoundAlive_BassBoost / Samsung
    UUID: a926a540-418a-11e1-b2f1-0002a5d5c51b
    TYPE: 0634f220-ddd4-11db-a0fc-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000210
Library mysound
  MySound / Samsung
    UUID: 263a88e0-50b1-11e2-bcfd-0800200c9a66
    TYPE: d2bc05e0-50b0-11e2-bcfd-0800200c9a66
    apiVersion: 00020000
    flags: 00000210
Library pre_processing
  Noise Suppression / NXP Software Ltd.
    UUID: df0afc20-93ce-11e0-98de-0002a5d5c51b
    TYPE: 58b4b260-8e06-11e0-aa8e-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000203
  Acoustic Echo Canceler / NXP Software Ltd.
    UUID: d6dbf400-93ce-11e0-bcd7-0002a5d5c51b
    TYPE: 7b491460-8d4d-11e0-bd61-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000203
  Automatic Gain Control / NXP Software Ltd.
    UUID: 03b75f00-93ce-11e0-9fb8-0002a5d5c51b
    TYPE: 0a8abfe0-654c-11e0-ba26-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000203
Library output_processing
  Far-End Noise Suppression / NXP Software Ltd.
    UUID: cbcc5980-476d-11e1-82ee-0002a5d5c51b
    TYPE: f88eb3c0-476b-11e1-9375-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000248
  Loudness Maximizer for Voice / NXP Software Ltd.
    UUID: 989d9460-413d-11e1-8b0d-0002a5d5c51b
    TYPE: 4c0aa460-413a-11e1-a29d-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000250
Library downmix
  Multichannel Downmix To Stereo / The Android Open Source Project
    UUID: 93f04452-e4fe-41cc-91f9-e475b6d1d69f
    TYPE: 381e49cc-a858-4aa2-87f6-e8388e7601b2
    apiVersion: 00020000
    flags: 00000008
Library visualizer
  Visualizer / The Android Open Source Project
    UUID: d069d9e0-8329-11df-9168-0002a5d5c51b
    TYPE: e46b26a0-dddd-11db-8afd-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000008
Library reverb
  Insert Preset Reverb / NXP Software Ltd.
    UUID: 172cdf00-a3bc-11df-a72f-0002a5d5c51b
    TYPE: 47382d60-ddd8-11db-bf3a-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000048
  Auxiliary Preset Reverb / NXP Software Ltd.
    UUID: f29a1400-a3bb-11df-8ddc-0002a5d5c51b
    TYPE: 47382d60-ddd8-11db-bf3a-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000001
  Insert Environmental Reverb / NXP Software Ltd.
    UUID: c7a511a0-a3bb-11df-860e-0002a5d5c51b
    TYPE: c2e5d5f0-94bd-4763-9cac-4e234d06839e
    apiVersion: 00020000
    flags: 00000048
  Auxiliary Environmental Reverb / NXP Software Ltd.
    UUID: 4a387fc0-8ab3-11df-8bad-0002a5d5c51b
    TYPE: c2e5d5f0-94bd-4763-9cac-4e234d06839e
    apiVersion: 00020000
    flags: 00000001
Library bundle
  Volume / NXP Software Ltd.
    UUID: 119341a0-8469-11df-81f9-0002a5d5c51b
    TYPE: 09e8ede0-ddde-11db-b4f6-0002a5d5c51b
    apiVersion: 00020000
    flags: 00000050
Clients:
  pid: 3668
  pid: 4563
  pid: 6020
  pid: 23767
Notification Clients:
  pid: 3668
  pid: 4189
  pid: 4563
  pid: 5465
  pid: 6020
  pid: 23767
Global session refs:
  session   pid count packagename
      836  6020     1 com.sec.android.inputmethod
      848  6020     1 com.sec.android.inputmethod
      852  6020     1 com.sec.android.inputmethod
     1327  4563     1 com.android.systemui
     1330  4563     1 com.android.systemui
     1330  4563     1 com.android.systemui
     1331  4563     1 com.android.systemui
     1425 23767     1 com.sphero.enterprise.specdrumsmix
Hardware status: 0
Standby Time mSec: 3000

Output thread 0xb0300000 type 0 (MIXER):
  Thread name: AudioOut_2
  I/O handle: 2
  TID: 4057
  Standby: no
  Sample rate: 48000 Hz
  HAL frame count: 960
  HAL format: 0x1 (pcm16)
  HAL buffer size: 3840 bytes
  Channel count: 2
  Channel mask: 0x00000003 (front-left, front-right)
  Format: 0x1 (pcm16)
  Frame size: 4 bytes
  Pending config events: none
  Output device: 0x2 (SPEAKER)
  Input device: 0 (NONE)
  Audio source: 0 (default)
  Normal frame count: 960
  Last write occurred (msecs): 14
  Total writes: 8210495
  Delayed writes: 13
  Blocked in write: yes
  Suspend count: 0
  Sink buffer : 0xb02c2000
  Mixer buffer: 0x0
  Effect buffer: 0x0
  Fast track availMask=fe
  AudioStreamOut: 0xb22e4620 flags 0x2 (PRIMARY)
  Thread throttle time (msecs): 28667
  AudioMixer tracks: 0x0000013f
  FastMixer not initialized
  Stream volumes in dB: 0:-3, 1:-inf, 2:-inf, 3:0, 4:-9, 5:-inf, 6:0, 7:-inf, 8:-inf, 9:-inf, 10:0, 11:-3, 12:-3, 13:-inf, 14:0, 15:0, 16:0
  Normal mixer raw underrun counters: partial=0 empty=0
  7 Tracks of which 1 are active
    Name Active Client Type        Fmt   Chn mask Session fCount S F  SRate  L dB  R dB      Server   Main buf    Aux Buf   Flags UndFrmCnt
       2    yes  23767    3 0x00000005 0x00000003    1425   3544 A 3  44100     0     0  0x0041edc8 0xb02c2000 0x00000000 0x00000         0 
       8     no   6020    1 0x00000001 0x00000001     852   3749 S 1  44100  -inf  -inf  0x00000ea5 0xb02c2000 0x00000000 0x00600         0 
       0     no   3668    5 0x00000001 0x00000003    1330   8820 S 1  44100     0     0  0x00006035 0xb02c2000 0x00000000 0x00601       882 
       5     no   6020    1 0x00000001 0x00000001     848   3749 S 1  44100  -inf  -inf  0x00000ea5 0xb02c2000 0x00000000 0x00600         0 
       3     no   4563    1 0x00000001 0x00000003    1327  67989 S 1  48000  -inf  -inf  0x00010995 0xb02c2000 0x00000000 0x00600         0 
       4     no   6020    1 0x00000001 0x00000001     836   3749 S 1  44100  -inf  -inf  0x00000ea5 0xb02c2000 0x00000000 0x00600         0 
       1     no   4563    2 0x00000001 0x00000003    1331   6216 S 1  44100  -inf  -inf  0x00001848 0xb02c2000 0x00000000 0x00600         0 
  0 Effect Chains
AudioHardwareBase::dumpState
        mMode: 0
AudioHardwareTinyALSA::dump
        Mutex: unlocked
        tty_mode: 0
        CheckModemPath: false
        CheckPcmClk: false, false line 0
        BluetoothECOff: false
        InputSource: 1
        FactoryLoopbackMode: 0
        isIncall: false
        InCallDevices: 0
        RingbackToneState: false
        isRealCall: false
        EnabledDualMic: true
        VoIPRxActive: false
        ProcType: 0
        IsExtraVolumeMode: false
        IsMicMuted: false
        FactoryMode: 0
        AllSoundMute: false
        VoiceVolume: true
        BluetoothSampleRate: 8000
        wake up mic: false
        wake up baby cry: false
AudioStreamOutALSA::dump
        Mutex: locked
        Standby: false
        mHandle: -1358136704
        PowerLock: true
        ActiveDevice: 0x2
        CurrentDevice: 0x2

Reroute submix audio module:
 route[0] rate in=0 out=0, addr=[]
 route[1] rate in=0 out=0, addr=[]
 route[2] rate in=0 out=0, addr=[]
 route[3] rate in=0 out=0, addr=[]
 route[4] rate in=0 out=0, addr=[]
 route[5] rate in=0 out=0, addr=[]
 route[6] rate in=0 out=0, addr=[]
 route[7] rate in=0 out=0, addr=[]
 route[8] rate in=0 out=0, addr=[]
 route[9] rate in=48000 out=48000, addr=[]