Strict Standards: Non-static method Soojung::addReferer() should not be called statically in /home/lifthrasiir/sites/sapzil.info/soojung/settings.php on line 79

Warning: Cannot modify header information - headers already sent by (output started at /home/lifthrasiir/sites/sapzil.info/soojung/settings.php:79) in /home/lifthrasiir/sites/sapzil.info/soojung/classes/Counter.class.php on line 63

Strict Standards: Non-static method Entry::getEntry() should not be called statically in /home/lifthrasiir/sites/sapzil.info/soojung/entry.php on line 51

Strict Standards: Non-static method Soojung::entryIdToFilename() should not be called statically in /home/lifthrasiir/sites/sapzil.info/soojung/classes/Entry.class.php on line 182

Strict Standards: Non-static method Soojung::queryFilenameMatch() should not be called statically in /home/lifthrasiir/sites/sapzil.info/soojung/classes/Soojung.class.php on line 55
TokigunStudio3 | 블로그: 어젯밤에 미디 파일 분석을 완전히 마쳤습니다

내용으로 바로 넘어 가기


TokigunStudio3

228 / 3282   


더 이상 이 블로그는 운영되지 않습니다. 새 블로그로 가 주세요.

어젯밤에 미디 파일 분석을 완전히 마쳤습니다

2004/08/20 PM 04:58 | [옛글] 컴퓨터 삽질 기록 | 4 comments | 0 trackbacks | AllBlog: vote, to pocket

일러두기: 이 글은 옛날에 사용하던 엔비 블로그에서 가져 온 것으로, 원문은 여기에서 볼 수 있습니다.

오랜만에 컴퓨터 한참 붙잡고 삽질 해 봤습니다 ;)

사실 제가 미디 포맷 가지고 삽질을 시작한 건 올해 초였습니다. 당시에는 그냥 재미였는데, 하다 하다 보니까 마비노기에서 무려 베이직의 play 명령 비스무리한 문법의 악보-_-를 사용한다는 걸 알게 되었고, 결국 최종 목표를 미디 파일을 마비노기에서 사용할 수 있는 형태의 악보로 만든다-_-는 것으로 잡게 되었습니다.

하지만 아무리 미디 스펙을 붙잡고 개삽질을 해 봐도 전혀 떠 오르는 게 없었습니다. (정확하게는 MIDI가 아니라 SMF, 즉 Standard MIDI Format이라고 합니다. Non-MIDI Event를 포함한 거죠.) 음... SMF의 구성에 대해서 잠시 설명해야 이야기를 계속할 수 있을 것 같으니까 간단하게 SMF가 어찌 이루어져 있는 지 말해보도록 합시다.

SMF는 크게 MThd라는 문자로 시작하는 "헤더"와 MTrk라는 문자로 시작하는 "트랙"들로 이루어져 있습니다. (헤더는 맨 처음에 딱 하나 오지만 트랙은 여러 개 올 수 있습니다.) 헤더 얘기는 제끼고 트랙을 설명하자면, 이 트랙 데이터에는 Event들과 거기에 필요한 인자(argument)들, -- 즉 장치에 보낼 미디 명령들 (어떤 음을 재생하거나, 중단하거나 하는...) -- 그리고 delta-time이라 불리는, 다음 이벤트가 실행되기 전까지 얼마나 기다려야 하는 가를 나타내는 숫자가 나타납니다.

그렇게 1월에 삽질을 하다가 포기한 후, 최근에 php용 mp3/ogg/wma 태그 분석 라이브러리인 libmp3, libogg, libwma를 만들게 되었습니다. (아직 클래스로 정리되진 않았습니다만...) 이 쯤까지 와서 제가 가지고 있는 거의 모든 음악의 태그 정보를 읽고 쓸 수 있게 되었는데, 미디 파일은 도저히 분석해 봐도 이상하게 잘 읽히지 않는 것이었습니다. (delta-time이 수십만 tick을 먹지 않나...) 혹시나 내가 또 잘못 읽고 넘어 간게 있나 해서 SMF 문서들을 뒤적이다가... 치명적인 문장을 하나 발견했습니다.

One subtlety which can cause confusion is running mode. This is where the actual midi command is omitted, and the last midi command issued is assumed. This means that the midi event will consist of a delta-time and the parameters that would go to the command if it were included.

그러니까, 만약 미디 이벤트에서 명령이 빠져 버리면 이전에 사용된 명령을 계속 사용한다는 것입니다! 미디 이벤트에서 명령은 0x80 이상의 문자이고, 그 다음에 오는 글자는 무조건-_- 0x80 미만의 문자이기 때문에, delta-time 하나 처리하고 0x80보다 작은 문자가 오면 이전 이벤트로 인식하고 처리해야 하는 것이었습니다! 저는 그것도 모르고 0x80 미만의 문자가 오면 계속 delta-time으로 처리하고 있었던 겁니다. -_-;;;;

아무튼 그렇게 해서 .tokinized MIDI Analyzer는 깔쌈하게 성공한 것이었습니다 ;ㅁ; 이제 오늘 밤을 새서 마비노기 악보를 미디로 변환하는 프로그램을 만들어 봐야 겠습니다. 네. 별로 안 남았습니다! ;)


덧. 예전에도 말했지만 저는 삽질 대마왕입니다. T_T

TrackBack URL: http://sapzil.info/soojung/trackback.php?blogid=411

Comment: Reidin (2004/08/20 PM 06:12)

으흐 제 경우에는 심파일 같은 데에서 미디 파일을 통상적인 악보로 표시해 주는 프로그램을 받아서 그걸 마비노기의 코드로 옮깁니다. 어릴때 피아노를 좀 쳐서 악보 보는데는 이골이 나서요...--;;;;

Comment: 토끼군 (2004/08/20 PM 06:22)

전 제 정신으로 그런 짓 못 합니다 -_-; 쉬운 거라도 프로그램 안 만들면 사족을 못 써서... (역시 삽질 대마왕이 될 자격이 충분하군)

Comment: NovaKim (2004/08/21 AM 02:18)

오옷. 와이프가 좋아할 이야기네요.
물론 미디를 악보로 변환하는 프로그램이 필요한 것이지만.

잘 만드셔서 빰빠라바, 배포하시길 ;-)

Comment: 토끼군 (2004/08/22 PM 05:33)

마비노기 악보가 옛날 베이직 play 명령에서 사용되는 그것과 거의 같기 때문에... 흐흐흐...

Copyright (c) 1995-2005, Kang Seonghoon (Tokigun).