Использовать массив C ++ непосредственно в Java API, требуя byte [] - PullRequest
2 голосов
/ 23 февраля 2012

В моем нынешнем виде у меня есть приложение на C ++ с буфером unsigned char*, содержащим аудиоданные PCM. Мне нужно вызвать метод Android API AudioTrack.write() для экземпляра AudioTrack через JNI (от C ++ до Java) с этими данными, и я хотел бы избежать создания дополнительной копии при этом. Могу ли я сделать это?

AudioTrack принимает в качестве одного из аргументов Java byte[], аргумент, который должен соответствовать моим данным PCM (unsigned char*).

Извините, если это дубликат ... Эффективно искать подобные вещи сложно.

1 Ответ

1 голос
/ 23 февраля 2012

Нечто подобное должно делать.
Я не скомпилировал это, и было бы разумно проверить синтаксис также со спецификациями.

jbyteArray byteArray;byteArray = env-> NewByteArray (audioDataLength);
env-> SetByteArrayRegion (byteArray, 0, audioDataLength, (jbyte *) audioData);

Где audioDataLength - длина символа * audioData

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...