[App 개발] 10 bytes extended 형 데이터 처리.
본문
계속해서 Aiff 파일을 공부하고 있는데요.
헤더에 들어가있는 short, long, char 등의 데이터형의 데이터는 쉽게 읽고 쓸수가
있는데, Wave 화일과는 달리 Aiff 파일은 Sample Rate 를 기록하는 데이터의 데이터형이
10 byte extended 형 이라고 되어있어서요. 10바이트 짜리 데이터형은 표준 C++ 에는
존재 하지 않는것 같은데, 이럴경우 어떻게 해야 할까요?
헤더의 내용을 읽고 쓰기위해 헤더를 한개의 구조체로 만들고 이구조체의 포인터와
구조체의 사이즈를 조사해서 read(), write() 함수를 사용하고 있는데요,
이 구조체안에 10바이트 크기의 데이터형으로 되어있는 샘플레이트 를 포함시키려면
어떻게 해야할지..
데이터형을 직접 만들어야 하나요? 그러려면 어떻게 해야하나요? Wave 화일에서는
샘플레이트가 롱 형으로 되어있는데, 사실 롱형의 데이터만으로도 샘플레이트를 표현하기
충분하다 생각하는데, 왜 Aiff 는 10바이트나 되는 데이터형을 사용하는지 그것도 사실
이해가 안되고요...
초보적인 질문이지만, 고수님들 알려주세요....
그럼.
최신글이 없습니다.
최신글이 없습니다.
댓글목록 2
hongjuny님의 댓글
10 byte extended 형은 IEEE 754 포맷입니다. 처음 두 바이트가 exponent, 나머지 8 바이트가 fraction 이지요. 애플은 가만 보면 처음에 데이터 형을 엄청 넉넉하게 잡아 놓습니다. 다른 좋은 예가 퀵드로우 같은 놈도 컬러 테이블이 한 색상당 32비트씩 할당되어 있지요. 절대로 32비트 곱하게 4 의 코덱이 쓰일 것 같지 않은 세상에서 말입니다. 그런데, 그 덕분에 크게 덕을 본 경우가 지난 1999 > 2000 년에 있었던 밀레니엄 버그의 홍역을 매킨토시는 치르지 않았다는 점이죠. 그 때 애플은 호언장담 했죠. 몇만년이 되어서야 문제가 생길거다. 그리고 그 때를 대비해서 우리는 이미 준비하고 있다. (헐~)
어쨌든, 10 바이트 형태를 만약 다른 컴퓨터에서 써야 한다면 형변환을 해 주어야 합니다. 가장 만만한 놈은 더블 형이죠.
그런데, 매킨토시에서 사용하는 데이터 청크인데, 매킨토시용 컴파일러가 지원하지 않을 리가 없죠? 상식적으로 생각해서 말입니다. ^^ 네. 매킨토시 컴파일러에는 10 바이트 데이터 타입이 있습니다. 표준 C 는 아닙니다. 따로 형이 구현되어 있겠지요? 어쨌든 그것이 "extended80" 이라는 데이터 타입입니다.
저, 그리고 김태헌님께서 어떤 목적으로 프로그램을 작성하시는지 잘 모르겠어서 지난번에는 확실히 잘 답변을 못 해드렸습니다. 이번에도 좀 그렇긴 합니다만... 단순히 AIFF 포맷을 활용하는 방법을 공부하시는 것이라면 데이터 청크의 structure 를 따로 선언해 주셔도 됩니다만, 소프트웨어 구현이 더 큰 목적이라면... 카본 라이브러리에 AIFF 루틴이 있습니다. 그리고 지금 선언하시는 struct 들도 AIFF.h 에 이미 선언되어 있습니다. (이미 아시는 걸 제가 헛다리 짚고 있는 건가요? ㅡㅡ; ) 카본 라이브러리를 먼저 살펴보시면 소프트웨어 구현에 큰 도움이 되실 것 같은데...
김태헌님의 댓글
아! 그런것이 었군요! 답변 정말 감사합니다. Aiff를 공부했던건, 파일포멧에 대해 알고 싶기도 했고, 그걸 통해서 프로그래밍도 공부하고 하고 이런 목적이었습니다. 자꾸자꾸 헤더 스트럭쳐를 처다보니까 이제 스트럭쳐가 대충 머리속에 박혀 있는거 같아서 좋아요... 말씀하신대로 이제 전문가들이 만들어놓은 소스들을 보면서 비교해봐야겠습니다. 답변 정말 감사합니다.
아 아 나 도 공 부 좀 잘 했 으 면 좋 겠 다.............^^