내 응용 프로그램에서는 일반적으로 5 개의 버퍼와 5 개의 소스를 사용하지만 일부는 위아래로 다릅니다. 모든 것이 처음부터 잘 작동하지만 잠시 후 일부 유형의 리소스 누출이있는 것처럼 보이므로 소리가 적고 소리가 적습니다. 15 분 정도 달리면 모든 소리가 사라집니다. 며칠 동안 내 코드에서 버그를 찾았으며 리소스 누출이 다른 곳에서 발생했다고 추측합니다. Pseudo :OpenAL은 잠시 후 작동을 멈 춥니 다. (iOS)
context = alcCreateContext(device, attributes);
alcMakeContextCurrent(context);
alutInitWithoutContext(0, 0);
...
10: buffer = alutCreateBufferFromFileImage(data, len);
...
alGenSources(1, &sid);
alSourcei(sid, AL_SOURCE_RELATIVE, AL_FALSE);
alSourcef(sid, AL_ROLLOFF_FACTOR, 0.2f);
alSourcei(sid, AL_BUFFER, buffer);
...
alSourceStop(sid);
...
alDeleteSources(1, &sid);
alDeleteBuffers(1, &buffer);
...
goto 10
각 호출마다 OpenAL 오류가 있는지 확인하지만 아무 것도보고되지 않습니다. 또한 일시 중지/응용 프로그램을 이동 이력서 코드를 추가 해봤에/배경에서, 그래서 같은 :
// -> background
alcMakeContextCurrent(0);
alcSuspendContext(context);
// -> foreground
alcMakeContextCurrent(context);
alcProcessContext(context);
하지만 그건 눈에 띄는 효과를 (I 배경에 응용 프로그램을 누르면, 다음을 철수하지 않습니다 다시 위로). 이 버그는 iPad2에서 이전 iOS 버전을 실행하는 iPhone3GS와 같은 최신 iOS 버전과 동일합니다. 무엇을해야할까요?
편집 : 디버그 빌드에서 alSourcePlay (sid = 5260)에서 -1이 반환됩니다. 하나 들어, -1은 내가 알 수있는 한 유효한 반환 코드 중 하나가 아닙니다. 일부 오래된 구현은 AL_INVALID를 -1로 정의하는 것으로 보입니다. 이를 무시하고 구현에 따라 alGenSources()에서 sid가 alDeleteSources()를 수행 할 때 재활용되면 5260이 매우 높습니다. 누가 샘플 ID를 삭제할 때 재활용되는지 또는 카운터인지 알 수 있습니까?