我在代码中使用DSP,它是目标C ++和C的混搭。
CoreAudio框架为我提供了音频样本数据缓冲区作为浮点指针
e.g。 float *bufferData = (float *)malloc(sizeof(float) * 1024);
我要求对样本数据进行处理的C函数需要一个 double 类型的指针。
double returnAValue(double *sampleData, int samplecount);
在将浮点指针传递给此函数之前,将浮点指针转换为双指针的最有效CPU方法是什么?
答案 0 :(得分:4)
Accelerate框架提供的众多功能之一是vDSP_vspdp
,您可以这样使用:
float * singleBuf;
float * doubleBuf = malloc(nElements * sizeof(double));
vDSP_vspdp(singleBuf, 1, doubleBuf, 1, nElements);
如果您在Mac上进行任何类型的DSP编程,您可以通过了解vDSP,CBLAS和其他Accelerate框架API来节省大量时间并获得大量效率。这些API倾向于通过处理器的向量单元(SSE等)并了解内存提示,因此它们往往比您通常手动编码的效率更高。
答案 1 :(得分:3)
更改指针类型不会更改基础数据的类型。如果您尝试将两个希望缓冲区中包含不同内容的包链接在一起,则必须将数据从一个缓冲区复制到另一个缓冲区,然后进行转换。
所以你的问题是:给定一个充满浮动的缓冲区,你如何将它转换为一个充满双打的缓冲区?一个简单的for循环可能是你最好的选择。