Итак, я хочу прочитать сэмплы с плавающей запятой в FloatBuffer , передать его в C ++ через JNI и затем иметь возможность воспроизводить их через AudioTrack .Поскольку мой источник звука с плавающей запятой, это кажется оптимальным способом.Пожалуйста, не рекомендую использовать короткие образцы, я знаю, что могу добиться того же конвейера с ними, но давайте предположим, что у меня есть аудио CSP C ++, который работает только с плавающими числами, и я хочу избежать преобразования из коротких в плавающие в Java илиC ++.
Насколько я понимаю, для этого мне нужно два условия:
- Буфер float должен быть прямым буфером (поэтому я могу передать его вC ++), так что я могу получить от него действительный указатель через
GetDirectBufferAddress()
в C ++. - Буфер float должен быть HeapFloatBuffer , чтобы я мог вызвать
FloatBuffer::array()
оператор на него и получить float[]
для перехода к правильной перегрузке AudioTrack::write()
, которая принимает float[]
.Другие перегрузки генерируются, если поток инициализируется с выборками с плавающей запятой.
Проблема заключается в том, что я не могу создать прямое FloatBuffer
, кроме обтекания существующего ByteBuffer
для удовлетворения первого, нотолько HeapFloatBuffer
поддерживает вызов array()
для удовлетворения второго.Так что я не могу иметь оба.Я что-то здесь упускаю или нет способа избежать конверсии?