OpenAL
-
[openAL] #10. 여러 소리 재생시켜보기 - 3LeetCode 2021. 10. 27. 16:52
저번과제는 1) 256개보다 더 많은 사운드를 재생시켜보는것 2) 256개의 각기다른 주파수의 효과음을 효율적으로 만들어내는 것. 두가지였다. 1번에 대해서는 찾고 찾아봤지만 불가능한것으로 밝혀졌다. openAL 내부의 한계인것으로 보인다. 하긴 내가 원하는만큼 재생을 시키려면 최소 10000개 이상의 소리를 재생시켜야할텐데.. 이건 나중에 해결방법을 더 찾아봐야겠다. 2번에 대해서는 한가지소리로도 어느정도 가능한것으로 보였다. 생각해내야할 것은 256개의 소스에 아주짧은 소리를 넣어 그것을 여러번 교체해 발생시키는것. 시간이 조금 소요될 수 있지만 현재로써 가능한 방법. 다른 방법은 하드웨어를 늘리거나 생각지못한 새로운 방법을 찾아내는것이다. 다 온 줄 알았는데 아직 갈길이 멀다.
-
[openAL] #10. 여러 소리 재생시켜보기 - 2개발일지 2021. 10. 26. 17:17
어제 주어진 과제는 두가지였다. 1) 256개보다 더 많은 사운드를 재생시켜보는것 2) 서로 각기 다른 소리로 stereo로 합성되지 않게 하는것 이 중, 2번이 당장 해결가능할 것으로 보여 진행하였다. 각기 다른 소리를 얻어내려면 효과음을 얻은 사이트를 뒤져 다른 소리들을 얻는 방법이 있을 것이다. 하지만 이럴 경우 원하는 소리들을 많이 얻기에는 불가능해보인다. 고로 다른 방법을 찾았다. 직접 효과음을 만들방법을.. 검색해보니 효과음제작 프로그램을 찾을 수 있었다. https://wolfy.tistory.com/15 무료 효과음 이제 찾지말고 직접 만들어 쓰자! 효과음 제작 프로그램 [Bfxr] 안녕하세요 !! 다들 여러가지 이유로 효과음이 필요할 때가 있는데요 저 같은 경우에는 게임 만들 때마다 어울..
-
[openAL] #9. 여러 소리 재생시켜보기개발일지 2021. 10. 25. 17:24
저번에 알맞은 효과음을 찾는게 관건이라 하였는데, 대충 수정을 해서 거슬리지도 않고 퍼지지도 않는 소리를 만들었다. 그 후 3d 공간에서 여러가지 소리를 재생시켜보았다. Source 를 여러개 만든 뒤, 같은 개수만큼 Buffer도 만들고 같은 효과음을 올려놓았다. 처음에는 두개로 시작하였다. 두 개의 소리를 켜보니 크게 구분가지가 않았다. 방향키를 이용해 하나는 왼쪽, 하나는 오른쪽으로 옮겨보았더니 그냥 Stereo라 인식이 된것같이 방향성이 딱히 느껴지지 않았다. 또 한가지, x,y,z 좌표가 내가 생각하는 것과 다르게 느껴진 것 같았다. 이를 알아내기 위해서는 AL_ORIENTATION을 살펴봐야헀다. alGetSourcefv 를 이용해 AL_ORIENTATION을 확인해보니 기본적인 ORIENTA..
-
[openAL] #8. 방향키로 소리 움직이게 하기개발일지 2021. 10. 21. 16:17
기존 튜토리얼에 있는 모듈들을 가지고, 방향키로 조작할때마다 그 방향으로 소리가 움직이도록 구현해보았다. 사운드는 stereo가 아닌 mono형식이어야만 적용된다. 기본 토대코드는 튜토리얼 코드를 참고하면 되고, 아래와 같이 GetAsyncKeyState를 이용하여 소리의 방향을 조절했다. while (1) { if (_kbhit()) { if (GetAsyncKeyState(VK_LEFT)) pos[0] -= increase; if (GetAsyncKeyState(VK_RIGHT)) pos[0] += increase; if (GetAsyncKeyState(VK_UP)) pos[1] += increase; if (GetAsyncKeyState(VK_DOWN)) pos[1] -= increase; } al..
-
[openAL] #7. 소리 재생 예제 만들기개발일지 2021. 10. 8. 16:40
동영상 강의와 Guide를 토대로 아주 간단하게 사운드를 재생하는 예제를 만들어보았다. 버퍼에 사운드파일 정보를 입력하는 부분은 동영상강의를 참고했는데 계속 갖다 써야겠다. position으로 이곳저곳 위치를 조절도 해보았다. velocity는 왜인지 먹히지 않았고, 다음에는 stream으로 계속 위치가 바뀌도록 해봐야겠다. #include #include #include #include #include int main() { ALCdevice *device = alcOpenDevice(NULL); printf("Opened %s .\n", alcGetString(device, ALC_DEVICE_SPECIFIER)); ALCcontext* context = alcCreateContext(device, ..
-
[openAL] #6. Guide 읽기 - 4 [에러 핸들링]개발일지 2021. 10. 8. 13:41
에러 핸들링 OpenAL의 에러는 언제든지 alGetError로 확인할 수 있다. alGetError는 호출됐을때 OpenAL의 에러를 초기화한다. 따라서 OpenAL을 사용하며 모든 중요한 단계에서는 가장 먼저 alGetError를 호출해 주는 것이 일반적이다. 그 후 중요한 동작이 끝난 후, alGetError로 에러를 확인해주면 된다. 에러코드의 종류는 아래와 같다. 에러코드 설명 AL_NO_ERROR 현재 에러 없음. AL_INVALID_NAME bad name(ID)가 함수에 들어옴. AL_INVALID_ENUM 유효하지 않은 enum value가 함수에 들어옴 AL_INVALID_VALUE 유효하지 않는 값이 함수에 들어옴 AN_INVALID_OPERATION 요청된 동작이 유효하지 않음 AL..
-
[openAL] #5. Guide 읽기 - 3 [소스 스트리밍 및 도플러 효과]개발일지 2021. 10. 8. 13:28
https://www.openal.org/documentation/OpenAL_Programmers_Guide.pdf 소스에 버퍼 올리기 (Queuing) 끊김 없이 연속으로 음원을 streaming 하기 위해서는 버퍼를 queuing 하는 것이 필요하다. 버퍼를 queuing 하기 위해서는 가장 먼저 버퍼와 소스가 정상적으로 생성되어 있어야한다. 그리고 버퍼를 소스에 붙이기 위해 alSourcei를 사용하지 말아야 한다. 대신, alSourceQueueBuffers와 alSourceUnqueueBuffers가 사용된다. alSourceQueueBuffers를 이용해 Buffer를 소스에 올리고, alSourcePlay로 재생한다. 소스가 재생되는 동안에도 alSourceUnqueueBuffers를 이용..