所以我觉得谷歌已经厌倦了在这方面帮我。在
到目前为止,我一直在尝试用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)
在原始代码中是:
^{pr2}$这给了我一个错误
TypeError: SndObj_PushIn() takes exactly 3 arguments (2 given)
好吧,很公平。我检查了(自动生成的)文档和web上的一些示例代码,发现它还需要一个整数size。说了又做了(我喜欢他们的方式,我猜至少是,示例中的过时代码)。在
总之,新参数;新错误:
TypeError: in method 'SndObj_PushIn', argument 2 of type 'float *'
我对c++一点经验都没有,我相信c++是这个库的“本机”语言(请原谅我没有合适的术语),但是我很确定我已经了解到它想要一个浮点数组/向量作为它的第二个参数(第一个参数是self)。然而,我很难做到这一点。我不是已经有一个浮点数组/向量了吗?我还尝试过在第一行使用float而不是float32,在第四行使用float(32768),但都没有效果。在
任何帮助,建议或建议将不胜感激!在
编辑: 对浮点向量/数组部分不太确定,再次转到自动文档:
int SndObj::PushIn ( float * vector,
int size
)
所以我认为至少c++需要一个float数组/向量,尽管我对python包装器的理解仍然是错误的。在
更新 根据Prune的请求(说错误消息不是要求浮点向量,而是说这是错误),我尝试输入不同的整数(int,int32,等等)向量。但是,考虑到我仍然得到相同的错误消息,并记住上面的编辑,我认为它实际上应该是一个浮点向量。在
更新2 在saulspatz的一些提示之后,我改变了问题的标题和标签,以便更好地阐述我的问题。我也根据这个做了进一步的谷歌搜索,但还没有找到任何有用的东西。在
UDATE3已解决
我真的没有回答你的问题,但我有一些信息给你,这些信息太长了,不适合发表评论,我认为这些信息可能会有用。我查看了最新版本sndobj2.6.7的源代码。在SndObj.h中,
PushIn
的定义是很明显,
size
是要推送的元素数。(我假设这是数组中的元素数,256是正确的。)float*
表示指向float的指针;in_vector
只是一个标识符。我读到错误消息的意思是,当函数期望一个指向float的指针时,它收到了一个float。在C++程序中,可以通过传递浮点数数组的名称传递一个指向浮点的指针,尽管这不是唯一的方法。很抱歉,我不知道python扩展是如何编程的。在我看来,
obj.PushIn(sine,256)
看起来是对的,但这是一个天真的观点。也许有了这些信息,你可以制定另一个问题(或者找到另一个标签),这将吸引那些知道在C/C++中编写Python扩展的人的注意。
我希望这有帮助。
实际上,问题恰恰相反:PushIn接受一个整数数组。错误消息是抱怨您给了它floats。试着用这个代替打电话给普欣
然后输入int_sine而不是sine到PushIn。
所以终于成功地让它工作起来了(在非常友好的包装作者的帮助下)!
原来在sandbox库中有一个floatArray类,用于将float数组传递给c++函数。我猜他们在婚礼之后也包括了-测试.py写的让我大吃一惊。
功能代码:
相关问题 更多 >
编程相关推荐