어떻게든 템포를 뽑아내서 스크롤하는 것까지는 성공했다. 하지만 이제 진짜 막 시작했을 뿐이다. 우린 아직 설명회를 듣지도 않았고, 제대로된 기획서도 없으며 핵심 기능 중 구현 성공한 것은 한 개도 없다. 그럼에도 불구하고 계속해서 성과를 거두고 있는 것만은 확실하다.

템포의 유동적 처리

작업 페이지에도 적어뒀지만 변속하는 곡에 대한 템포의 유동적 처리가 난관이지 않을까 싶다. 애초에 미디 포멧의 Tick을 기준으로 템포 변화 이벤트의 타이밍을 저장해두었을 터인데, 이를 어떻게 다시 가공해서 유니티에서 처리를 하느냐는 말이다.

사실 아이디어가 없지는 않다. 애초에 미디에서의 Tick이라는것 자체가 컴퓨터에서 일정 시간을 단위로 신호를 보내는건데 C#의 기본 시간 관련 라이브러리들이나 유니티 라이브러리를 활용한다면 변환자체는 가능하지 않을까 싶다. 다만 정확도면에서 보장은 할 수 없을 것이고 이게 문제가 되지 않을까 싶긴 하다.

애초에 DryWetMidi API 문서에도 TickGenerator와 같이 Tick 발생과 관련되어 보이는 클래스들에 대한 문서도 존재하기 때문에 아직 더 찾아보는게 맞지 않을까 싶다. 아주 자세히..

피아노 입력 처리

템포는 변속곡을 제외하는 가라를 친다고 생각하고 넘어가자. 일단 그럼 중요한건 이제 피아노 입력 처리다. 참고했던 레퍼런스 영상에서는 임의의 타이밍에서 쳐야하는 노트가 존재하는 경우 해당 노트들을 모두 칠 때까지 스크롤이 멈춰있다가 모두 치면 다시 스크롤이 재게되는 방식이었다.

노트 오브젝트를 월드에 생성할 때 활용했던 노트 클래스 배열을 이용하면 구현할 수 있지 않을까 싶다. 애초에 노트 클래스에 저장된 타이밍 정보들을 이용해서 오브젝트를 배치했던 거니까 특정 타이밍에 멈추고 다시 시작하는 것도 엄청 어려운 일은 아니지 않을까 싶다.

다만 이 부분도 템포의 유동적 처리와 비슷한 맥락으로 그 타이밍을 어떻게 유니티에서 써먹을 수 있게 변환하느냐의 문제가 될 것 같다.