増田です。

Cの大きなfloat配列をrubyのArrayに高速に変換したいと思っているのですが、何かよい方法はありますか?
今のところ以下のように、rb_ary_storeを利用しているのですが、もっと効率のいい方法があるのではないかと思いまして・・

VALUE wrap_ofSoundGetSpectrum(VALUE self, VALUE nBands)
{
	VALUE result;
	int len;
	int i;
	float *spec;
	
	len = NUM2INT(nBands);
	spec = ofSoundGetSpectrum(len);
	
	result = rb_ary_new2(len);
	for (i = 0; i < len; i++) {
		rb_ary_store(result, i, rb_float_new(spec[i]));
	}
	
	return result;
}

また、見よう見まねで以下も試してみたのですが、これだとBus Errorが出てしまいました・・
間抜けな質問ですみませんが、何卒よろしくお願い致します。

VALUE wrap_ofSoundGetSpectrum(VALUE self, VALUE nBands)
{
	VALUE result;
	VALUE *values
	int len;
	int i;
	float *spec;
	
	len = NUM2INT(nBands);
	spec = ofSoundGetSpectrum(len);
	
	values = ALLOC_N(VALUE, len);
	for (i = 0; i < len; i++) {
		values[i] = rb_float_new(spec[i]);
	}
	result = rb_ary_new4(len, values);
	free(values);
	
	return result;
}