1

작곡 프로그램 개발 일지 6

작곡 프로그램 개발 일지 6

노아의 블로그

    목차
반응형

일단 내 머릿속이 너무 정리가 안되어서 리프레시 한 다음

아침에 버스를 타면서 다시 생각 해 보았다.

 

순서를 생각 해 본다면.. 결국 수의 7 비트를 잘라서 앞에 머리(최상위 비트)만 붙이는 느낌임....

 

이분의 글을 좀 봤는데 예시 케이스가 있었다. (좋은 자료 감사합니다.)

https://osoriselfmanage.tistory.com/23

 

 

이분의 블로그를 보면 5305ticks = A9 39라는 내용이 있다. 일단 이 케이스에 맞춰서 해 보기로 함.

 

먼저 5305를 7 bit씩 나누어야 한다.

 

일단 5305를 2진수로 표현하면 0001 0100 1011 1001 이다.

 

어떻게 나눌까 고민을 했는데 결국

 

수와 0111 1111을 and 하면 7비트 씩 나누는게 가능하다.

 

0001 0100 1011 1011에

0111 1111을 and 연산 하면 

 

8번째 이상 비트는 이후는 모조리 0이 보장된다 따라서 7 비트를 추출할 수 있다.

 

추출한 값에 최상위 비트를 부여한다. 

 

만들어진 바이트를 누적시킨다. 즉 Left Shift 8 한다음 Or 연산을 해서 누적

 

그 다음 읽은 7비트 데이터를 버린다. 즉 right shift 7 하면 버리는것이 가능함.

 

 

다시 단계를 정리하자면 1.자르고 2. 합체하고 3. 버리고 가 된다. 이것을 이제 직접 코드로 구현 해 보자.

일단 반복할 횟수를 지정한다. (얼마만큼 7비트를 자를것인지 계산)

 

첫 번째 데이터는 무조건 다음 데이터가 없다는 보장이 있다.

따라서 첫 번째 데이터를 먼저 처리한 후, 나머지 데이터를 처리하는 형식으로 갔다.

 

127은 이진수로 0111 1111이다. 첫 번째 바이트는 무조건 0이기에 127을 & 연산한다.

 

그리고 num을 Shift 해서 읽은 7 bit를 없앤다. 

 

마찬가지로 밑 for문도 자르고, 넣는 방식이다.

 

LeftShift 8 로 8Bit의 공간을 확보하고 거기에 num | 128 연산한 값을 | 해서 넣는다. 

 

여기서 128은 10000000이다. 따라서 최상위 비트가 모두 1이 되게 된다. 

 

변환이 완료되었으면 GetByte함수로 int 형을 Byte 배열로 받는다.

 

디버깅을 해 보면 

 

 169,57이 있다. 이것을 16진수로 변환 해 보면

 

A9 , 39 가 잘 나온다.. 

 

앞에 for문을 좀더 개선해 보면

다음과 같은 코드를 짤 수 있다..

 

 

이제 잘 되나 검증을 해 보자.

 

5305에 1을 더 붙여봄.

 

 

 

 

이진수로 바로 변환을 해 보면 !! 

 

1000 0011 1001 1110 0011 1011 이다.

 

지금 53051을 넣어서 Deltatime을 구성하는 규약(?) 에맞춰서 나온 값이 이 값이다.. 따라서 이것을 다시 변환을 해 보자면

 

 

1100 1111 0011 1011이 나온다.

 

53051을 이진수로 변환 해 보자. 

 

1100 1111 0011 1011 이다. 즉 같다!!!!

 

이렇게 쉬운 것을 계속 어렵게 생각해서 시간 지연이 발생한 것 같다. 

 

비결은 노트에 생각을 정리했다. 원래 정리를 했었는데 요즘 안했더니 그런듯 ㅠ 이제 진짜 작곡을 해 보아야겠다.

반응형

'GAME > Unity' 카테고리의 다른 글

작곡 프로그램 개발 일지 7  (0) 2023.10.19
작곡 프로그램 개발 일지 5  (0) 2023.10.18
작곡 프로그램 개발 일지 4  (0) 2023.10.17