3
기본 오디오 지연을 구현하고 싶습니다.하지만 쓰레기는 매우 분명합니다.하지만 그걸 발견 할 수는 없습니다 ...이 오디오 지연을 작동시키는 방법은 무엇입니까?
오디오는 다음과 같은 버퍼를 통해 처리됩니다. 런타임에 결정됩니다.
나는 포인터에 뭔가 끔찍한 일을하고 있다고 생각하고, 다른 코드를 살펴 보았습니다.하지만 그들은 모두 "불완전한"것으로 보입니다. 항상 초보적인 것입니다. 아마 내 코드에서도 놓칠 수 있습니다.
// 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++;
}
}
아무도 나에게 무엇이 잘못 되었습니까?
안녕하세요 - 잊어 버렸습니다. 문제는 for 루프에 있습니다. 이 코드는 .dll을위한 것입니다 - 오디오 플로팅을 스트리밍하려면 -> float - pinInput1.getBuffer()는 표준 호출 규칙입니다. 버퍼는 원형 지연 버퍼 -> .h 파일에서 float 버퍼 [65536]로 초기화됩니다. –
당신이 옳았어요! p는 제대로 초기화되지 않았습니다 - 둘 다 r이 아니 었습니다! 그들은 "캐주얼 (casual)"을 위해 1- 샘플 딜레이가 필요하기 때문에 별도의 인텐시이션이 필요했습니다. 나는 바보 같은 바보 ;-) 당신의 도움에 감사드립니다! –