Так что я чувствую, что Google устает пытаться помочь мне в этом.Передача указателя массива float через расширение/оболочку python - SndObj-library
Я пытался поэкспериментировать с библиотекой SndObj в конце и, более конкретно, оболочкой python.
Библиотека достаточно любезна, чтобы включить пример python для игры, единственная проблема - заставить его работать. Последняя строка ниже дает мне мир боли:
from sndobj import SndObj, SndRTIO, HarmTable, Oscili, SND_OUTPUT
from scipy import zeros, pi, sin, float32
import numpy
sine = numpy.array([256],float32)
for i in range(sine.size):
sine[i] = 0.5 * sin((2 * pi * i)/sine.size)
sine *= 32768
obj = SndObj()
obj.PushIn(sine,256)
В исходном коде это было:
obj.PushIn(sine)
Это дало мне ошибку
TypeError: SndObj_PushIn() takes exactly 3 arguments (2 given)
Хорошо, достаточно справедливо. Я проверяю (автоматически сгенерированную) документацию и некоторый пример кода в Интернете и обнаруживаю, что он также хочет целое число размер. Сказал и сделал (мне нравится, как они это делают, я думаю, это, по крайней мере, датированный код в примере).
В любом случае, новый аргумент; новая ошибка:
TypeError: in method 'SndObj_PushIn', argument 2 of type 'float *'
Я не испытывал вообще в C++, который я считаю, это библиотеки «родной» (простите мое отсутствие надлежащей терминологии) язык, но я уверен, что я взял что он хочет иметь float array/vector в качестве второго аргумента (первый из которых - self). Тем не менее, я с трудом справляюсь с этим. Разве это не то, что у меня уже есть float array/vector? Я также, среди прочего, пробовал использовать float вместо float32 в первой строке и float (32768) в четвертом случае безрезультатно.
Любая помощь, предложение или отзыв будут очень благодарны!
EDIT: Стала неуверены поплавка вектора/части массива и снова пошел к авто-документы:
int SndObj::PushIn ( float * vector,
int size
)
Так что я бы сказал, что по крайней мере, C++ хочет флоат массив/вектор, хотя Конечно, я могу ошибаться в оболочке python.
UPDATE По просьбе PRUNE (в о том, что сообщение об ошибке не просит вектор поплавка, но говорят, что это ошибка), я попытался inputing различного числа (INT, int32 и т.д. .) вместо векторов. Однако, видя, что я все еще получаю то же сообщение об ошибке и сохраняю EDIT выше, я бы сказал, что на самом деле он должен быть флоат-вектором.
UPDATE2 После некоторых намеков из saulspatz я изменил заголовок вопроса и теги, чтобы лучше сформулировать свою проблему. Я сделал еще один поход по этому же пути, но я еще не извлек ничего полезного.
UDATE3 решаемые
Благодарит Вас за быстрый ответ! Это действительно объяснило бы многое! Тем не менее, я все равно получаю то же сообщение об ошибке ... Я также проверил массив, для какого типа он содержался, чтобы убедиться, и неудивительно, что это _int32_. Я также пытался с _int_, но это не имело никакого значения. – JohanPI