BPM 계산 방식과 배속의 구현 방법

Unity3D 2012. 7. 18. 11:29
반응형

출처: http://beatup.springnote.com/pages/3277191


BPM : beat per min 의 준말.  즉 분당 비트수로써 1분당 1/4박자의 갯수이다.

- 1분당 BPM별 비트 갯수

 BPM1/4 박자1/8박자 1/16박자 1/32박자 
 60 BPM 60 개 120 개 240 개 480 개
 100 BPM 100 개 200 개 400 개 800 개
 130 BPM 130 개 260 개 520 개 1040 개
 155 BPM 155 개 310 개 620 개 1240 개


즉, 우리가 만들 게임은 1/32박자 (이하 32비트) 게임이므로
155bpm시 1분당 최대 1240개의 노트가 들어간다.



이제 노트 하나당 간격을 알아보도록 하자.

60bpm에서 4비트는 1초마다 1비트가 올라가므로 최대 60개가 나온다.
그럼 1/8박자는 0.5초마다, 16박자는 0.25초마다, 32박자는 0.125초마다 1비트가 오른다.

130bpm의 32비트는 최대 1040개이므로 비트 하나당 간격을 알아보자.
소수점자리까지 사용하므로 총 8자리까지 쓰고 이하는 반올림을 기준으로 한다.

130 / 60 = 2.16666667
0.125 / 2.1666 = 0.05769230

 


노트는 0.05869230초마다 나오며 이 값이 맞는지 최대 비트인 1040개와 계산을 해보자

 0.05769230 * 1040 = 59.999992


얼추 60이 맞는것을 알수 있다.
더 낮은 자리까지 계산을 하면 정확해지며 이게 정확하지 않다면 음악이 재생시간이
길어질수록 비트는 조금씩 밀리거나 당겨지는 현상이 있을수가 있으므로 주의하기 바란다.


이 문제를 해결하려면 10초마다 실행하는 타이머를 주어 다음 10초간의 비트의 위치를
부분적으로 계산하면 될듯싶다.

60bpm시 부분 계산 방식

 플레이시간읽는 비트 
 0:00 0 - 80 
 0:10 80 - 160
 0:20 160 - 240
 0:30 240 - 320
 0:40 320 - 400
 0:50 400 - 480



화살표(노트) 이동 속도의 구현
60bpm은 매우 느린 속도이다.
120bpm은 60bpm의 2배의 속도이다.
180bpm은 60bpm의 3배의 속도이다. 

 bpm 픽셀당이동속도 
 1 bpm 1 초
 60 bpm 0.00166667 초
 120 bpm 0.00083333 초
 180 bpm 0.00055556 초


픽셀은 구현이 어떤식으로 되는지 모르기에 예를 든것이다.
구현 방법에 따라 적절히 하도록 바람.




 



여기까지 bpm 계산 방법을 알아 보았다.
이제 배속의 구현을 알아보도록 하자.

먼저 bpm 공식에 의거하여 노트는 기본적인 이동속도를 가진다.
이것은 1배속이 된다.

60 bpm이 0.00166667 초에 1픽셀을 이동하는데
만약 2배속일경우엔 0.00083333 초에 1픽셀을 이동한다.

그러나 배속은 비트에 대해 절대 영향을 끼치지 않으며 단순히 이동속도만을 제어한다.

반응형
: