我可以同时为JNI直接缓冲区支持和float []数组转换支持创建FloatBuffer吗?

时间:2018-12-10 20:04:34

标签: java android java-native-interface nio audiotrack

因此,我想将浮点音频样本读取到FloatBuffer中,通过JNI将其传递给C ++,然后能够通过AudioTrack播放它们。由于我的音频源是浮点,所以这似乎是最佳方法。请不要建议使用简短的样本,我知道我可以使用它们来实现相同的管道,但是假设我有一个仅在浮点数上工作的C ++音频DSP,并且我想避免在Java或Java中从短裤转换为浮点数C ++。

据我所知,为此我需要满足两个条件:

  1. float缓冲区必须是直接缓冲区(因此我可以将其传递给C ++),以便可以通过C ++中的GetDirectBufferAddress()从其中获取有效的指针。
  2. 浮点缓冲区必须为HeapFloatBuffer,这样我才能在其上调用FloatBuffer::array()运算符并获得一个float[]传递给正确的AudioTrack::write()重载,需要float[]。如果使用浮点样本初始化流,则会引发其他重载。

问题是,除了包装现有的FloatBuffer来满足第一个条件外,我无法创建直接的ByteBuffer,但只有HeapFloatBuffer支持对array()的调用满足第二。所以我不能两者兼得。我在这里错过了什么吗?还是没有办法避免转换?

0 个答案:

没有答案