알라딘

헤더배너
상품평점 help

분류

이름:크리스 애덤슨 (Chris Adamson)

최근작
2015년 11월 <iOS 코어 오디오 프로그래밍>

크리스 애덤슨(Chris Adamson)

미시간 주의 그랜드 라피드에 살고 있는 독립적 작가이자 편집자이며 개발자다. 현재는 iOS와 맥 개발에 집중하고 있으며 『iOS SDK Development』(Pragmatic Programmers, 2012)를 공동 저술했다. 『QuickTime for Java:A Developer's Notebook』(O'Reilly Media, 2005)를 저술했으며, 『Swing Hacks』(O'Reilly Media, 2005)의 공저자다. 이전에는 java.net과 ONJava.com의 편집자였다. 맥과 iOS의 사용자 인터페이스와 디지털 미디어 개발에 집중한 회사인 Subsequently and Furthermore, Inc.를 세워 컨설팅과 출판을 한다. 또한, 디지털 미디어 소프트웨어 개발 관련 블로그(www.subfurther.com/blog)를 운영 중이다. 이전 경력은 CNN 헤드라인 뉴스의 작가/협력 프로듀서였고, 수년에 걸쳐서 11과 1/2개의 맥을 용케 소유해왔다.  

대표작
모두보기
저자의 말

<iOS 코어 오디오 프로그래밍> - 2015년 11월  더보기

맥 컴퓨터는 훌륭한 미디어 컴퓨터이며, 아이폰은 지금까지도 최고의 아이팟이다. 하지만 이렇게 훌륭한 이유는 무엇인가? 어떻게 몇 가지 초기 iOS 앱이 아이폰을 가상 악기로 변모시켰음에도, 아이폰 외의 모바일 플랫폼 개발자들은 그저 MP3 플레이어의 스킨을 바꾸는 데만 만족하고 있을까? 왜 맥 컴퓨터를 그렇게 많은 디지털 미디어 전문가들이 선택하며, 맥의 어떠한 비밀이 Bias Peak, Logic, Soundtrack Pro와 같은 앱을 가능하게 하는가? 코어 오디오가 그 해답이다. 코어 오디오는 애플이 맥 OS X과 iOS의 디지털 오디오를 동작하기 위해서 제공하는 로우레벨 API다. 코어 오디오는 동시적으로 다중 채널 디지털 오디오의 많은 흐름을 처리하기 위한 API와 캡처(마이크)와 출력(스피커와 헤드폰)을 위한 오디오 하드웨어의 인터페이스를 제공한다. 코어 오디오는 마이크로폰에서 캡처된 압축되지 않은 오디오 데이터를 직접 처리하고, 효과를 넣고, 다른 오디오와 합성하고, 더 나아가 스피커로 출력하거나, 파일 시스템에 작성하거나, 네트워크 통신으로 전달할 수 있게 압축된 형태로 변환하는 앱을 작성할 수 있게 한다. 완전한 앱을 개발하는 것이 아닌 경우 코어 오디오는 맞춤형 효과를 작성하고, 오디오 유닛이라 불리는 플러그인에 묶어 둘 수 있게 한다. 오디오 유닛을 통해 효과를 코어 오디오 기반의 앱에 추가할 수 있다. 애플은 맥 OS X 10.0에서 코어 오디오를 소개했고, 결국 클래식 맥 OS의 일부였던 SoundManager를 대체했다. 코어 오디오는 C 기반의 API이기 때문에 오브젝티브C로 작성된 코코아(Cocoa) 앱과 C++로 작성된 카본(Carbon)과 함께 사용될 수 있다. 개발자들은 이러한 프레임워크를 생략하고, 일반적인 C POSIX 커맨드라인 실행 파일에서 코어 오디오를 호출할 수 있다(사실 대부분의 예제가 이런 식으로 작성됐음). 코어 오디오는 C로 작성됐고, 호출되기 때문에 매우 좋은 성능을 보인다. 이런 성능 효과는 매 초 수십만 개의 오디오 샘플을 처리해야 할 때 매우 중요하다. 코어 오디오는 오디오 스트림의 아이디어에 기반한다. 스트림은 오디오 신호를 나타내는 데이터의 연속을 의미한다. 소리는 시간에 기반하여 변하기 때문에 데이터도 시간에 따라 다르다. 코어 오디오 전반적으로 오디오와 상호작용하는 주요 수단은 이러한 스트림을 가지고 이루어진다. 즉 파일이나 입력 장치에서 스트림을 얻고, 혼합하고, 다른 형식으로 변경하고, 출력 장치로 전달한다. 이런 동작을 하면서 개발자 코드는 코어 오디오를 호출하거나, 스트림이 처리할 데이터가 있을 때마다 코어 오디오에서 콜백 호출을 받는다. 이런 동작은 다른 미디어 API에서 본 것과는 다른 형태다. HTML 5 태그나 Ios AVAudioPlayer와 같은 간단한 미디어 플레이어는 오디오 근원(파일이나 URL)을 오디오의 불투명한 상자로 취급한다. 즉 오디오를 재생, 일시정지, 중지할 수 있고, 오디오의 다른 부분으로 건너뛸 수 있지만, 상자의 내용을 확인하거나 데이터로 무엇인가를 할 수는 없다. 코어 오디오를 훌륭하게 만드는 것은 데이터로 '무엇인가를 하는' 것에 관련됐기 때문이다. 이렇게 쉽다면 얼마나 좋겠는가. 코어 오디오는 맥 OS X과 아이폰에서 가장 다루기 힘든 프레임워크 중의 하나로 정평이 나 있다. 이 수준에서 동작하도록 선택하는 것은 많은 도전 과제에 직면함을 의미하기 때문이다. 즉 원시 형태의 샘플 스트림으로 작업하거나, 코어 오디오의 매우 비동기적인 프로그래밍 모델로 작업하거나, 코어 오디오가 스피커나 헤드폰으로 데이터를 전달해야 할 때 코어 오디오에 항상 데이터를 전달하도록 충분히 빠르게 구동하는 등의 도전이 이에 해당한다. 서드파티 앱을 최초로 지원한 아이폰 OS 2.0에서 코어 오디오가 유일한 미디어 프레임워크라는 사실은 별 도움이 되지 않았다. 단순히 파일을 재생하길 원하는 개발자들은 C로 직접 샘플을 처리하는 스트림 수준까지 가야만 했다. 그러한 수준에서 작업이 필요하다면 좋지만, 더 간단하고, 추상적인 작업이 필요했던 개발자들은 공개적으로 많은 불만을 토로했다. 코어 오디오는 제멋대로 무자비하게 동작하거나, 둔하게 동작하지는 않는다. 다루고 있는 문제 영역의 특성상 복잡할 수밖에 없다. 개인적으로 데이터베이스에서 웹 앱 구매를 저장하는 것은 샘플의 스트림에서 소리를 모델링하고, 수학적인 조작을 통해서 효과를 넣고, 결과를 초당 수백에서 수천 번씩 하드웨어로 전달하는 것에 비하면 시시한 것이다. 그리고 사용자에게 결과가 즉시 반환됐다고 느끼게 하기 위해 충분히 빨라야 한다. 무엇인가를 제대로 빠르게 한다는 것은 본질적으로 도전적이다. 즉 이 책의 마지막을 읽고 있을 때 즈음에는 코어 오디오가 개발자에게 제공하는 부분에 대해 감사한 마음이 들 것이다. 그리고 그 순간에 스스로 뭔가 멋진 것을 할 준비가 됐을 것이라는 생각이 든다.

가나다별 l l l l l l l l l l l l l l 기타
국내문학상수상자
국내어린이문학상수상자
해외문학상수상자
해외어린이문학상수상자