因此,我想将浮点音频样本读取到FloatBuffer中,通过JNI将其传递给C ++,然后能够通过AudioTrack播放它们。由于我的音频源是浮点,所以这似乎是最佳方法。请不要建议使用简短的样本,我知道我可以使用它们来实现相同的管道,但是假设我有一个仅在浮点数上工作的C ++音频DSP,并且我想避免在Java或Java中从短裤转换为浮点数C ++。
据我所知,为此我需要满足两个条件:
GetDirectBufferAddress()
从其中获取有效的指针。FloatBuffer::array()
运算符并获得一个float[]
传递给正确的AudioTrack::write()
重载,需要float[]
。如果使用浮点样本初始化流,则会引发其他重载。问题是,除了包装现有的FloatBuffer
来满足第一个条件外,我无法创建直接的ByteBuffer
,但只有HeapFloatBuffer
支持对array()
的调用满足第二。所以我不能两者兼得。我在这里错过了什么吗?还是没有办法避免转换?