최근에 개인적으로 마이크를 통해 프로세스를 하는 프로젝트를 개발중 가장 난해했던 부분은

마이크로 입력받은 오디오 정보를 프로젝트의 용도로 파싱하는 부분이었다.

사운드 관련 라이브러리들도 입력에 관련된 패러다임들을 가지고있는 편이 아니기에

대충 이곳저곳 알아보니 스팩트럼 분석법이라는게 있더라..

스팩트럼
시간 영역의 신호를 퓨리에 변환하여 주파수 영역에서 재구성하여 각 주파수 성분에 대한 성분의 값을 그래프로 나타낸 것을 말한다. 스팩트럼은 복소수 성분으로 나타내어지므로 여러 종류의 스팩트럼이있다.


실시간으로 입력받는 오디오 정보를 가져와 버퍼에 저장하는 부분에서

이산 퓨리에 변환을 고속으로 계산해주는 고속 퓨리에 변환(FFT)  알고리즘을 사용한뒤

스팩트로그램을 계산하는 방법으로 프로젝트에서 원하던 주파수및 기타 정보들을

추출해낼수있었다.

 

Posted by 랜스.

Leave your greetings here.

뭐 게임프로그래밍 하다보면 자료구조나 알고리즘에 익숙해야 한다는 소리를 많이 들었을것이다.
뭐 기초가 탄탄하면 분명히 좋을것이나 배움을하는데 응용과 함께하는것보다 좋은예는 없다고본다.
 예를 들면 트리를 배운다치면 책으로 이론을 읽었다.. 대충 어떤건지만 알게된다..
머릿속에있는걸 정리해서 외부로 추출해보면(공책에 정리한다던지) 제대로 설명해놓질못한다.
 반대로 절두체컬링이나 LOD같은걸 공부하면서 트리를 공부하게된다면 왠만한경우엔 대부분이
그것을 잘 이해하는것같다.

그런  이유로 이번에 정리하는 포스팅에서 살펴볼것은 순환큐라고 도 불리는
원형 큐(circular Queue)이다. 뭐 아는 사람도 있고 모르는 사람도있고
기본적인 구현방법이라던지 이론적인것은 네이버나 구글에 쳐서 대충 읽길바란다.

자!! 원형큐의 특징을 생각해보면서 밑의 두 사진을 보자.

문제를 하나 내보겠다 밑의 두사진에서 볼수있는것중에서 한가지 공통점을 찾아보아라
resize

대부분 알법한 온라인 게임 2개 서든어택과 아이온의 스크린샷이다.
이 두개의 스크린샷에서 발견할수있는 공통점이 원형큐를 이용해 만들수있는 것중하나이다.
(물론 다른방식으로도 구현가능하다)

자 모두 눈치를 챈사람도있고 모르겠는 사람도 있고 모르겠는사람도있을것이다.
정답은...... 자국이 남는다는 것이 공통점이다. 서든같은경우 총알 자국이고 아이온의 경우에는
발자국이라고할수있겟다. 예를 들면 노드를 밑에 처럼 구현할수있다.
<

이러한 자국같은경우에는 그릴수있는 갯수에 제한이되있다. 서든어택에서
한벽에 대고 계속 총질을 하다보면은 어느순간부터 총질을할떄마다 젤처음 남은 자국부터
사라져가는것을 볼수있을것이다. 왜냐하면 게임이시작되고나서 생기는 모든 흔적들을 저장하고
그리게 된다면 게임이 장기전이될시 저장하고 그려야할 정보들이 넘쳐나게 되어 원활한 게임진행을
방해할수도있다.(성능상으로)

 그렇기에 대부분의 3D게임에서 이런 자국노드들의 최대 갯수 N을 정해놓고 새로운것을 추가하면
제일 오래된것을 삭제하는 방식의 순환큐를 구현하여 쓰는것이다.

뭐 다른 용도로도 쓰이겠지만 내가 아는건 이것뿐이라 여기까지만 정리해놓도록 하겠다.

Posted by 랜스.

Leave your greetings here.

  1. Comment RSS : http://lancekun.com/tc/rss/comment/119
  2. Virats 2009/08/31 15:55  Modify/Delete  Reply  Address

    그 흔한 버퍼링도 순환큐죠.

  3. 아!!! 2011/04/15 11:59  Modify/Delete  Reply  Address

    이런 원리였군요..