새로운 기능 Objective-C ...IOS/OpenAl 소리 간섭
OpenAl을 사용하고이를 복사 한 다음 테스트하는 방법을 소스 코드에서 발견했지만 간섭이있는 소리가 들렸습니다. 코드를보고 무엇이 잘못되었는지 말할 수 있습니까?
ALCcontext *context = NULL;
ALCdevice *device = alcOpenDevice(NULL);
if (device)
{
context = alcCreateContext(device, NULL);
alcMakeContextCurrent(context);
}
NSString *path = [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"caf"];
AudioFileID fileID = 0;
NSURL *url = [NSURL fileURLWithPath:path];
OSStatus result = AudioFileOpenURL((CFURLRef)url, kAudioFileReadPermission, 0, &fileID);
if (result != 0)
NSLog(@"Faild to load file at path:%@",path);
UInt32 fileSize = 0;
UInt32 propSize = sizeof(UInt64);
OSStatus result1 = AudioFileGetProperty(fileID, kAudioFilePropertyAudioDataByteCount, &propSize, &fileSize);
if (result1 != 0)
NSLog(@"Cannot get size of file!");
unsigned char *buffer = malloc(fileSize);
OSStatus result2 = noErr;
result2 = AudioFileReadBytes(fileID, false, 0, &fileSize, buffer);
AudioFileClose(fileID);
if (result2 != 0)
NSLog(@"Cannot load data from file!");
ALuint bufferId = 0;
alGenBuffers(1, &bufferId);
alBufferData(bufferId, AL_FORMAT_STEREO16, buffer, fileSize, 44100);
free(buffer);
ALuint sourceId = 0;
alGenSources(1, &sourceId);
alSourcei(sourceId, AL_BUFFER, bufferId);
alSourcef(sourceId, AL_PITCH, 1.0f);
alSourcef(sourceId, AL_GAIN, 1.0f);
alSourcei(sourceId, AL_LOOPING, AL_TRUE);
alSourcePlay(sourceId);
, alBufferData (오디오 데이터의 사본을 만든다 :
여기 OpenAL에 사용하기위한로드 오디오 데이터의 예이다. 단순히 기존 버퍼에 바인드하려면 alBufferDataStatic (OpenAL의 Apple 확장)을 사용해야합니다. – Karl
아, 답변을 수정 해 주셔서 감사합니다. 나는 alBufferData()와 alBufferDataStatic()이 같은 방식으로 작동한다고 생각했다. 흠, 그때 무엇이 잘못 될지 확실하지 않습니다. – james82345