Beat의 처리 방안

초기 구상

처음 구상했던 비트는 온음표(마디)를 48분할, 즉 4분음표를 12분할한 00-47의 코드를 사용한다.
BMS, 케이슛에서 다 쓰는 "마디의 능동적 분할" (임의 명칭. 코드의 갯수에 따라 마디를 1/n개로 나누는 방법. 예를 들어 BMS에서 #00001:00020002 라는 코드가 있다면 00,02,00,02를 1/4마디 간격으로 보낸다.) 은 고려하지 않았고, 그냥 비트를 지정해주는 방식이다.

예) 12:24,1,00,0 - 12번째 비트, 즉 12/48마디 = 1/4마디에서 24번째 위치에 L 스텝을 놓을 것

개선안

48분할 vs 60분할 (미사용)

  • 60이 48보다 약수가 더 많다. 그리고, 약수에 5가 있기 때문에 다섯잇단음표(5비트)도 처리할 수 있다
    BMS 포맷에선 192*4분할을 사용하나, BMSON에서는 240*4분할을 사용한다. 5비트를 처리하기 위함이다.
  • 그러나 5비트 댄스라는게 있을까? 48비트도 상당히 많이 쪼갠 것이라 생각하는데, 60으로 쪼개자니 용량이 더 커질 것 같기도 하다
    • 어차피 용량 문제는 스텝이 얼마나 있느냐에 따라 갈릴거다. 따라서 별 문제 없음
    • 5박자를 고려할 필요가 없다면, 4,8,16비트로 쪼개기 쉬운 것은 48분할이다
  • 아래의 능동 분할 방식을 쓰기로 했으므로 이 항목은 쓰지 않음

변박자의 처리

변박자 처리는 간단한 비례식으로 계산 가능하다.

  • 박자란?
    • b/a = "a 분음 b 박자" 라고 읽는다. 한 마디에 a분음표가 b개 나온다는 것이다. 여기서 a는 보통 2의 거듭제곱이 들어간다. 의미를 확장해서, 마디를 a분할한 비트가 b개 들어가는 것이라 하자.
    • k-shoot mania에서는 a가 192의 약수로 들어간다. 최소 분할 단위가 192이기 때문.
    • BMS에서는 02번 채널에 박자 (마디의 길이) 를 변화시키는 float 값이 들어간다.
      #00202:0.5 는 2번째 마디에 1/2 or 2/4 or 4/8 or ... 가 들어간다는 뜻.
  • 한 마디에 들어가는 비트 * 박자 (또는 실수 단위의 인수) = 변화된 비트
  • 변박자 처리를 위해서라도 능동적 분할을 사용해야 할까?
    • 현재의 타임 코드 방식으로는 박자가 변하는 것에 제대로 대응할 수 없다 (중요)

능동적 분할의 구현 방법

해당 문서를 참고할 것

...라고 해도 굳이 위 내용처럼 복잡하게 생각할 필요가 없었다. 간단하게 bar의 시간을 BPM 기반으로 구하고, 이것을 beat의 수로 나누면 된다. 박자는 분수로 취급하여, float값으로 1bar당 시간에 곱한다. 예를 들어, 6/4박자가 나온다면 1.5를 곱하는 식.

패턴 부분 개선 1안

  • 아예 구조를 바꿔서, L, R, jump, cmd 채널을 따로 만들어 BMS와 비슷한 형식으로 써먹자
  • 또한, 레인을 16분할로 축소시키고 hex를 사용한다.
    • 빈 공간은 xx로 표시, 롱스텝은 --로 표시한다. 이러면 2글자 안에 위치와 크기의 변화를 자유롭게 넣을 수 있다.
    • 슬라이드는 64비트 간격으로
001,jump,    01xxxx01xxxx01xxxx01xxxxxxxx01xx
001,l_step,    xxxxxxxxxxxx2bxxxx09xxxxxxxx07--
001,r_step,    4dxxxxxx6fxxxxxxxxxxxxxxxx8f------
001,l_step,    ae----------------------------ae--7b------------------------7b--48xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
001,r_step,    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxae----------------------------ae--7b------------------------
  • FLOWER (STARDOM Remix) 마지막 크기 줄어드는 마커

001,jump,       xxxxxxxxxxxxxx01
001,l_step,     05----------------------05--27------------------27--05------------------05--27xxxxxxxxxxxxxxxxxx07------------------------------
001,r_step,     af----------------------af--8d------------------8d--af------------------af--8dxxxxxxxxxxxxxxxxxx8f------------------------------
002,l_step,     ----25xx
002,r_step,     ----adxx
003,jump,       0101xxxxxxxxxxxx
003,l_step,     xx27xxxxxxxxxxxx
003,r_step,     8d

다음 문제는 이것을 어떻게 파싱하느냐 이다
작성중

flower.PNG (6.6 KB) admin, 10/13/2018 08:39 PM

runningman.PNG (6.73 KB) admin, 10/13/2018 08:40 PM

flower2.PNG (6.17 KB) admin, 10/13/2018 09:18 PM