Я работаю над динамически связанной библиотекой обработки звука в реальном времени, где у меня есть двумерный массив данных C с плавающей запятой, который представляет аудиобуфер. Одно измерение - время (отсчеты), а другое - канал. Я хотел бы передать это скрипту Python в качестве массива для обработки DSP, а затем я хотел бы передать это обратно в C, чтобы данные могли продолжить цепочку обработки в C. Функция-член в C ++, которая выполняет обработка выглядит так:
void myEffect::process (float** inputs, float** outputs, int buffersize)
{
//Some processing stuff
}
Массивы входы и выходы имеют одинаковый размер. Целое число размер буфера - это число столбцов во входных и выходных массивах. Что касается Python, я бы хотел, чтобы обработка выполнялась функцией, которая выглядит следующим образом:
class myPyEffect
...
...
def process(self,inBuff):
#inBuff and outBuff should be numpy arrays
outBuff = inBuff * self.whatever # some DSP stuff
return outBuff
...
...
Теперь мой вопрос: как я могу получить данные в C и из C наиболее эффективным способом (избегая ненужного копирования памяти и т. Д.)? До сих пор для простых изменений параметров я использовал вызовы C-API, подобные следующим:
pValue = PyObject_CallMethod(pInstance, "setParameter", "(f)", value);
Использую ли я что-то похожее для моих массивов или есть лучший способ? Спасибо за чтение.