mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2025-07-21 15:45:46 +00:00
36 lines
1.4 KiB
Markdown
36 lines
1.4 KiB
Markdown
LiveEffect Sample
|
||
============
|
||
|
||
This sample simply loops audio from input stream to output stream to demonstrate
|
||
the usage of the 2 stream interfaces.
|
||
|
||
Screenshots
|
||
-----------
|
||
|
||

|
||
|
||
|
||
### Stream Configurations
|
||
- 48kHz
|
||
- oboe::I16
|
||
- stereo or mono
|
||
|
||
### Customizing the App
|
||
|
||
If you want to customize the effects processing then modify the
|
||
onBothStreamsReady() method in "src/main/cpp/FullDuplexPass.h"
|
||
|
||
### Caveats
|
||
OpenES SL does not allow setting the recording or playback device.
|
||
|
||
Synchronizing input and output streams for full-duplex operation is tricky.
|
||
|
||
Input and output have different startup times. The input side may have to charge up the microphone circuit.
|
||
Also the initial timing for the output callback may be bursty as it fills the buffer up.
|
||
So when the output stream makes its first callback, the input buffer may be overflowing or empty or partially full.
|
||
|
||
In order to get into sync we go through a few phases.
|
||
|
||
* In Phase 1 we always drain the input buffer as much as possible, more than the output callback asks for. When we have done this for a while, we move to phase 2.
|
||
* In Phase 2 we optionally skip reading the input once to allow it to fill up with one burst. This makes it less likely to underflow on future reads.
|
||
* In Phase 3 we should be in a stable situation where the output is nearly full and the input is nearly empty. You should be able to run for hours like this with no glitches.
|