gpt4 book ai didi

c++ - 如何创建指向与 VST 音频缓冲区相同的指针数组的指针?

转载 作者:搜寻专家 更新时间:2023-10-31 01:47:04 25 4
gpt4 key购买 nike

在 VST 规范中,多 channel 音频数据缓冲区被传递......

MyClass::ProcessDoubleReplacing(double **inputs, double **outputs, int frames)
{
//and accessed like this...
outputs[channel][sample] = inputs[channel][sample]
}

我想创建一个类似的“二维指针数组”,但收效甚微。我可以创建一个简单的指针并循环读取/写入值....

double* samples;
samples[0] = aValue;

....但是我正在举办一个速成节,试图实现一些能让我...

samples[0][0] = aValue;

实现它的正确方法是什么?

最佳答案

double* samples;
samples[0] = aValue;

这真的很糟糕。 :( 请不要这样做!“样本”只是指向您内存中某处的指针。它指向的内 stub 本没有分配,但是你正在写入这个内存......

您可以从堆或堆栈中分配一 block 内存。但是,堆栈有大小限制(在您的编译器设置中配置) - 因此对于较大的 block (如音频数据),您通常会从堆中分配它。但是你必须小心,你不会从堆中泄漏内存 - 堆栈内存由变量的范围自动管理,因此更容易开始。在 C/C++ 中,您可以像这样从堆栈分配内存:

double samples[512];

然后你可以做这样的事情:

samples[0] = aValue; // change value of 1st sample in sample buffer with 512 elements

double* pointerToSample = samples[255]; // point to 256ths sample in the sample buffer
pointerToSample[127] = aValue; // change value of 384ths sample (256+128) in our sample buffer with 512 elements

等等...但是如果你只是这样做,

double* pointerToSample;
pointerToSample[127] = aValue;

您实际上是在写入未分配的内存!你的指针指向某处,但它后面没有分配的内存。小心这个!如果 samples 变量已经超出范围,也永远不要访问 pointerToSample:否则不再分配 pointerToSample 指向的内存。

要在 C++ 中从堆中分配内存,可以使用动态关键字 new(分配内存)和 delete(之后释放内存)。

double *samples = new double[512];

将为您的示例数据分配一 block 内存。但是在使用它之后,你必须手动删除它 - 否则你会泄漏内存。所以就这样做:

delete[] samples;

完成后。

最后但同样重要的是回答你的问题如何创建一个二维数组来调用方法 ProcessDoubleReplacing()

int main(int argc, char ** argv){
/* create 2 dimensional array */
int** samplesIn = new int*[44100];
int** samplesOut = new int*[44100];
for(int i = 0; i < 44100; ++i){ // 1s @ 44.1Khz
samplesIn[i] = new int[2]; // stereo
samplesOut[i] = new int[2]; // stereo
}
/* TODO: fill your input buffer with audio samples from somewhere i.e. file */
ProcessDoubleReplacing(samplesIn, samplesOut, 44100);

/* cleanup */
for(int i = 0; i < 44100; ++i) {
delete [] samplesIn[i];
delete [] samplesOut[i];
}
delete [] samplesIn;
delete [] samplesOut;

return 0;
}

关于c++ - 如何创建指向与 VST 音频缓冲区相同的指针数组的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19808953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com