将Uint16转换为在iPhone 4上浮动

时间:2015-03-03 11:57:31

标签: iphone xcode core-audio vdsp

我正在开发一款使用简单音高感知的应用程序,它在Xcode Simulator中运行良好。应用程序在iPhone 4中加载,我可以导航应用程序,但不显示输出。我已经开始调试并发现当我将Sint16转换为float时我得到溢出错误。 我试过vDSP和一个简单的循环。

简化代码n = 1536

sampleBuffer = (SInt16*) malloc(n);
floatSamples = (float*) malloc(sizeof(float)*n);
    // Convert SInt 16 to float
for(int i = 0; i<n; i++) {
    floatSamples[i] = (float)samples[i];

}

//vDSP_vflt16(samples,1,floatSamples,1,n);

这导致

-0.000000
 -0.000000
 -0.000000
 964957789008661674961361960960.000000
 -5629971079108504200413184.000000
 -inf
 35116851871418647838720.000000
 -inf
 0.000000
 0.000000
 0.000000
 -1233.760620
 288987875649316726325339192557568.000000
 -0.000000
 -0.000000
 -0.000000
 -7508525217561044282816045485425426432.000000
 -656399043038732589927376093184.000000
 0.000000
 -0.000053
 9470091451011432448.000000
 -24555002

vDSP的类似结果
在iPhone 4s的模拟器中,一切都很好,所有的vDSP计算都能正常工作 iPhone在MacBook pro上运行ios7.1.2和xCode 6 只是在找一条线索。

1 个答案:

答案 0 :(得分:1)

代码
sampleBuffer = (SInt16*) malloc(n);
分配n个字节,而不是n SInt16个值。

您需要:
sampleBuffer = (SInt16*) malloc(sizeof(SInt16)*n);