BLOG main image
분류 전체보기 (344)
NWC Consulting (1)
서비스 (173)
출판 (169)
일반 (0)
200,270 Visitors up to today!
Today 26 hit, Yesterday 50 hit
daisy rss
2012.07.24 15:41

 

Audacity is a popular sound recorder and audio editor.

 

시스템의 목적은 아키텍처에 영향을 미칠 수 있습니다. 아키텍처에 영향을 미치는 목적을 아키텍처적으로 중요한 목적이라고 합니다.

Aacity의 중요한 목적으로 다음을 제시합니다. 사실 이는 RSM Smarteasy(http://rsmer.tistory.com/27) 개발에 있어서도 원하는 부분이라 관심을 갖고 본문의 내용을 읽어 보았습니다. 하지만 원하는 내용은 나오지 않는군요.   

One goal is that its user interface should be discoverable: people should be able to sit down without a manual and start using it right away, gradually discovering its features.

 

이 장에서는 다양한 대안들과 근거는 약하지만, 문제와 해결책 중심으로 설명하고 있습니다. 따라서 정리는 문제 해결책 중심으로 하겠습니다.

 

Adacity에 요구되는 모든 부분을 구현하기 보다는 이미 존재하는 것들은 외부 라이브러리로 사용하기로 합시다. 외부 라이브러리들은 제어하기 어려운 것들이 때문에 새로 개발하는 것들과 구분할 필요가 있습니다. 레이어로 이들을 분리합시다.  

선택적으로 사용되는 외부 라이브러리들도 있기 때문에 플러그인 방식을 지원하기로 합시다.

Adacity는 레이어는 아래 그림과 같습니다.  

 

 

오픈 소스 개발이기 때문에 개발에 활용할 수 있는 시간에 제한이 있습니다. 따라서 처음부터 아키텍처링하는데 시간을 많이 사용할 수 없습니다. 따라서, 해당 시점에서 기능 추가나 변경이 어려운 것과 같은 문제가 있다고 판단되면 아키텍처를 점진적으로 개선해 나가는 방식을 사용하도록 합시다.

 

wxWidget을 가지고 다이얼로그를 만들다 보니 복잡하고 중복된 부분도 많습니다. 개발 과정에서 발견하게 되는 일반화된 패턴을 지원하여 좀 더 쉽고 단순하게 다이얼로그들을 만드는 방법을 제공하도록 합시다. 그리고 이를 ShuttleGui라고 합시다.

wxWidget으로 오디오를 편집하는 복잡한 패널을 만들어 보니 크기를 줄이거나 패널내의 위젯을 이동하니 깜빡거림등이 생깁니다. 이를 해결하기 위해 Flyweight 패턴을 사용하여 경량 위젯들을 만듭시다. 이 위젯들을 구성해서 패널을 만들고 이를 TrackPanel이라고 합시다.

Audacity는 레코딩할 때 PortAudio로 부터 데이터 패킷들을 받고, 재생을 위해 PortAudio에 패킷들을 보냅니다. 여러 가지 처리가 동시에 일어납니다.. 어떤 것은 자주 일어나고 어떤 것은 적은 양을 데이터를 보내기도 하고, 많이 보내는 것도 있습니다. 시간이 중요한 것도 있고 그렇지 않은 것도 있습니다. 이 문제를 해결하기 위해 버퍼를 둡니다.

한 시간 정도로 긴 시간동안 레코딩된 오디오를 편집하기 위해 부분을 삽입하거나 삭제하려고 할 때 시간이 오래 걸리는 문제가 있습니다. 이를 해결하기 위해 큰 파일은 1MB 미만의 작은 파일로 나누고 이를 관리하는 마스터 파일을 둡시다. 마스터 파일은 XML 파일로 확장자는 .aup로 합시다. 이와 같은 방식으로 처리하는 것을 BlockFiles라고 합시다.

고객은 Audacity에 실시간 효과를 줄 수 있기를 원합니다. 실시간 효과를 오디오 파일 전체에 반영하려고 하니 실시간 효과를 주고 나서 사용자는 오랜 시간 대기해야 하는 문제가 발생합니다. 이를 해결하기 위해 오디오 효과가 재생될 때 필요시(on demand)에 계산될 수 있도록 합시다.

 

요약 부분에 아키텍처에 있어 중요한 두 가지 이야기를 하고 마무리 하고 있습니다.

Structural decisions are wider ranging than deciding how to structure new features. A decision about what not to include in a program can be as important. It can lead to cleaner, safer code.

Structural decisions also are driven by plans for future growth

저작자 표시 비영리 변경 금지
신고
Mickey | 2012.08.08 11:32 신고 | PERMALINK | EDIT/DEL | REPLY
무엇을 넣을 것인가가 아니라, 무엇을 뺄것인가에 대한 결정이 중요하다는 말...
스티브 잡스가 인용했던 "Simplicity is the ultimate sophistication." 이 떠오르네요...
비단 SW 만이 아니라 우리 인생에 무엇이든지 다 해당되는 사항 같습니다.
Name
Password
Homepage
Secret

티스토리 툴바