我想要实现一个基本的音频延迟 - 但我得到的只是垃圾,可能非常明显 - 但我似乎无法发现它...
通过在运行时确定的缓冲区处理音频。
我认为我正在对指针做一些可怕的错误,尝试查看其他一些代码 - 但它们似乎都“不完整”总是缺少基本的东西 - 也许我的代码中也错过了。
// Process audio
// 1
void Gain::subProcessSimpleDelay( int bufferOffset, int sampleFrames )
{
// Assign pointers to your in/output buffers.
// Each buffer is an array of float samples.
float* in1 = bufferOffset + pinInput1.getBuffer();
float* in2 = bufferOffset + pinInput2.getBuffer();
float* out1 = bufferOffset + pinOutput1.getBuffer();
// SampleFrames = how many samples to process (can vary).
// Repeat (loop) that many times
for( int s = sampleFrames; s > 0; --s )
{
// get the sample 'POINTED TO' by in1.
float input1 = *in1;
float feedback = *in2;
float output;
unsigned short int p, r;
unsigned short int len;
len = 600;
// check at delay length calculation
if (len > 65535)
len = 65535;
// otherwise, a length of 0 will output the input from
// 65536 samples ago
else if (len < 1)
len = 1;
r = p - len; // loop
output = buffer[r];
buffer[p] = input1 + output * feedback;
p++;
*out1 = output;
// store the result in the output buffer.
// increment the pointers (move to next sample in buffers).
in1++;
in2++;
out1++;
}
}
有谁能告诉我出了什么问题?
答案 0 :(得分:2)
您尚未初始化p
。此代码中需要注意的其他事项: -
buffer
来自哪里,或者其他什么可能写给它。如果在你的代码运行之前它是垃圾,你到处都会遇到垃圾,因为你做的第一件事就是从中读取。pinInput1.getBuffer()
等类型的回复。如果它们返回char*
,并且您只知道它恰好指向一个浮点数组,则需要在进行任何指针算法之前将结果转换为float*
,以确保你前进到数组中的下一个浮点数,而不是数组的下一个字节。