You can convert the floating point waveform to 16 bits and pass it to OpenSL.
Since you need access to wave data in order to pass it to OpenSL, it needs to be straightforward to do the conversion at runtime - without much overhead.
OpenSL requests that the memory cell remain valid until it no longer needs it. That way you can use an intermediate buffer to convert and reuse it.
Here is how I did it. In fact, I use only one stream and do all the mixing of the source code in the software.
source share