-
[openAL] #4. Guide 읽기 - 2개발일지 2021. 10. 7. 20:02728x90
https://www.openal.org/documentation/OpenAL_Programmers_Guide.pdf
리스너 설정
모든 context마다 자동으로 한개의 리스너가 생성된다.
alListener[f, 3f, fv, i]와 alGetListener[f, 3f, fv, i] 와 같은 함수들은 리스너를 설정하는데 사용된다.
값 타입 설명 AL_GAIN f, fv master gain 값. (>0). AL_POSITION fv, 3f, iv, 3i X,Y,Z 위치 AL_VELOCITY fv, 3f, iv, 3i 속도 벡터 AL_ORIENTATION fv, iv at와 up벡터로 나타나는 orientation. 리스터 설정 예제 코드
ALfloat listenerPos[] = { 0.f,0.f,0.f }; ALfloat listenerVel[] = { 0.f,0.f,0.f }; ALfloat listenerOri[] = { 0.f, 0.f, -1.f, 0.f, 1.f, 0.f }; // Position alListenerfv(AL_POSITION, listenerPos); if ((error = alGetError()) != AL_NO_ERROR) { DisplayALError("alListenerfv POSITION : ", error); return; } // Velocity alListenerfv(AL_VELOCITY, listenerVel); if ((error = alGetError()) != AL_NO_ERROR) { DisplayALError("alListenerfv VELOCITY : ", error); return; } // Orientation alListenerfv(AL_ORIENTATION, listenerOri); if ((error = alGetError()) != AL_NO_ERROR) { DisplayALError("alListenerfv ORIENTATION : ", error); return; }버퍼 설정
alGenBuffers로 생성된 각각의 버퍼도 각각 값을 설정할 수 있다.
alGetBuffer[f,i] 와 같은 함수들은 아래와 같은 값을 설정하는데 사용된다.
값 타입 설명 AL_FREQUENCY i, iv Hz로 표시되는 주파수(진동수,음질) AL_BITS i, iv 버퍼의 bit 깊이 (?) AL_CHANNELS i, iv 버퍼의 채널 수. >1 도 유효하나 플레이 될때 버퍼의 위치가 잡히지 않는다. AL_SIZE i, iv bytes로 표시되는 버퍼의 용량 AL_DATA i, iv 데이터가 복사된 원본 위치.
버퍼 생성 후에는 쓸모가 거의 없음.버퍼 설정 예제 코드
alBufferi(g_Buffers[0], AL_FREQUENCY, iFreq); // 버퍼 진동수 설정소스 설정
alGenSources로 생성된 각각의 소스도 값을 설정할 수 있다.
리스너와 마찬가지로 alSource[f, 3f, fv, i]와 alGetSource[f, 3f, fv, i] 와 같은 함수로 아래의 값들을 설정할 수 있다.
값 타입 설명 AL_PITCH f, fv 피치 설정 (>0) AL_GAIN f, fv 소스 gain 설정.(>0) AL_MAX_DISTANCE f, fv, i, iv Inverse Clamped Distance Model에서 최대거리를 설정할때 사용. AL_ROLLOFF_FACTOR f, fv, i, iv rolloff rate 설정. 기본값은 1.0 AL_REFERENCE_DISTANCE f, fv, i, iv 소스의 볼륨이 반이하로 떨어지는 거리 (AL_MAX_DISTANCE나 AL_ROLLOFF_FACTOR의 영향을 받기 전) AL_MIN_GAIN f, fv 최소 gain AL_MAX_GAIN f, fv 최대 gain AL_CONE_OUTER_GAIN f, fv Oriented cone (소리가 집중되는 cone) 밖에서의 gain AL_CONE_INNER_ANGLE f, fv, i, iv 소리가 집중되는 cone의 각도 (이 각도 내에선 소리가 가늘어지지 않음. degree 단위) AL_CONE_OUTER_ANGLE f, fv, i, iv 소리가 가늘어지는 cone의 각도 (degree 단위, 기본값 360) AL_POSITION fv, 3f X,Y,Z 위치 AL_VELOCITY fv, 3f 속도 벡터 AL_DIRECTION fv, 3f 방향 벡터 AL_SOURCE_RELATIVE i, iv 위치를 리스너에 대해 상대적인 위치로 나타낼 것인지의 여부 AL_SOURCE_TYPE i, iv 소스 타입. (AL_UNDETERMINED, AL_STATIC, AL_STREAMING) AL_LOOPING i, iv 루프여부 (AL_TRUE, AL_FALSE) AL_BUFFER i, iv 붙일 버퍼의 ID AL_SOURCE_STATE i, iv 소스의 현재 상태(AL_STOPPED, AL_PLAYING) AL_BUFFERS_QUEUED (READ_ONLY) i, iv 현재 소스에 쌓여있는 버퍼의 수 AL_BUFFERS_PROCESSED (READ_ONLY) i, iv 소스에 쌓여있는 버퍼중 처리된 버퍼의 수 AL_SEC_OFFSET f, fv, i, iv 재생위치를 초로 표현 AL_SAMPLE_OFFSET f, fv, i, iv 재생위치를 샘플로 표현 AL_BYTE_OFFSET f, fv, i, iv 재생위치를 바이트로 표현 소스 설정 예제 코드
alGetError(); // 에러 초기화 alSourcef(source[0], AL_PITCH, 1.f); // 소스 0의 피치를 1로 설정 if ((error = alGetError()) != AL_NO_ERROR) DisplayALError("alSourcef 0 AL_PITCH : \n", error); alGetError(); // 에러 초기화 alSourcef(source[0], AL_GAIN, 1.f); // 소스 0의 gain을 1로 설정 if ((error = alGetError()) != AL_NO_ERROR) DisplayALError("alSourcef 0 AL_GAIN : \n", error); alGetError(); alSourcefv(source[0], AL_POSITION, source0Pos); // 소스 0의 위치 설정. source0Pos는 float 배열. if ((error = alGetError()) != AL_NO_ERROR) DisplayALError("alSourcefv 0 AL_POSITION : \n", error); alGetError(); alSourcefv(source[0], AL_VELOCITY, source0Vel); // 소스 0의 속도 설정. source0Vel은 float 배열. if ((error = alGetError()) != AL_NO_ERROR) DisplayALError("alSourcefv 0 AL_VELOCITY : \n", error); alGetError(); alSourcei(source[0], AL_LOOPING, AL_FASLE); // 소스 0의 루프 여부 설정. if ((error = alGetError()) != AL_NO_ERROR) DisplayALError("alSourcei 0 AL_LOOPING true : \n", error);'개발일지' 카테고리의 다른 글
[openAL] #6. Guide 읽기 - 4 [에러 핸들링] (0) 2021.10.08 [openAL] #5. Guide 읽기 - 3 [소스 스트리밍 및 도플러 효과] (0) 2021.10.08 [openAL] #3. Guide 읽기 - 1 (0) 2021.10.07 [openAL] #2. 음악 재생하기 (0) 2021.10.06 [openAL] #1. 설치하기 (0) 2021.10.04