1

유니티 MIDI 작곡 프로그램 개발 일지 24

유니티 MIDI 작곡 프로그램 개발 일지 24

노아의 블로그

    목차
반응형

흠! 어제의 이론대로면 가능할것 같았는데 실패하였다. 

 

일단 계속 디버깅을 통해서 타고들어갔는데, 심각한 문제를 발견

 

생각지도 못한 델타타임을 변환해 주는 함수가 잘못되었던것... 지금까지 두자릿수를 넘지 않은 델타타임을 적용해서 눈치를 못챘다;;  

 

여기서 거꾸로(MSB 부터 LSB) 델타타임을 쌓았는데 Reverse를 안해주어서 계속 거꾸로 들어가서 이벤트를 이상하게 인식하는 문제였다.

 

 

그러면 array로 변환하기 위해서 Getbyte함수를 써서....  

 

근데 또 생각해보면 BitConverter.GetBytes는 시스템 엔디안 방식에 따라 다르게 나온다고 되어있으니,

convertDelta를 넣으면 리틀 엔디안방식에서는 거꾸로 나올것이고 빅 엔디안 방식에서는 그대로 나올것.

 

그렇다면 빅 엔디안일때 Reverse를 해주는게 맞음

 

근데 이렇게 할 경우, 저번에 발생한 공백의 문제 생김....(4바이트를 채우지 못한 칸은 다 0으로 처리됨)

예를 들어서, 240이라는 값을 델타타임 가변 바이트 규칙에 맞게 변환시키고 GetByte함수를 실행하면

 

129,112,0,0 이라는 바이트 배열이 나온다. 근데 이 0이 왜 위험하나면 int로 변환할때 0까지 포함되서 이런식으로 될 수도 있음

 

 

? 근데 뭔가 이상함을 느낌 .. 다시 다시

 

위에 GetByte함수는 멀쩡함.. 엔디안에 상관없이 뒤집기 필수 하지만?

 

뒤집는다면 이렇게 됨... 이러면 리틀 엔디안 방식에서는 0이 작은자리부터 시작이니까 0,0,112,129

 

즉 81700000 이 되겠지. 그니까 뒤집기 전에 0을 날리는 작업 필요! --> 해결은 같았지만 원인은 잘못분석했다.

 

너무 헷갈리네;;

 

 

이렇게 체크 된 바이트 배열에?

 

Reverse를 해준다면.. 112,127이 되니까 81 70 이 될것.

 

저 CheckGetBytes 함수를 좀 수정했는데 

여기에 지장이 또 가니까 수정

델타타임을 계산할때는 Bigendian 방식이니까 뒤집어서 읽으면 됨! 굿.

반응형