Top

iOS 코어 오디오 프로그래밍 [녹음, 재생, 변환에서 위치기반 음향까지 오디오 앱 개발]

  • 원서명Learning Core Audio: A Hands-On Guide to Audio Programming for Mac and iOS (ISBN 9780321636843)
  • 지은이크리스 애덤슨(Chris Adamson), 케빈 아빌라(Kevin Avila)
  • 옮긴이황진호
  • ISBN : 9788960777927
  • 30,000원
  • 2015년 11월 26일 펴냄
  • 페이퍼백 | 364쪽 | 188*235mm
  • 시리즈 : 모바일 프로그래밍

책 소개

요약

이 책은 오디오 캡처, 실시간 효과 추가, MP3 재생, 가상 음악 장치, 웹 라디오, VoIP 지원 기능에 관련된 코어 오디오 프레임워크 API를 설명한다. 지금까지 만들어진 오디오 시스템 중에서 가장 정교한 오디오 프로그래밍 시스템인 코어 오디오는 단순하지 않기 때문에 이 책에서는 쉽게 설명된 예제를 통해서 녹음, 재생, 형식 변환, 오디오 유닛, 3D 오디오 MIDI 연결에 대한 지침을 제공하고, 맥과 iOS에서 코어 오디오의 프로그래밍에서 발생하는 독특한 도전 과제들을 극복하는 것을 도와준다.

이 책에서 다루는 내용

■ 코어 오디오의 놀라운 스타일과 규칙 학습
■ 오디오 큐 구조로 녹음과 재생 구현
■ 오디오 합성, 오디오 스트림에 효과 적용, 마이크에서 캡처, 여러 스트림 합성을 위한 오디오 유닛 사용
■ 코어 오디오의 도움 API로 파일 스트림 관리와 형식 변환
■ OpenAL로 3D 공간에 위치기반 오디오 생성
■ 즉석에서 오디오를 합성하기 위한 코어 MIDI 사용
■ 코어 오디오의 C 기반 환경에서 코코아와 오브젝티브C 장점 활용

이 책의 대상 독자

누가 이 책을 읽어야 하는가?
이 책의 주요 독자층은 맥이나 iOS 프로그래밍에 익숙한 경험이 있지만, 코어 오디오를 다뤄 보지 않은 프로그래머다. C를 알고 있으면 좋지만, 디지털 오디오에 대한 선행 지식은 필요하지 않다. 디지털 오디오에 관한 내용은 2장에서 다룬다. 오디오 프로그래밍에서 흥미로움을 유발하기 위해서 오디오 캡처, 실시간 효과, MP3 플레이백, 가상 악기, 웹 라디오, 보이스오버 IP 등 미디어 애플리케이션에서 무엇이 가능한지 충분한 경험을 했다고 가정한다. 프로그래머로서 이런 미디어에 대해 별다른 흥미가 없다면 루비 온 레일스 같은 책들이 꽂힌 서가를 찾아보는 편이 나을 것이다.

누가 이 책을 읽지 말아야 하는가?
자칭 ‘세상에서 가장 단련된 프로그래머’인 마이크 리(Mike Lee)는 “코어 오디오는 진지한 마술과 같다.”고 언급한 적이 있다. 이 책을 배워 나가면서 로우레벨의 API를 찾아 다니는 자신을 발견할 것이며, 이런 수준의 프로그래밍에 흥미가 없다면, 이 책은 여러분을 위한 책이 아니다. 하지만 충분히 능력을 갖춘 상태가 됐을 때 이 책을 펼쳐보는 것은 추천할 만한 것임을 명심하기 바란다. 엑스코드, C, 오브젝티브C를 알아야 하고, 헤더 파일을 읽고, 해석하는 데 어려움이 없어야 한다. 언제 무엇인가에 미친 듯이 집중하는 시점이 올지 모르고, 그때 가지고 있는 기술이 이 책을 습득하는 데 분명 많은 도움이 될 것임을 확신한다.

이 책의 구성

I부. 코어 오디오 이해
이 부분은 이 책의 전반에 사용되는 기술적인 기반을 설명한다. 어떤 코드를 작성하기 전에 많은 양의 내용을 습득하는 것은 주제에 대한 학습을 돕는다. 디지털 오디오와 코어 오디오가 제공하는 해결 방법을 이해하는 것은 차후에 나오는 부분들과 예제 코드의 이해를 위해서는 필수적이다.

1장. 코어 오디오 개요
맥이나 iOS 프레임워크로서 코어 오디오의 기본을 살펴보면서 시작한다. 즉 파일이 어디에 위치하고, 프로젝트와 프레임워크를 연결하는 방법, 도움이 필요할 때 무엇을 찾아봐야 하는지에 대해 다룬다.
API 자체의 개요로 시작한다. 순차적으로 속성 기반의 특성을 설명한다. 그리고 각각의 구조적인 단위를 간략하게 살펴본다. 즉 하이레벨의 API(오디오 큐(Audio Queue), OpenAL, 확장된 오디오 파일(Extended Audio File))에서 시작하고, 중간 수준의 API(오디오 유닛(Audio Units), 오디오 파일, 오디오 변환기(Audio Converter)로 이동하고, 로우레벨의 API(IOKit/IOAudio, HAL, iOS에서 원격 I/O)를 다룬다. 코어 오디오 코드를 작성하는 맛을 보게 하기 위해서 소리 파일에서 코어 오디오를 사용해 메타 데이터를 추출하는 간단한 애플리케이션을 작성한다.
2장. 소리 이야기
디지털 오디오의 핵심 문제는 디지털 컴퓨터에서 소리의 아날로그 파형을 나타내는 데 있다. 샘플링(sampling)이 어떻게 소리를 2진 컴퓨터의 1과 0으로 변경하는지 이야기한다. 비트율(bit rate)과 품질, 성능, 파일 크기에 대한 균형에 대해서 다룬다. 샘플링에 대해 실제적으로 이해하기 위해서 샘플별로 파일에 직접 소리 파형을 작성하고, 사람의 귀에 파형이 얼마나 다르게 들리는지 볼 것이다(실제로 들을 것이다).
가공되지 않은 연속된 비트(bit)를 가지고 있을 때, 그것을 프레임(frame)과 패킷(packet)으로 양자화할 필요가 있다. 고정 비트율과 가변 비트율의 차이점과 프레임율에 대해서도 언급한다.
3장. 코어 오디오로 오디오 처리
영어로 오디오의 개념을 이해한다면, 이제 그것을 C로 표현할 차례다. 여기서는 구현 세부사항에 대해서 언급한다. 즉 코어 오디오가 오디오 스트림(stream)을 나타내는 방법과 이러한 스트림과 작업하는 기능을 제공하는 방법을 설명한다. 파일 형식과 스트림 형식을 설명하고, 그들의 차이점을 강조한다. 그리고 코어 오디오가 어떤 형태의 오디오 형식/파일 형식 조합을 지원하는지 검사하기 위해서 예제를 작성할 것이다.
형식에 대한 설명 이후에 코어 오디오의 프로세싱 모델(processing model)로 주제를 전환하고, 코어 오디오가 어떻게 기능을 오디오 유닛으로 캡슐화하고, 이런 기능을 어떻게 흥미롭게 합치는지, 그리고 시스템을 통해 오디오 데이터를 이동하기 위해서 왜 풀 모델(pull model)을 사용하는지를 살펴본다.

2부. 기본 오디오
2부는 이전 장의 개념과 API의 실제 사용을 다루면서 시작한다. 파일 기반의 오디오 데이터를 녹음하고, 재생함으로써 파일과 오디오 시스템 사이의 데이터 흐름을 논의한다. 그리고 형식 사이의 데이터를 이동하기 위해서 트랜스코딩(transcoding) API를 살펴보고, 이것을 가능하게 하는 뒤에 숨겨진 중요한 함수를 설명한다.
4장. 녹음 왜 재생 전에 녹음을 설명하는가? 녹음이 더 쉽고, 이후에 다룰 샘플 파일을 재생하기 때문이다. 4장은 파일에서 데이터를 넣고, 빼는 하이레벨의 API를 소개하고, 그 데이터를 사용하기 위해 오디오 큐 API를 살펴본다. 기본 입력 장치에서 오디오를 캡처하는 완전한 예제를 파일에 작성한다. 그 과정에서 어려운 압축된 형식을 다룬다. 특히 형식에 기반한 매직 쿠키(magic cookies)와 임의의 형식을 위한 데이터 작성을 위해 얼마나 큰 버퍼가 필요한지 계산하는 방법을 다룬다.
5장. 재생
프로그래밍의 관점에서 녹음과 재생은 동전의 양면과 같다. 재생은 파일의 데이터를 버퍼로 옮긴다. 녹음은 버퍼의 데이터를 파일로 옮긴다.
5장은 파일에서 오디오를 읽고, 기본 출력으로 재생하는 완전한 예제를 제공한다. 다시 말해서 가변 비트율 형식을 다루는 기술을 살펴본다. 또한 오디오 큐의 속성과 파라미터로 할 수 있는 기능들을 살펴보고, 아주 많은 버퍼로 발생하는 지연에 대한 문제를 다룬다.
6장. 변환
객체지향 프로그래밍에 익숙한 사람들을 위해서 설명하자면 코어 오디오의 하이레벨 API는 상당히 로우레벨이다. 6장은 그 뒤에 숨겨진 복잡성을 다루고, 현대적인 오디오 코덱(audio codec)의 아주 상세한 부분과 표준적인 데이터로 변환하는 데 필요한 복잡성을 살펴본다. 압축된 파일을 압축 해제된 파일로 변환하는 오디오 변환기 서비스(Audio Converter Services)를 직접 사용하는 예제를 제공하고, 이 과정을 I/O와 데이터 변환을 한 번의 과정으로 합치는 확장된 오디오 파일 서비스(Extended Audio File Services)를 사용해 단순화한다.

3부. 고급 오디오 오디오 데이터를 앞뒤로 옮기는 방법을 이해하기 때문에 좀 더 화려한 기능을 배울 차례다. 오디오 데이터에 효과를 추가하는 것으로 시작해, 3D 위치기반 음향을 다루고, 성능과 로우레벨 아키텍처를 배울 것이다. 7장. 오디오 유닛: 생성기, 효과, 렌더링 코어 오디오는 오디오 유닛이라고 불리는 디지털 시그널 처리 플러그인(plug-in)을 위한 훌륭한 구조를 제공한다. 그러나 오디오 유닛은 코어 오디오 API의 흔히 사용되는 가장 낮은 수준이며, 프로그래머에게 새로운 도전 과제를 준다. 이 장은 파일과 맥 OS X 소리 합성기에서 소리를 재생하고, AUGraph API를 통해서 조율된 소리에 효과를 실행하기 위해서 오디오 유닛을 소개한다. 프로그램적으로 생성된 오디오 데이터를 오디오 유닛의 입력으로 제공하는 방법을 살펴본다.
8장. 오디오 유닛: 입력과 혼합 오디오 유닛 API와 좀 더 친숙해지도록 돕기 위해, 오디오 캡처를 실행하기 위한 IO 유닛 사용 방법을 살펴보고, 캡처된 데이터를 얻어 다른 소스를 AUGraph로 실행해보는 다소 어려운 방법을 살펴본다. 이 모든 것을 조합하기 위해 강력한 멀티채널 혼합 유닛(multichannel mixer unit)을 사용한다.
9장. 위치기반 음향
지금까지 소리에 대해서만 다뤘지만, 소리에 대한 사람의 경험은 음향에 대한 문제에 완전히 새로운 차원을 추가한다. 9장은 소리를 3D 공간의 위치와 관련 짓는 OpenAL, 3D 위치기반 음향 API를 다룬다. 루프(loop)로 시작하지만, 9장의 끝부분에서는 3D 소스에서 사운드를 추출해 마음껏 긴 스트림을 재생할 수 있을 것이다.

4부. 추가적인 주제
앞에서 대부분의 코어 오디오에 대한 내용을 다루었지만, 전부를 다룬 것은 아니다. 이 파트는 이 책의 나머지 부분과 잘 어울리지 않는 추가적인 내용을 다룬다. iOS를 다루는 장으로 시작해 MIDI 데이터를 다루는 방법을 설명하고, 코어 오디오를 확장하는 내용으로 마무리한다.
10장. iOS에서의 코어 오디오
개념적으로 아이폰에서의 소리와 매킨토시에서의 소리 사이에는 약간의 차이가 존재하지만, 이 차이는 매우 세부적이다. 10장은 제한된 하드웨어 자원에서 발생하는 제한과 예외에 대한 차이에 집중한다.
우선권이 존재하고(preemptive), 다중 근원, 다중 목적지 아이폰 환경에서 적절하게 동작하게 하기 위해서 중요한 오디오 세션(Audio Session) API에 대해서 논의한다.
11장. 코어 MIDI
뮤지션들은 악기와 디지털 음악 데이터를 처리하는 핵심인 MIDI 표준을 사랑한다. 11장에서는 코어 MIDI가 맥이나 iOS 장치와 물리적으로나 무선으로 연결된 악기 사이에서 음악 이벤트를 처리하는 방법을 살펴본다. 또한 노트와 타이밍 데이터를 소리로 변환하기 위해서 MIDI 데이터가 오디오 유닛으로 전달되는 방법을 볼 것이다.
12장. 정리
마지막 장인 12장에서는 무엇을 배웠고, 무엇이 남았는지 살펴본다. 맥 OS X 10.7(라이온)과 iOS에서 밝혀진 최신의 오디오 비트를 지적한다.

이 책은 코어 오디오가 정의한 모든 함수를 다루거나, 개념적으로 모든 것을 다루지는 않지만, 가장 많이 사용되고, 가장 중요한 주제들을 깊이 있게 다룬다. 이 책을 끝까지 읽고 난 이후에 코어 오디오가 동작하는 방식을 이해하게 될 것이며, 자신의 애플리케이션에 필요한 추가적인 기능들을 스스로 찾아서 구현할 수 있도록 준비됐다고 생각해도 될 것이다.

저자/역자 소개

지은이의 말

맥 컴퓨터는 훌륭한 미디어 컴퓨터이며, 아이폰은 지금까지도 최고의 아이팟이다. 하지만 이렇게 훌륭한 이유는 무엇인가? 어떻게 몇 가지 초기 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

이렇게 쉽다면 얼마나 좋겠는가.

코어 오디오는 맥 OS X과 아이폰에서 가장 다루기 힘든 프레임워크 중의 하나로 정평이 나 있다. 이 수준에서 동작하도록 선택하는 것은 많은 도전 과제에 직면함을 의미하기 때문이다. 즉 원시 형태의 샘플 스트림으로 작업하거나, 코어 오디오의 매우 비동기적인 프로그래밍 모델로 작업하거나, 코어 오디오가 스피커나 헤드폰으로 데이터를 전달해야 할 때 코어 오디오에 항상 데이터를 전달하도록 충분히 빠르게 구동하는 등의 도전이 이에 해당한다. 서드파티 앱을 최초로 지원한 아이폰 OS 2.0에서 코어 오디오가 유일한 미디어 프레임워크라는 사실은 별 도움이 되지 않았다. 단순히 파일을 재생하길 원하는 개발자들은 C로 직접 샘플을 처리하는 스트림 수준까지 가야만 했다. 그러한 수준에서 작업이 필요하다면 좋지만, 더 간단하고, 추상적인 작업이 필요했던 개발자들은 공개적으로 많은 불만을 토로했다.

코어 오디오는 제멋대로 무자비하게 동작하거나, 둔하게 동작하지는 않는다. 다루고 있는 문제 영역의 특성상 복잡할 수밖에 없다. 개인적으로 데이터베이스에서 웹 앱 구매를 저장하는 것은 샘플의 스트림에서 소리를 모델링하고, 수학적인 조작을 통해서 효과를 넣고, 결과를 초당 수백에서 수천 번씩 하드웨어로 전달하는 것에 비하면 시시한 것이다. 그리고 사용자에게 결과가 즉시 반환됐다고 느끼게 하기 위해 충분히 빨라야 한다. 무엇인가를 제대로 빠르게 한다는 것은 본질적으로 도전적이다. 즉 이 책의 마지막을 읽고 있을 때 즈음에는 코어 오디오가 개발자에게 제공하는 부분에 대해 감사한 마음이 들 것이다. 그리고 그 순간에 스스로 뭔가 멋진 것을 할 준비가 됐을 것이라는 생각이 든다.

지은이 소개

크리스 애덤슨(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개의 맥을 용케 소유해왔다.

케빈 아빌라(Kevin Avila)

특별한 특색이 있는 탄소화합물, 산소, 수소, 질소와 같은 화합물을 부드럽게 잘 섞어 놓은 사람 같다. 15년 이상 맥 개발 경력이 있으며, 출시 직후부터 아이폰 앱 개발을 해왔다. 애플의 엔지니어에서부터 전문적인 녹음실을 설정하는 것까지 오디오 마켓의 모든 부분을 다뤄본 경험이 있다. 현재는 집에서 속옷차림으로 커피를 마시면서 여러 고객들의 코딩 용병으로 일하고 있다.

옮긴이의 말

음악 관련 앱에 관심이 있는 독자분들은 관련 앱을 한 번쯤은 사용해 봤을 것이다. 현재 앱스토어에 등록된 음악 관련 유료 앱 중 가장 인기 있는 것은 oPcketGuitar, Drum Kit, Ocarina, Pianist, Band, Tuner Internet Radio, Beat Maker, Guitar Toolkit, Harmonica, Guitarist 등이며, 무료 앱은 Pandora Radio, Shazam, AOL Radio, Midomi, Mini Piano, iheart Radio, MixMeister Scratch, FlyCast Mobile Radio, Last.FM, DigiDrummer Lite 등이 있다. 음악과 직접적으로 관련된 앱뿐 아니라 게임에 사용되는 음악, 사람의 음성, 통화 등에 사용되는 모든 음원을 재생하는 방법이나 사용성에 있어서 엄청난 발전을 했다는 것을 이미 경험을 통해서 알고 있을 것이다.

이런 음악의 발전은 음원을 재생하는 기술에 그치지 않고, 음악과 관련된 많은 데이터베이스와의 연계를 통해서 더욱 발전해가고 있는 추세다. 한 가지 훌륭한 예로 길을 걷다가 음악이 흘러나오는데 제목이 전혀 생각이 나지 않는 곡이 있을 것이다. 예전 같으면 그 음악을 쉽게 찾을 수 없어 답답했겠지만, 요즘에는 간단히 아이폰을 꺼내서 Shazam 앱을 실행하고 음악 태깅(Tagging)을 하면 노래 제목, 가수, MP3 등 관련된 모든 정보를 얻을 수 있다. 또한 이를 보관해 다음에 다시 들을 수도 있다. 또 다른 예로는 노래를 잘하는 누군가가 자신의 노래를 인터넷에 올려놓고 다른 사람들이 들어줬으면 하고 바랐을 때가 있을 것이다. 예전에는 유튜브로 비디오를 찍어서 올리는 방법을 사용했다. 하지만 지금은 간단히 아이폰을 꺼내서 smule 앱을 실행하고, 노래를 선택한 후 부르면 전 세계의 모든 사용자들이 그 노래를 듣고 평가를 하게 된다. 또한, smule 앱을 통해서 모르는 누군가와 함께 노래를 부를 수도 있다. 이외에 악기와 관련해서도 많은 앱이 존재한다. 이 모든 앱을 소개하려면 한도 끝도 없을 것이다.

이렇게 많은 앱이 개발되고 있는 중에도 일반 개발자에게 음악에 관련된 프레임워크인 코어 오디오는 그렇게 친숙한 API가 아니다. 많은 개발자들이 음악과 관련된 개발을 두려워하고 잘 모른다고 치부하는 경우가 허다하다. 그 이유 중의 하나가 바로 쉬운 지침서가 존재하지 않기 때문이다. 참 아이러니한 상황이다.

이 책은 그 동안 코어 오디오에 대해서 궁금증을 가지고 있으나 자료가 부족했던 모든 개발자들에게 매우 유용하게 사용될 수 있다. 쉽게 구성된 예제를 통해서 설명하기 때문에 책 한 권을 통달하는 데 그렇게 오랜 시간이 걸리지도 않는다. 모두 알다시피 시작이 어렵지, 우선 감을 익히고 나면 독립적으로 알아서 하는 것은 그렇게 어려운 일이 아니다. 이 책은 그런 역할을 한다. 개발자들이 코어 오디오의 바다로 항해하는 첫 발을 내딛게 도와주고, 노를 젓는 방법을 가르쳐준다. 이 책을 모두 학습한 이후에는 어느 곳을 향해서라도 항해를 할 수 있을 만한 자신감을 얻게 될 것이다.

이 책을 번역하면서 우리나라의 노래방과 관련된 앱이 있는지 찾아보았는데, 한두 개의 노래방 앱이 존재한다는 것을 발견했다. 하지만 인터페이스나 노래를 제공하는 방식 등이 조금 불편하게 구성돼 있고, 사용자 중심으로 만들어지지 않았다는 것을 쉽게 알 수 있었다. 누구나가 좋아하는 노래방 기능을 추가한 SNS(소셜 네트워킹 서비스)를 만들어보는 것은 어떨까? 이런 아이디어는 무궁무진하지만 모두 만들어지지는 않는다. 단지 그 아이디어를 실현할 실력을 키우는 것이 필요할 뿐이다. 독자 여러분들이 이 책을 통해서 그런 실력을 길러서 대한민국을 대표하는 음악 관련 앱을 개발했으면 하는 바람을 가져본다.

옮긴이 소개

황진호

조지 워싱턴 대학교의 컴퓨터 사이언스 학과에서 박사 과정을 졸업하고, 지금은 미국 뉴욕에 위치한 IBM T.J. Watson Research Center에서 클라우드 컴퓨팅과 빅데이터에 관한 연구를 진행 중이다. 에이콘출판사에서 펴낸 『Learning PHP, MySQL & JavaScript 한국어판』(2011), 『Concurrent Programming on Windows 한국어판』(2012), 『Creating iOS 5 Apps Develop and Design 한국어판』(2012), 『Programming iOS 5한국어판』(2012), 『Learning PHP, MySQL & JavaScript Second Edition 한국어판』(2013), 『OpenGL ES를 활용한 iOS 3D 프로그래밍』(2014)을 번역했고, 『리눅스 API의 모든 것』(2012)을 공역했다.

목차

목차
  • 1부. 코어 오디오 이해
  • 1장. 코어 오디오 개요
    • 코어 오디오 프레임워크
    • 코어 오디오 규칙
    • 첫 번째 코어 오디오 애플리케이션
      • 예제 실행
    • 코어 오디오 속성
    • 정리

  • 2장. 소리 이야기
    • 파형 생성
    • 디지털 오디오
    • DIY 샘플
    • 버퍼
    • 오디오 형식
    • 정리

  • 3장. 코어 오디오로 오디오 처리
    • 오디오 데이터 형식
      • 예제: 형식 가늠하기
    • 표준 형식
    • 오디오 유닛으로 오디오 처리
    • 풀 모델
    • 정리

  • 2부. 기본 오디오
  • 4장. 녹음
    • 오디오 큐에 관한 모든 것
    • 녹음기 제작
    • CheckError() 함수
    • 오디오 큐 생성과 사용
    • 오디오 큐를 위한 유틸리티 함수
      • 녹음 오디오 큐 콜백
    • 정리

  • 5장. 재생
    • 재생 애플리케이션 정의
    • 파일 재생 오디오 큐 설정
      • 재생 버퍼 설정
      • 재생 큐 시작
    • 재생 유틸리티 함수
      • 매직 쿠키 처리
      • 버퍼 크기와 기대되는 패킷 수 계산하기
    • 재생 오디오 큐 콜백
    • 큐 기반 재생의 기능과 한계
    • 정리

  • 6장. 변환
    • afconvert 유틸리티
    • 오디오 변환 서비스 사용
    • 변환을 위한 파일 설정
      • 오디오 변환 서비스 호출
      • 변환기 콜백 구현
    • 확장된 오디오 파일 서비스로 변환
      • 확장된 오디오 파일로 읽고 변환하기
    • 정리

  • 3부. 고급 오디오
  • 7장. 오디오 유닛: 생성기, 효과, 렌더링
    • 놀라운 기능이 발현되는 곳
    • 오디오 유닛의 동작 방법
    • 오디오 유닛 확장
    • 첫 번째 오디오 유닛
      • main() 함수 빌드
      • 오디오 유닛 그래프 생성
      • 파일 재생기 오디오 유닛 설정
    • 오디오 유닛으로 말하기와 효과
      • 음성 합성 그래프의 블록 생성
      • 음성 합성기 AUGraph 생성
      • 음성 합성기 설정
      • 효과 추가
    • 오디오 렌더링 처리 단계에 개발자 코드 추가
      • 오디오 유닛 렌더 사이클
      • 맞춤형 렌더링 예제
      • 오디오 유닛을 생성하고 연결
      • 렌더 콜백 함수
    • 정리

  • 8장. 오디오 유닛: 입력과 혼합
    • I/O 입력 다루기
      • 입력과 출력 유닛을 연결
      • 입력을 위해 AUHAL 유닛을 생성
      • 입력 콜백 작성
      • CARingBuffer의 샘플을 재생하기 위한 AUGraph 생성
      • 재생 애플리케이션의 렌더 콜백 작성
      • 재생 예제 실행
    • 혼합
    • 정리

  • 9장. 위치기반 음향
    • 공간에서 음향
    • OpenAL API
    • 소리를 공간에 위치
      • 예제 설정
      • OpenAL 구조체 사용
      • 근원의 위치를 이동
      • OpenAL 버퍼를 위해 샘플 불러오기
    • OpenAL의 스트리밍 오디오
      • OpenAL 스트리밍 예제 설정
      • 스트리밍을 위한 ExtAudioFile 설정
      • OpenAL 버퍼를 다시 채우기
    • 정리

  • 4부. 추가적인 주제
  • 10장. iOS에서의 코어 오디오
    • 코어 오디오가 주머니에 있는가?
    • 다른 기능과 조화: 오디오 세션 서비스
    • 오디오 세션 예제
      • 앱 설정
      • 오디오 세션과 오디오 큐 초기화
      • 음색 생성기 메소드
      • iOS 인터럽트 처리
    • iOS에서 오디오 유닛
      • iOS RemoteIO 유닛으로 오디오 통과 앱 제작
      • 통과 예제 설정
      • 캡처와 재생을 위해 RemoteIO 오디오 유닛 설정
      • RemoteIO 렌더 콜백
      • 그 외의 iOS 오디오 기능
      • iOS에서 원격 제어
      • iOS 하드웨어 위험
    • 정리

  • 11장. 코어 MIDI
    • MIDI 개념
    • 코어 MIDI
      • 코어 MIDI 구조
      • 코어 MIDI 용어
      • 코어 MIDI 속성
      • MIDI 메시지
    • 장치 유닛
    • 간단한 MIDI 합성기 제작
      • MIDI에 연결
    • MIDI 알림과 이벤트 처리
      • AUGraph 재생
    • MIDI 이벤트 제작
      • MIDIWifiSource 예제 설정
      • 와이파이를 통한 MIDI 설정
      • MIDI 메시지 전송
      • 와이파이 MIDI 데이터를 수신하기 위해 맥 설정
    • 정리

  • 12장. 정리
    • 코어 오디오의 남은 내용
    • 다음 과정
      • 디지털 신호 처리
    • 라이온과 iOS 5
    • AUSampler
      • iOS에서 코어 오디오
    • 코어 오디오 커뮤니티
    • 정리

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안