Преобразование PyObject в Python в 2D-массив в Android с помощью Chaquopy - PullRequest
1 голос
/ 26 октября 2019

Я использую Chaquopy в моем проекте Android. У меня в классе Python есть функция, которая возвращает двумерный массив типа PyObject. Теперь я хочу преобразовать его в 2D-массив в своем классе Java. Как я могу добиться этого?

РЕДАКТИРОВАТЬ: Вот мой код Python:

import numpy as np
from scipy.io import wavfile

def get_python_audio(file_path):
 fs, data_test = wavfile.read(file_path)
 print('data_test:', data_test.shape)
 data = data_test[:, 0]
 data = data[:, np.newaxis]
 print('data:', data.shape)


 return data

1 Ответ

1 голос
/ 27 октября 2019

Самый быстрый способ преобразования числовых массивов между Java и Python - это использование байтового массива.

Предположим, что wavfile.read возвращает одномерный массив int16, но этот метод легко адаптируется к другим типам данных. Затем в Python вы можете сделать это:

def get_python_audio(file_path):
   fs, data_test = wavfile.read(file_path)
   return data_test.tobytes()

А в Java:

byte[] bytesData = yourModule.callAttr("get_python_audio", filePath).toJava(byte[].class);
short[] shortData = new short[bytesData.length / 2];
ByteBuffer.wrap(bytesData).order(ByteOrder.nativeOrder()).asShortBuffer().get(shortData);

Если в вашем аудио есть несколько каналов, вам придется конвертировать каждый канал отдельно.

...