클라이언트에 대해 몇 가지 오디오 프로그래밍을하고 있는데 이해가 안되는 문제가 있습니다.목표 C 변수 값이 보존되지 않습니다.
CoreAudio에서 반복적으로 호출되는 렌더링 콜백이 있습니다. 이 콜백 안에는 다음이 있습니다.
// Get the audio sample data
AudioSampleType *outA = (AudioSampleType *)ioData->mBuffers[0].mData;
Float32 data;
// Loop over the samples
for (UInt32 frame = 0; frame < inNumberFrames; frame++) {
// Convert from SInt16 to Float32 just to prove it's possible
data = (Float32) outA[frame]/(Float32) 32768;
// Convert back to SInt16 to show that everything works as expected
outA[frame] = (SInt16) round(next * 32768);
}
예기치 않은 반올림 오류가 없음을 나타내는 예상대로 작동합니다.
다음으로하고 싶은 것은 작은 지연을 추가하는 것입니다. 나는 클래스에 전역 변수를 추가
즉
Float32 last = 0;
그럼 내가 하나의 프레임 지연 얻기 위해이 변수를 사용하는 @implementation 선 아래 :
이// Get the audio sample data
AudioSampleType *outA = (AudioSampleType *)ioData->mBuffers[0].mData;
Float32 data;
Float32 next;
// Loop over the samples
for (UInt32 frame = 0; frame < inNumberFrames; frame++) {
// Convert from SInt16 to Float32 just to prove it's possible
data = (Float32) outA[frame]/(Float32) 32768;
next = last;
last = data;
// Convert back to SInt16 to show that everything works as expected
outA[frame] = (SInt16) round(next * 32768);
}
이 시간은 라운드 거기를 이상한 오디오 왜곡.
내가 잘못하고있는 것을 볼 수 없어! 모든 조언을 크게 주시면 감사하겠습니다.
저는 이것이 오디오 문제이고 C 문제는 아니라고 생각합니다. 모든 변수의 값을 기록하고 도움이되는지 확인하십시오. 결론에 도달하기 전에 항상 기록하십시오. – Linuxios
이것은 스레딩 문제 일 수 있습니다. 코드가 항상 같은 스레드에서 실행되는지 확인하십시오. 즉, NSLog (@ "thread : % @", [NSThread currentThread]). 그렇지 않은 경우 잠금/뮤텍스를 사용하여 전역을 보호해야합니다. – EricS