所以我觉得Google已经厌倦了试图帮助我解决这个问题。
我一直在尝试使用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()只需3个参数(给定2个)
好吧,公平。我检查(自动生成的)文档和一些Web上的示例代码,发现它还需要一个整数 size 。说完了(我喜欢他们的方式,我猜测的是至少,在例子中注明日期代码)。
无论如何,新论点;新错误:
TypeError:在方法' SndObj_PushIn'中,类型'浮动*'
的参数2
我在c ++中根本没有经验,我相信这是图书馆"本地人" (请原谅我缺乏适当的术语)语言,但我很确定我已经知道它想要一个浮点数组/向量作为它的第二个参数(第一个是 self ) 。但是,我很难完成这件事。我已经拥有了浮点数组/向量吗?除此之外,我还尝试在第一行使用 float 而不是 float32 ,在第四行使用 float(32768)无济于事。
非常感谢任何帮助,建议或提示!
编辑: 不确定浮动矢量/数组部分并再次转到自动文档:
int SndObj::PushIn ( float * vector,
int size
)
所以我说至少c ++想要一个浮点数组/向量,尽管我对python包装器当然还是错的。
更新 根据Prune的请求(说错误消息不是要求浮动向量,但是说那是错误),我尝试输入不同的整数( int , int32 等)矢量。但是,看到我仍然收到相同的错误信息并记住编辑时,我说它实际上应该是一个浮动向量。
UPDATE2 在从saulspatz获得一些提示后,我已经更改了问题标题和标签以更好地表达我的问题。我也根据这个进行了一些谷歌搜索,但还没有挖出任何有用的东西。
UDATE3 解决
答案 0 :(得分:1)
实际上,问题恰恰相反:PushIn采用整数数组。错误消息抱怨您给它浮动。试试这个代替你对PushIn的调用
app.config(function($routeProvider){
$routeProvider
.when('/home',
{
templateUrl: 'views/home.html',
controller: 'homeCtlr',
test:'{{test}}',
})
.otherwise({
redirectTo : '/home'
})
})
然后将int_sine而不是正弦输入到PushIn。
答案 1 :(得分:0)
所以最终设法让它工作(在非常友好的包装作者的帮助下)!
事实证明,sandbox-library中有一个floatArray类,用于将float数组传递给c ++函数。我猜他们在写完numpy-test.py之后就把它包括在内了,这让我陷入了困境。
功能代码:
from sndobj import SndObj, SndRTIO, SND_OUTPUT, floatArray
from scipy import pi, sin
# ---------------------------------------------------------------------------
# Test PushIn
# Create 1 frame of a sine wave in a numpy array
sine = floatArray(256)
for i in range(256):
sine[i] = float(32768*0.5 * sin((2 * pi * i) / 256))
obj = SndObj()
obj.PushIn(sine,256)
outp = SndRTIO(1, SND_OUTPUT)
outp.SetOutput(1, obj)
# Repeatedly output the 1 frame of sine wave
duration = outp.GetSr() * 2 # 2 seconds
i = 0
vector_size = outp.GetVectorSize()
while i < duration:
outp.Write()
i += vector_size